{"version":3,"sources":["../node_modules/@aws-amplify/ui-components/dist/esm-es5 lazy /^/.//.*/.entry/.js$/ include: //.entry/.js$/ exclude: //.system/.entry/.js$/ groupOptions: {} namespace object","Components/Navigation.js","Utils/ScrollToTop.js","Utils/AnimatedSwitch.js","Components/ImageService.js","Utils/uihelpers.js","Components/MemberCard.js","graphql/queries.js","Pages/Home.js","Components/Members/HeaderBlock.js","Components/Members/Description.js","Components/Members/InviteDialog.js","graphql/mutations.js","Components/Members/PersonSubNav.js","Components/Associations/AssocAutoComplete.js","Components/Associations/RemoveAssociationDialog.js","Components/Associations/AssociationCard.js","Components/Members/MemberAssociations.js","Components/Media/ImageCard.js","Components/Media/AudioCard.js","Components/Members/Media.js","Components/Family.js","graphql/savedQueries.js","Pages/Member.js","Pages/NewMember.js","Components/Associations/AssociationDialog.js","Pages/UpdateMember.js","Pages/Help.js","Routes.js","App.js","reportWebVitals.js","aws-exports.js","index.js"],"names":["map","webpackAsyncContext","req","__webpack_require__","o","Promise","resolve","then","e","Error","code","ids","id","keys","Object","module","exports","useStyles","makeStyles","theme","root","flexGrow","menuButton","marginRight","spacing","button","margin","appBar","zIndex","height","backgroundColor","justifyContent","toolBar","minHeight","logOut","marginLeft","borderRadius","drawer","width","flexShrink","drawerPaper","drawerContainer","overflow","content","padding","user","display","breakpoints","up","title","search","position","shape","fade","palette","common","white","searchIcon","pointerEvents","alignItems","inputRoot","color","inputInput","paddingLeft","transition","transitions","create","logo","border","Navigation","props","classes","useState","setUser","useEffect","a","Auth","currentAuthenticatedUser","console","log","getUser","className","AppBar","Toolbar","to","src","Typography","variant","noWrap","Button","startIcon","Help","component","RouterLink","ScrollToTop","prevProps","this","location","window","scrollTo","children","Component","withRouter","AnimatedSwitch","history","rest","reverse","pathname","flipMove","preEnterPose","exitPose","ContextRouteAnimation","posed","div","enter","opacity","type","ease","duration","leftSide","rightSide","man","woman","other","key","sex","Storage","get","buildFullName","member","prefix","firstname","middlename","lastname","suffix","has","name","style","buildShortName","actionarea","details","flexDirection","flex","cover","maxHeight","objectFit","minWidth","chip","controls","justifySelf","paddingBottom","playIcon","MemberCard","useTheme","profileImage","setProfileImage","matches","useMediaQuery","IS","profileKey","getProfile","Card","raised","CardActionArea","CardMedia","image","CardContent","phone","length","Chip","icon","PhoneAndroid","href","label","email","Email","CardActions","IconButton","aria-label","ChevronRight","listMembers","searchWrapper","input","borderTopLeftRadius","borderBottomLeftRadius","iconButton","borderTopRightRadius","borderBottomRightRadius","divider","backdrop","HeaderBlock","profilePic","setProfilePic","getProfilePic","Container","Paper","marginBottom","Grid","container","item","xs","md","List","paddingTop","ListItem","ListItemIcon","PersonOutline","ListItemText","primary","size","Phone","replace","textDecoration","fontSize","Room","address","Cake","moment","birthdate","format","marginTop","abstract","Description","whiteSpace","description","InviteDialog","React","open","setOpen","MFA","setMFA","enqueueSnackbar","useSnackbar","handleClose","handleInviteAndClose","toLowerCase","API","graphql","graphqlOperation","onClick","Share","Dialog","onClose","aria-labelledby","DialogTitle","DialogContent","DialogContentText","ButtonGroup","fullWidth","DialogActions","PersonSubNav","ChevronLeft","Edit","AssocAutoComplete","options","setOptions","loading","active","queries","response","data","items","members","Autocomplete","onOpen","getOptionSelected","option","value","getOptionLabel","onChange","event","newValue","onValueChange","renderInput","params","TextField","InputProps","endAdornment","Fragment","CircularProgress","AssociationDialog","association","onRemove","handleRemove","top","right","onDelete","member2","header","media","expand","transform","shortest","expandOpen","avatar","red","AssociationCard","editMode","useHistory","push","fontWeight","MemberAssociations","associations","setAssociations","parents","filter","assoc","includes","sibspou","childs","ImageCard","setImage","assetKey","getImage","AudioCard","audio","setAudio","getAudio","flexWrap","background","paper","gridList","Media","mediaFiles","setMediaFiles","viewerOpen","setViewerOpen","fileToView","setFileToView","displayFile","fileType","GridList","cellHeight","cols","m","GridListTile","Family","getMember","setMember","match","query","variables","Backdrop","setSex","setAddress","setPrefix","setSuffix","firstName","setFirstName","middleName","setMiddleName","lastName","setLastName","setEmail","setPhone","setAbstract","setDescription","Date","selectedDate","setSelectedDate","working","setWorking","handleFormSubmit","memberObj","uuidv4","fileext","exec","undefined","put","catch","err","pPic","cursor","noValidate","autoComplete","autoUpload","maxFiles","multiple","onChangeStatus","status","meta","file","submitButtonComponent","inputContent","files","extra","reject","accept","target","FormControl","InputLabel","Select","labelId","MenuItem","utils","MomentUtils","DatePicker","disableFuture","openTo","views","date","placeholder","multiline","paddingRight","disabled","onAdd","assocType","setAssocType","assocMember","setAssocMember","handleSaveAndClose","assocObj","memberAssociationsId","associationMember1Id","associationMember2Id","message","setId","picHasChanged","setPicHasChanged","memberdata","uploadMediaFiles","reduce","p","uploadMedia","mUp","mediaId","mediaObj","memberMediaId","mediaMemberId","Publish","routes","setMembers","filteredMembers","setFilteredMembers","setQuery","memSort","setMemSort","sortedMembers","sortBy","getMembers","filteredmem","mem","Add","InputBase","inputProps","index","path","Link","minheight","class","NewMember","UpdateMember","Member","Routes","route","exact","App","authState","setAuthState","onAuthUIStateChange","nextAuthState","authData","AuthState","SignedIn","maxSnack","anchorOrigin","vertical","horizontal","usernameAlias","headerText","headerSubtitle","hideSignUp","slot","formFields","required","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","awsmobile","Amplify","configure","awsconfig","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.e89c4b41.chunk.js","sourcesContent":["var map = {\n\t\"./amplify-amazon-button_5.entry.js\": [\n\t\t530,\n\t\t16\n\t],\n\t\"./amplify-auth-fields_9.entry.js\": [\n\t\t531,\n\t\t17\n\t],\n\t\"./amplify-authenticator.entry.js\": [\n\t\t532,\n\t\t5\n\t],\n\t\"./amplify-button_3.entry.js\": [\n\t\t533,\n\t\t18\n\t],\n\t\"./amplify-chatbot.entry.js\": [\n\t\t534,\n\t\t4\n\t],\n\t\"./amplify-checkbox.entry.js\": [\n\t\t535,\n\t\t19\n\t],\n\t\"./amplify-confirm-sign-in_7.entry.js\": [\n\t\t536,\n\t\t6\n\t],\n\t\"./amplify-container.entry.js\": [\n\t\t537,\n\t\t20\n\t],\n\t\"./amplify-federated-buttons_2.entry.js\": [\n\t\t538,\n\t\t21\n\t],\n\t\"./amplify-federated-sign-in.entry.js\": [\n\t\t539,\n\t\t22\n\t],\n\t\"./amplify-form-field_4.entry.js\": [\n\t\t540,\n\t\t23\n\t],\n\t\"./amplify-greetings.entry.js\": [\n\t\t541,\n\t\t24\n\t],\n\t\"./amplify-icon-button.entry.js\": [\n\t\t542,\n\t\t25\n\t],\n\t\"./amplify-icon.entry.js\": [\n\t\t543,\n\t\t7\n\t],\n\t\"./amplify-link.entry.js\": [\n\t\t544,\n\t\t26\n\t],\n\t\"./amplify-nav_2.entry.js\": [\n\t\t545,\n\t\t27\n\t],\n\t\"./amplify-photo-picker.entry.js\": [\n\t\t546,\n\t\t28\n\t],\n\t\"./amplify-picker.entry.js\": [\n\t\t547,\n\t\t29\n\t],\n\t\"./amplify-radio-button_2.entry.js\": [\n\t\t548,\n\t\t8\n\t],\n\t\"./amplify-s3-album.entry.js\": [\n\t\t549,\n\t\t9\n\t],\n\t\"./amplify-s3-image-picker.entry.js\": [\n\t\t550,\n\t\t10\n\t],\n\t\"./amplify-s3-image.entry.js\": [\n\t\t551,\n\t\t11\n\t],\n\t\"./amplify-s3-text-picker.entry.js\": [\n\t\t552,\n\t\t12\n\t],\n\t\"./amplify-s3-text.entry.js\": [\n\t\t553,\n\t\t13\n\t],\n\t\"./amplify-select-mfa-type.entry.js\": [\n\t\t554,\n\t\t30\n\t],\n\t\"./amplify-sign-in-button.entry.js\": [\n\t\t555,\n\t\t14\n\t],\n\t\"./amplify-toast.entry.js\": [\n\t\t556,\n\t\t31\n\t],\n\t\"./amplify-tooltip.entry.js\": [\n\t\t557,\n\t\t32\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 517;\nmodule.exports = webpackAsyncContext;","import React, {useState, useEffect} from 'react';\nimport {Link as RouterLink} from 'react-router-dom'\nimport AppBar from '@material-ui/core/AppBar';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport IconButton from '@material-ui/core/IconButton';\nimport Button from '@material-ui/core/Button';\nimport Typography from '@material-ui/core/Typography';\nimport InputBase from '@material-ui/core/InputBase';\nimport { fade, makeStyles } from '@material-ui/core/styles';\nimport MenuIcon from '@material-ui/icons/Menu';\nimport Chip from '@material-ui/core/Chip';\nimport SearchIcon from '@material-ui/icons/Search';\nimport CssBaseline from '@material-ui/core/CssBaseline';\nimport List from '@material-ui/core/List';\nimport Divider from '@material-ui/core/Divider';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport InboxIcon from '@material-ui/icons/MoveToInbox';\nimport ExitToApp from '@material-ui/icons/ExitToApp';\nimport MailIcon from '@material-ui/icons/Mail';\nimport { AmplifySignOut } from '@aws-amplify/ui-react';\nimport { Auth } from 'aws-amplify';\nimport {\n Add,\n Help\n } from '@material-ui/icons';\nimport './Navigation.css';\n\nconst drawerWidth = 240;\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n flexGrow: 1,\n },\n menuButton: {\n marginRight: theme.spacing(2),\n },\n button:{\n margin: theme.spacing(1),\n },\n appBar: {\n zIndex: \"1200 !important\" ,\n height:54,\n backgroundColor:'#7b4777',\n justifyContent:'space-between'\n },\n toolBar:{\n height:54,\n minHeight:54\n },\n logOut:{\n marginLeft:10,\n borderRadius:8\n },\n drawer: {\n width: drawerWidth,\n flexShrink: 0,\n zIndex:\"1000 !important\"\n },\n drawerPaper: {\n width: drawerWidth,\n },\n drawerContainer: {\n overflow: 'auto',\n },\n content: {\n flexGrow: 1,\n padding: theme.spacing(3),\n },\n user: {\n display: 'none',\n marginLeft:10,\n borderRadius:8,\n [theme.breakpoints.up('sm')]: {\n display: 'block',\n },\n },\n title: {\n flexGrow: 1,\n display: 'block',\n },\n search: {\n position: 'relative',\n borderRadius: theme.shape.borderRadius,\n backgroundColor: fade(theme.palette.common.white, 0.15),\n '&:hover': {\n backgroundColor: fade(theme.palette.common.white, 0.25),\n },\n marginLeft: 0,\n width: '100%',\n [theme.breakpoints.up('sm')]: {\n marginLeft: theme.spacing(1),\n width: 'auto',\n },\n },\n searchIcon: {\n padding: theme.spacing(0, 2),\n height: '100%',\n position: 'absolute',\n pointerEvents: 'none',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n inputRoot: {\n color: 'inherit',\n },\n inputInput: {\n padding: theme.spacing(1, 1, 1, 0),\n // vertical padding + font size from searchIcon\n paddingLeft: `calc(1em + ${theme.spacing(4)}px)`,\n transition: theme.transitions.create('width'),\n width: '100%',\n [theme.breakpoints.up('sm')]: {\n width: '12ch',\n '&:focus': {\n width: '20ch',\n },\n },\n },\n logo:{\n height:40,\n marginRight: 20,\n border: '1px solid grey',\n borderRadius: 8,\n flexGrow: 1,\n }\n}));\n\nexport default function Navigation(props){\n const classes = useStyles();\n const [drawerOpen, setDrawerOpen] = useState(false);\n const [user, setUser] = useState(null)\n useEffect(() => {\n async function getUser(){\n const user = await Auth.currentAuthenticatedUser();\n console.log(user)\n setUser(user)\n }\n getUser()\n }, []);\n const toggleDrawer = () => {\n setDrawerOpen(!drawerOpen)\n };\n \n const signOut = ()=>{\n Auth.signOut();\n }\n console.log(\"PROPS\", props)\n return
\n \n \n \n \n \n Kin Info\n \n }\n component={RouterLink}\n to=\"/help\"\n >\n Help\n \n \n \n \n
\n \n}","\nimport React, {Component} from 'react';\nimport {\n withRouter\n} from \"react-router-dom\";\n\nclass ScrollToTop extends Component {\n componentDidUpdate(prevProps) {\n if (this.props.location !== prevProps.location) {\n window.scrollTo(0, 0)\n }\n }\n\n render() {\n return this.props.children\n }\n}\n\nexport default withRouter(ScrollToTop)","import React from \"react\";\nimport { Switch } from \"react-router-dom\";\nimport posed, { PoseGroup } from \"react-pose\";\n\n/**\n * This component is used to control the routing animation.\n * It controls what should happen after animation complete (onRest).\n * It differs animation direction based on routePopped props. (Set in router.action.js and available from routerReducer).\n * @param location React router location used as key in Switch\n * @param children All routes (set in Routes.js)\n * @param routePopped Used to manage direction of animation\n * @param rest All other props sent down\n */\nexport const AnimatedSwitch = ({ history, location, children, ...rest }) => {\n const reverse = location.pathname === \"/\";\n\n return (\n \n \n \n {children}\n \n \n \n );\n};\n\nexport default AnimatedSwitch;\n\n\n/**\n * Try to change up the different commented values for varying animatmions\n */\nexport const ContextRouteAnimation = posed.div({\n enter: {\n // x: 0,\n opacity: 1,\n // scale: 1,\n transition: {\n type: \"tween\",\n ease: \"easeInOut\",\n duration: 400\n }\n },\n leftSide: {\n // x: \"-100%\",\n opacity: 0,\n // scale: 1.5,\n transition: {\n type: \"tween\",\n ease: \"easeInOut\",\n duration: 400\n }\n },\n rightSide: {\n // x: \"100%\",\n opacity: 0,\n // scale: 1.5,\n transition: {\n type: \"tween\",\n ease: \"easeInOut\",\n duration: 400\n }\n }\n});","import { Storage } from 'aws-amplify';\n\nconst man = \"https://futurefamilymedia205301-dev.s3.us-east-2.amazonaws.com/siteassets/man.jpg\"\nconst woman = \"https://futurefamilymedia205301-dev.s3.us-east-2.amazonaws.com/siteassets/woman.jpg\"\nconst other = \"https://futurefamilymedia205301-dev.s3.us-east-2.amazonaws.com/siteassets/generic-profile-icon-8.jpg\";\n\n\nexport default async(key, sex=null)=>{\n if(key) return await Storage.get(key)\n if(!key && sex){\n if(sex === \"MALE\") return man;\n if(sex === \"FEMALE\") return woman;\n };\n return other;\n}","import {has} from 'lodash'\n\nexport const buildFullName = (member) =>{\n var prefix, firstname, middlename, lastname, suffix;\n if(has(member.name, \"prefix\")) prefix = {member.name.prefix};\n if(has(member.name, \"firstname\")) firstname = {member.name.firstname};\n if(has(member.name, \"middlename\")) middlename = {member.name.middlename};\n if(has(member.name, \"lastname\")) lastname = {member.name.lastname};\n \n if(has(member.name, \"suffix\")) suffix = {member.name.suffix};\n \n return
{prefix} {firstname} {middlename} {lastname} {suffix}
;\n}\n\nexport const buildShortName = (member) => {\n var firstname, lastname;\n if(has(member.name, \"firstname\")) firstname = {member.name.firstname};\n if(has(member.name, \"lastname\")) lastname = {member.name.lastname};\n \n return
{firstname} {lastname}
;\n}","import React, {useState, useEffect} from 'react';\nimport {\n Card, \n CardHeader, \n CardMedia, \n CardContent, \n CardActions, \n CardActionArea,\n Collapse, \n Avatar,\n IconButton,\n Typography,\n Select,\n MenuItem,\n Chip\n} from '@material-ui/core';\n\n\nimport { makeStyles, useTheme } from '@material-ui/core/styles';\nimport clsx from 'clsx';\nimport { red } from '@material-ui/core/colors';\nimport {\n ChevronRight,\n Email,\n PhoneAndroid\n } from '@material-ui/icons';\nimport IS from './ImageService'\nimport {buildShortName} from '../Utils/uihelpers' \nimport {Link as RouterLink} from \"react-router-dom\";\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\nimport {has} from 'lodash'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n margin:5\n },\n actionarea:{\n display: 'flex',\n justifyContent:'flex-start'\n },\n details: {\n display: 'flex',\n flexDirection: 'column',\n flex:5\n },\n content: {\n flex: '1 0 auto',\n },\n cover: {\n width:140,\n minHeight:140,\n maxHeight:'100%',\n height:'100%',\n flex:1,\n objectFit:'cover',\n minWidth:100\n },\n chip: {\n margin:5\n },\n controls: {\n display: 'flex',\n flex:1,\n justifySelf:'flex-end',\n alignItems: 'center',\n paddingLeft: theme.spacing(1),\n paddingBottom: theme.spacing(1),\n },\n playIcon: {\n height: 38,\n width: 38,\n },\n}));\n\nexport default function MemberCard({member}) {\n const classes = useStyles();\n const theme = useTheme();\n const [expanded, setExpanded] = useState(false);\n const [profileImage, setProfileImage] = useState(null);\n const matches = useMediaQuery('(min-width:600px)');\n useEffect(() => {\n async function getProfile(){\n setProfileImage(await IS(member.profileKey))\n }\n getProfile();\n }, []);\n \n \n \n return (\n \n \n \n
\n \n \n {buildShortName(member)}\n \n \n {has(member, 'phone') && member.phone.length > 0 && member.phone !== \"NA\" && } component=\"a\" href={\"tel:\"+member.phone} label={member.phone} className={classes.chip} />}\n {has(member, 'email') && member.email.length > 0 && member.email !== \"NA\" && } component=\"a\" href={\"mailto:\"+member.email} label={member.email} className={classes.chip} />}\n \n \n \n
\n \n \n \n \n \n
\n
\n );\n}\n","/* eslint-disable */\n// this is an auto generated file. This will be overwritten\n\nexport const getFamily = /* GraphQL */ `\n query GetFamily($id: ID!) {\n getFamily(id: $id) {\n id\n name\n members {\n items {\n id\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const listFamilys = /* GraphQL */ `\n query ListFamilys(\n $filter: ModelFamilyFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listFamilys(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n name\n members {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getMember = /* GraphQL */ `\n query GetMember($id: ID!) {\n getMember(id: $id) {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n media {\n items {\n id\n assetKey\n fileType\n createdAt\n updatedAt\n }\n nextToken\n }\n families {\n items {\n id\n name\n createdAt\n updatedAt\n }\n nextToken\n }\n associations {\n items {\n id\n type\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const listMembers = /* GraphQL */ `\n query ListMembers(\n $filter: ModelMemberFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listMembers(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n media {\n nextToken\n }\n families {\n nextToken\n }\n associations {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getUser = /* GraphQL */ `\n query GetUser($id: ID!) {\n getUser(id: $id) {\n id\n cognitoId\n claimedMember {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n media {\n nextToken\n }\n families {\n nextToken\n }\n associations {\n nextToken\n }\n createdAt\n updatedAt\n }\n email\n phone\n createdAt\n updatedAt\n }\n }\n`;\nexport const listUsers = /* GraphQL */ `\n query ListUsers(\n $filter: ModelUserFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listUsers(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n cognitoId\n claimedMember {\n id\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n createdAt\n updatedAt\n }\n email\n phone\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getChange = /* GraphQL */ `\n query GetChange($id: ID!) {\n getChange(id: $id) {\n id\n user\n fields\n fromValues\n toValues\n createdAt\n updatedAt\n }\n }\n`;\nexport const listChanges = /* GraphQL */ `\n query ListChanges(\n $filter: ModelChangeFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listChanges(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n user\n fields\n fromValues\n toValues\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getMedia = /* GraphQL */ `\n query GetMedia($id: ID!) {\n getMedia(id: $id) {\n id\n assetKey\n fileType\n member {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n media {\n nextToken\n }\n families {\n nextToken\n }\n associations {\n nextToken\n }\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const listMedias = /* GraphQL */ `\n query ListMedias(\n $filter: ModelMediaFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listMedias(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n assetKey\n fileType\n member {\n id\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getAssociation = /* GraphQL */ `\n query GetAssociation($id: ID!) {\n getAssociation(id: $id) {\n id\n type\n member1 {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n media {\n nextToken\n }\n families {\n nextToken\n }\n associations {\n nextToken\n }\n createdAt\n updatedAt\n }\n member2 {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n media {\n nextToken\n }\n families {\n nextToken\n }\n associations {\n nextToken\n }\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const listAssociations = /* GraphQL */ `\n query ListAssociations(\n $filter: ModelAssociationFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listAssociations(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n type\n member1 {\n id\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n createdAt\n updatedAt\n }\n member2 {\n id\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getStory = /* GraphQL */ `\n query GetStory($id: ID!) {\n getStory(id: $id) {\n id\n storyMember {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n media {\n nextToken\n }\n families {\n nextToken\n }\n associations {\n nextToken\n }\n createdAt\n updatedAt\n }\n user {\n id\n cognitoId\n claimedMember {\n id\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n createdAt\n updatedAt\n }\n email\n phone\n createdAt\n updatedAt\n }\n story\n createdAt\n updatedAt\n }\n }\n`;\nexport const listStorys = /* GraphQL */ `\n query ListStorys(\n $filter: ModelStoryFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listStorys(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n storyMember {\n id\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n createdAt\n updatedAt\n }\n user {\n id\n cognitoId\n email\n phone\n createdAt\n updatedAt\n }\n story\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\n","/*\n Database driven index of all people\n*/\n\nimport React, {useState, useEffect} from 'react';\nimport {Chip} from '@material-ui/core'\nimport {Add} from '@material-ui/icons'\nimport {Link as RouterLink} from \"react-router-dom\";\nimport Backdrop from '@material-ui/core/Backdrop';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport MemberCard from '../Components/MemberCard';\nimport * as queries from '../graphql/queries';\nimport { API } from 'aws-amplify';\nimport SearchIcon from '@material-ui/icons/Search';\nimport {IconButton, InputBase, ButtonGroup, Button, Grid} from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {filter, includes, some, has, sortBy} from 'lodash'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n padding: '2px 4px',\n display: 'flex',\n alignItems: 'center',\n width: 400,\n },\n searchWrapper: {\n alignItems: 'stretch',\n display: 'flex'\n },\n input: {\n marginLeft: theme.spacing(1),\n flex: 1,\n backgroundColor:'#dddddd',\n paddingLeft:10,\n borderTopLeftRadius:6,\n borderBottomLeftRadius:6\n },\n iconButton: {\n padding: 5,\n paddingBottom:3,\n backgroundColor:'#dddddd',\n borderRadius:0,\n borderTopRightRadius:6,\n borderBottomRightRadius:6\n },\n divider: {\n height: 28,\n margin: 4,\n },\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n color: '#fff',\n },\n}));\n\nexport default function Home() {\n const classes = useStyles();\n //Set up initial variables\n const [members, setMembers] = useState([])\n const [filteredMembers, setFilteredMembers] = useState([])\n const [query, setQuery] = useState([])\n const [memSort, setMemSort] = useState(['name.lastname', 'name.firstname'])\n const [open, setOpen] = React.useState(false);\n \n //Get list of members\n useEffect(() => {\n setOpen(true)\n async function getMembers(){\n const members = await API.graphql({ query: queries.listMembers });\n console.log(members); \n setMembers(members.data.listMembers.items)\n let sortedMembers = sortBy(members.data.listMembers.items, memSort);\n setFilteredMembers(sortedMembers)\n setOpen(false)\n }\n getMembers()\n \n }, []);\n \n \n //Filter member list by search query\n useEffect(() => {\n if(query.length > 1){\n var filteredmem = filter(members, mem=>{\n let name = `${mem.name.firstname} ${mem.name.middlename} ${mem.name.lastname}`\n if(includes(name.toLowerCase(), query.toLowerCase())) return true\n if(has(mem, 'email') && includes(mem.email.toLowerCase(), query.toLowerCase())) return true\n return false\n })\n let sortedMembers = sortBy(filteredmem, memSort);\n setFilteredMembers(sortedMembers);\n } else {\n let sortedMembers = sortBy(members, memSort);\n setFilteredMembers(sortedMembers)\n }\n }, [query, memSort]);\n \n return (\n
\n
\n } />\n \n \n \n \n \n \n \n
\n setQuery(e.target.value)}\n inputProps={{ 'aria-label': 'search kin' }}\n />\n \n \n \n
\n
\n \n
\n {filteredMembers.map((member, index) => )}\n
\n \n \n \n
\n );\n \n}","import React, {useEffect, useState} from 'react'\nimport {has} from 'lodash'\n\nimport {Container, Grid, List, ListItem, ListItemText, ListItemIcon,ListSubheader , Typography, Paper} from '@material-ui/core'\nimport {PersonOutline, Phone, Email, Room, Cake} from '@material-ui/icons'\nimport {buildFullName} from '../../Utils/uihelpers'\nimport moment from 'moment'\n\nimport IS from '../ImageService'\n/* The header block will contain an editable profile picture and bio information about the person */\n\nfunction HeaderBlock(props){\n const [profilePic, setProfilePic] = useState(null)\n useEffect(() => {\n getProfilePic();\n }, [props.member]);\n \n const getProfilePic=async()=>{\n console.log(props.member.profileKey)\n setProfilePic(await IS(props.member.profileKey, props.member.sex))\n }\n \n return \n \n \n {profilePic && }\n \n \n \n \n Contact\n \n \n \n \n \n \n \n \n \n \n \n {props.member.phone && {props.member.phone}}\n \n \n \n \n \n {props.member.email && {props.member.email} }\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Abstract\n \n \n {props.member.abstract}\n \n \n \n \n \n \n}\n\nexport default HeaderBlock;","import React from 'react'\nimport {Typography, Container, Paper} from '@material-ui/core'\n/* Display rich text about this person */\n/* text will be editable via a rich text editor (web version of a word processor) */\n\nfunction Description(props){\n \n return \n \n Description\n \n \n {props.member.description || \"\"}\n \n \n}\n\nexport default Description;","import React from 'react';\nimport {\n Button, \n TextField, \n Dialog, \n DialogActions, \n DialogContent, \n DialogContentText, \n DialogTitle,\n FormControl,\n InputLabel,\n Select,\n MenuItem,\n ButtonGroup\n} from '@material-ui/core';\nimport { API, graphqlOperation, Storage, Auth } from 'aws-amplify';\nimport { inviteUser } from '../../graphql/mutations';\nimport {has} from 'lodash'\nimport { v4 as uuidv4 } from 'uuid';\nimport {Share} from '@material-ui/icons'\nimport { useSnackbar } from 'notistack';\n\n\nexport default function InviteDialog({member}) {\n const [open, setOpen] = React.useState(false);\n const [MFA, setMFA] = React.useState('EMAIL')\n const { enqueueSnackbar } = useSnackbar();\n const handleClickOpen = () => {\n setOpen(true);\n };\n\n const handleClose = () => {\n setOpen(false);\n };\n const handleInviteAndClose = async() => {\n \n //Create Association\n try {\n var user = {id:member.id}\n if(has(member, 'email') && member.email.length > 0) user.email = member.email.toLowerCase();\n if(has(member, 'phone') && member.phone.length > 0) user.phone = \"+1\"+member.phone.replace(/\\D/g, \"\");\n user.MFA = MFA;\n const data = await API.graphql(graphqlOperation(inviteUser, user))\n enqueueSnackbar(`Invitation SENT`, { variant: 'success' });\n setOpen(false);\n \n } catch(e){\n console.log(e)\n enqueueSnackbar(`Invitation Failed`, { variant: 'error' });\n }\n };\n return (\n
\n \n \n Invite {member.name.firstname}\n \n \n Select the way you would like to invite {member.name.firstname}:\n \n
\n \n {member.email && }\n {member.phone && }\n \n
\n \n \n \n \n
\n
\n );\n}\n","/* eslint-disable */\n// this is an auto generated file. This will be overwritten\n\nexport const inviteUser = /* GraphQL */ `\n mutation InviteUser(\n $id: String\n $email: String\n $phone: String\n $MFA: String\n ) {\n inviteUser(id: $id, email: $email, phone: $phone, MFA: $MFA)\n }\n`;\nexport const createFamily = /* GraphQL */ `\n mutation CreateFamily(\n $input: CreateFamilyInput!\n $condition: ModelFamilyConditionInput\n ) {\n createFamily(input: $input, condition: $condition) {\n id\n name\n members {\n items {\n id\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateFamily = /* GraphQL */ `\n mutation UpdateFamily(\n $input: UpdateFamilyInput!\n $condition: ModelFamilyConditionInput\n ) {\n updateFamily(input: $input, condition: $condition) {\n id\n name\n members {\n items {\n id\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteFamily = /* GraphQL */ `\n mutation DeleteFamily(\n $input: DeleteFamilyInput!\n $condition: ModelFamilyConditionInput\n ) {\n deleteFamily(input: $input, condition: $condition) {\n id\n name\n members {\n items {\n id\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const createMember = /* GraphQL */ `\n mutation CreateMember(\n $input: CreateMemberInput!\n $condition: ModelMemberConditionInput\n ) {\n createMember(input: $input, condition: $condition) {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n media {\n items {\n id\n assetKey\n fileType\n createdAt\n updatedAt\n }\n nextToken\n }\n families {\n items {\n id\n name\n createdAt\n updatedAt\n }\n nextToken\n }\n associations {\n items {\n id\n type\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateMember = /* GraphQL */ `\n mutation UpdateMember(\n $input: UpdateMemberInput!\n $condition: ModelMemberConditionInput\n ) {\n updateMember(input: $input, condition: $condition) {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n media {\n items {\n id\n assetKey\n fileType\n createdAt\n updatedAt\n }\n nextToken\n }\n families {\n items {\n id\n name\n createdAt\n updatedAt\n }\n nextToken\n }\n associations {\n items {\n id\n type\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteMember = /* GraphQL */ `\n mutation DeleteMember(\n $input: DeleteMemberInput!\n $condition: ModelMemberConditionInput\n ) {\n deleteMember(input: $input, condition: $condition) {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n media {\n items {\n id\n assetKey\n fileType\n createdAt\n updatedAt\n }\n nextToken\n }\n families {\n items {\n id\n name\n createdAt\n updatedAt\n }\n nextToken\n }\n associations {\n items {\n id\n type\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const createUser = /* GraphQL */ `\n mutation CreateUser(\n $input: CreateUserInput!\n $condition: ModelUserConditionInput\n ) {\n createUser(input: $input, condition: $condition) {\n id\n cognitoId\n claimedMember {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n media {\n nextToken\n }\n families {\n nextToken\n }\n associations {\n nextToken\n }\n createdAt\n updatedAt\n }\n email\n phone\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateUser = /* GraphQL */ `\n mutation UpdateUser(\n $input: UpdateUserInput!\n $condition: ModelUserConditionInput\n ) {\n updateUser(input: $input, condition: $condition) {\n id\n cognitoId\n claimedMember {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n media {\n nextToken\n }\n families {\n nextToken\n }\n associations {\n nextToken\n }\n createdAt\n updatedAt\n }\n email\n phone\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteUser = /* GraphQL */ `\n mutation DeleteUser(\n $input: DeleteUserInput!\n $condition: ModelUserConditionInput\n ) {\n deleteUser(input: $input, condition: $condition) {\n id\n cognitoId\n claimedMember {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n media {\n nextToken\n }\n families {\n nextToken\n }\n associations {\n nextToken\n }\n createdAt\n updatedAt\n }\n email\n phone\n createdAt\n updatedAt\n }\n }\n`;\nexport const createChange = /* GraphQL */ `\n mutation CreateChange(\n $input: CreateChangeInput!\n $condition: ModelChangeConditionInput\n ) {\n createChange(input: $input, condition: $condition) {\n id\n user\n fields\n fromValues\n toValues\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateChange = /* GraphQL */ `\n mutation UpdateChange(\n $input: UpdateChangeInput!\n $condition: ModelChangeConditionInput\n ) {\n updateChange(input: $input, condition: $condition) {\n id\n user\n fields\n fromValues\n toValues\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteChange = /* GraphQL */ `\n mutation DeleteChange(\n $input: DeleteChangeInput!\n $condition: ModelChangeConditionInput\n ) {\n deleteChange(input: $input, condition: $condition) {\n id\n user\n fields\n fromValues\n toValues\n createdAt\n updatedAt\n }\n }\n`;\nexport const createMedia = /* GraphQL */ `\n mutation CreateMedia(\n $input: CreateMediaInput!\n $condition: ModelMediaConditionInput\n ) {\n createMedia(input: $input, condition: $condition) {\n id\n assetKey\n fileType\n member {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n media {\n nextToken\n }\n families {\n nextToken\n }\n associations {\n nextToken\n }\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateMedia = /* GraphQL */ `\n mutation UpdateMedia(\n $input: UpdateMediaInput!\n $condition: ModelMediaConditionInput\n ) {\n updateMedia(input: $input, condition: $condition) {\n id\n assetKey\n fileType\n member {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n media {\n nextToken\n }\n families {\n nextToken\n }\n associations {\n nextToken\n }\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteMedia = /* GraphQL */ `\n mutation DeleteMedia(\n $input: DeleteMediaInput!\n $condition: ModelMediaConditionInput\n ) {\n deleteMedia(input: $input, condition: $condition) {\n id\n assetKey\n fileType\n member {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n media {\n nextToken\n }\n families {\n nextToken\n }\n associations {\n nextToken\n }\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const createAssociation = /* GraphQL */ `\n mutation CreateAssociation(\n $input: CreateAssociationInput!\n $condition: ModelAssociationConditionInput\n ) {\n createAssociation(input: $input, condition: $condition) {\n id\n type\n member1 {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n media {\n nextToken\n }\n families {\n nextToken\n }\n associations {\n nextToken\n }\n createdAt\n updatedAt\n }\n member2 {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n media {\n nextToken\n }\n families {\n nextToken\n }\n associations {\n nextToken\n }\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateAssociation = /* GraphQL */ `\n mutation UpdateAssociation(\n $input: UpdateAssociationInput!\n $condition: ModelAssociationConditionInput\n ) {\n updateAssociation(input: $input, condition: $condition) {\n id\n type\n member1 {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n media {\n nextToken\n }\n families {\n nextToken\n }\n associations {\n nextToken\n }\n createdAt\n updatedAt\n }\n member2 {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n media {\n nextToken\n }\n families {\n nextToken\n }\n associations {\n nextToken\n }\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteAssociation = /* GraphQL */ `\n mutation DeleteAssociation(\n $input: DeleteAssociationInput!\n $condition: ModelAssociationConditionInput\n ) {\n deleteAssociation(input: $input, condition: $condition) {\n id\n type\n member1 {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n media {\n nextToken\n }\n families {\n nextToken\n }\n associations {\n nextToken\n }\n createdAt\n updatedAt\n }\n member2 {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n media {\n nextToken\n }\n families {\n nextToken\n }\n associations {\n nextToken\n }\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const createStory = /* GraphQL */ `\n mutation CreateStory(\n $input: CreateStoryInput!\n $condition: ModelStoryConditionInput\n ) {\n createStory(input: $input, condition: $condition) {\n id\n storyMember {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n media {\n nextToken\n }\n families {\n nextToken\n }\n associations {\n nextToken\n }\n createdAt\n updatedAt\n }\n user {\n id\n cognitoId\n claimedMember {\n id\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n createdAt\n updatedAt\n }\n email\n phone\n createdAt\n updatedAt\n }\n story\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateStory = /* GraphQL */ `\n mutation UpdateStory(\n $input: UpdateStoryInput!\n $condition: ModelStoryConditionInput\n ) {\n updateStory(input: $input, condition: $condition) {\n id\n storyMember {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n media {\n nextToken\n }\n families {\n nextToken\n }\n associations {\n nextToken\n }\n createdAt\n updatedAt\n }\n user {\n id\n cognitoId\n claimedMember {\n id\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n createdAt\n updatedAt\n }\n email\n phone\n createdAt\n updatedAt\n }\n story\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteStory = /* GraphQL */ `\n mutation DeleteStory(\n $input: DeleteStoryInput!\n $condition: ModelStoryConditionInput\n ) {\n deleteStory(input: $input, condition: $condition) {\n id\n storyMember {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n media {\n nextToken\n }\n families {\n nextToken\n }\n associations {\n nextToken\n }\n createdAt\n updatedAt\n }\n user {\n id\n cognitoId\n claimedMember {\n id\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n createdAt\n updatedAt\n }\n email\n phone\n createdAt\n updatedAt\n }\n story\n createdAt\n updatedAt\n }\n }\n`;\n","import React from 'react';\nimport {Link as RouterLink} from 'react-router-dom'\nimport {Chip} from '@material-ui/core'\nimport {ChevronLeft, Edit, Share} from '@material-ui/icons'\nimport InviteDialog from './InviteDialog'\nimport '../Navigation.css';\n\n\nfunction PersonSubNav(props){\n return
\n \n } />\n {props.member.id && }\n {props.member.id && } />}\n
\n \n}\n\nexport default PersonSubNav;","// *https://www.registers.service.gov.uk/registers/country/use-the-api*\n\nimport React from 'react';\nimport TextField from '@material-ui/core/TextField';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport * as queries from '../../graphql/queries';\nimport { API, graphqlOperation } from 'aws-amplify';\n\nexport default function AssocAutoComplete(props) {\n const [open, setOpen] = React.useState(false);\n const [options, setOptions] = React.useState([]);\n const loading = open && options.length === 0;\n\n React.useEffect(() => {\n let active = true;\n\n if (!loading) {\n return undefined;\n }\n\n (async () => {\n const response = await API.graphql(graphqlOperation(queries.listMembers)); \n const members = await response.data.listMembers.items;\n\n if (active) {\n setOptions(members);\n }\n })();\n\n return () => {\n active = false;\n };\n }, [loading]);\n\n React.useEffect(() => {\n if (!open) {\n setOptions([]);\n }\n }, [open]);\n\n return (\n {\n setOpen(true);\n }}\n onClose={() => {\n setOpen(false);\n }}\n getOptionSelected={(option, value) => option.id === value.id}\n getOptionLabel={(option) => option.name.firstname + \" \" + option.name.lastname}\n onChange={(event, newValue) => {\n props.onValueChange(newValue);\n }}\n options={options}\n loading={loading}\n renderInput={(params) => (\n \n {loading ? : null}\n {params.InputProps.endAdornment}\n \n ),\n }}\n />\n )}\n />\n );\n}\n","import React from 'react';\nimport {\n Button, \n TextField, \n Dialog, \n DialogActions, \n DialogContent, \n DialogContentText, \n DialogTitle,\n FormControl,\n InputLabel,\n Select,\n MenuItem,\n Chip\n \n} from '@material-ui/core';\nimport AssocAutoComplete from './AssocAutoComplete'\nimport {deleteAssociation} from '../../graphql/mutations';\nimport { API, graphqlOperation, Storage, Auth } from 'aws-amplify';\nimport { v4 as uuidv4 } from 'uuid';\nimport { useSnackbar } from 'notistack';\n\n\nexport default function AssociationDialog({association, onRemove}) {\n const [open, setOpen] = React.useState(false);\n const { enqueueSnackbar } = useSnackbar();\n const handleClickOpen = () => {\n setOpen(true);\n };\n\n const handleClose = () => {\n setOpen(false);\n };\n \n const handleRemove = async() => {\n //Create Association\n try {\n \n await API.graphql(graphqlOperation(deleteAssociation, {input: {id:association.id}}))\n enqueueSnackbar(`Association REMOVED`, { variant: 'success' });\n setOpen(false);\n \n onRemove()\n } catch(e){\n console.log(e)\n enqueueSnackbar(`Association could not be removed!`, { variant: 'error' });\n }\n };\n return (\n
\n \n \n Remove Association\n \n \n Are you sure you want to remove {association.member2.name.firstname}?\n \n \n \n \n \n \n \n \n
\n );\n}\n","import React, {useState, useEffect} from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport clsx from 'clsx';\nimport Card from '@material-ui/core/Card';\nimport Chip from '@material-ui/core/Chip';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport CardMedia from '@material-ui/core/CardMedia';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardActionArea from '@material-ui/core/CardActionArea';\nimport Collapse from '@material-ui/core/Collapse';\nimport Avatar from '@material-ui/core/Avatar';\nimport IconButton from '@material-ui/core/IconButton';\nimport Typography from '@material-ui/core/Typography';\nimport { red } from '@material-ui/core/colors';\nimport Delete from '@material-ui/icons/Delete';\nimport ShareIcon from '@material-ui/icons/Share';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport ChevronRight from '@material-ui/icons/ChevronRight';\nimport IS from '../ImageService'\nimport {Link as RouterLink, useHistory} from 'react-router-dom'\nimport {buildShortName} from '../../Utils/uihelpers'\nimport RemoveAssociationDialog from './RemoveAssociationDialog'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n maxHeight:100,\n display: \"inline-block\",\n minWidth:320\n },\n actionarea:{\n display: 'flex',\n flexDirection:'row',\n justifyContent:'flex-start'\n },\n header:{\n fontSize:\"16px !important\"\n },\n media: {\n height: 100,\n width:120\n },\n expand: {\n transform: 'rotate(0deg)',\n marginLeft: 'auto',\n transition: theme.transitions.create('transform', {\n duration: theme.transitions.duration.shortest,\n }),\n },\n expandOpen: {\n transform: 'rotate(180deg)',\n },\n avatar: {\n backgroundColor: red[500],\n },\n}));\n\nexport default function AssociationCard({association, editMode=false, onRemove=null}) {\n const classes = useStyles();\n const [expanded, setExpanded] = useState(false);\n const [profileImage, setProfileImage] = useState(null);\n const history = useHistory();\n \n useEffect(() => {\n async function getProfile(){\n try{\n setProfileImage(await IS(association.member2.profileKey))\n } catch(e){\n console.log(e)\n }\n }\n \n \n getProfile()\n \n }, [association]);\n \n \n const handleExpandClick = () => {\n setExpanded(!expanded);\n };\n \n const handleDelete =()=>{\n \n }\n \n const handleClick = ()=>{\n if(!editMode)history.push(\"/member/\"+ association.member2.id);\n }\n const member = association.member2;\n if(!member) return null;\n return (\n \n \n \n \n
\n {buildShortName(member)}\n
\n
\n {association.type}\n
\n
\n \n {editMode && }\n
\n
\n );\n}\n","import React, {useEffect, useState} from 'react';\nimport {Paper, Grid, Typography} from '@material-ui/core'\nimport AssociationCard from '../Associations/AssociationCard'\nimport {has, filter, includes} from 'lodash';\n\n\nexport default function MemberAssociations(props){\n const [associations, setAssociations]= useState(null);\n \n useEffect(() => {\n if(has(props.member, \"associations\"))setAssociations(props.member.associations.items);\n }, [props.member.associations]);\n \n const parents = filter(associations, function(assoc) { return includes([\"FATHER\", \"MOTHER\", \"STEPMOTHER\", \"STEPFATHER\"], assoc.type); });\n const sibspou = filter(associations, function(assoc) { return includes([\"SIBLING\", \"SPOUSE\", \"EXSPOUSE\"], assoc.type); });\n const childs = filter(associations, function(assoc) { return includes([\"CHILD\", \"STEPCHILD\"], assoc.type); });\n \n console.log(\"MEMBER\", props.member)\n if(!associations) return null;\n return \n \n \n Parents\n \n {parents.map(assoc=>)}\n \n \n \n Siblings & Spouses\n \n {sibspou.map(assoc=>)}\n \n \n \n Children\n \n {childs.map(assoc=>)}\n \n \n \n}","import React, {useEffect, useState} from 'react';\nimport {Paper, Grid, Typography, Container} from '@material-ui/core'\nimport {has, filter, includes} from 'lodash';\nimport IS from '../ImageService'\n\nexport default function ImageCard(props){\n const [image, setImage]= useState(null);\n \n useEffect(() => {\n async function getImage(){\n if(has(props.media, \"assetKey\"))setImage(await IS(props.media.assetKey))\n }\n getImage();\n }, [props.media]);\n \n\n if(!props.media) return null;\n return \n \n \n \n \n}","import React, {useEffect, useState} from 'react';\nimport {Paper, Grid, Typography, Container} from '@material-ui/core'\nimport {has, filter, includes} from 'lodash';\nimport ReactAudioPlayer from 'react-audio-player';\nimport IS from '../ImageService'\n\nexport default function AudioCard(props){\n const [audio, setAudio]= useState(null);\n \n useEffect(() => {\n async function getAudio(){\n if(has(props.media, \"assetKey\"))setAudio(await IS(props.media.assetKey))\n }\n getAudio();\n }, [props.media]);\n \n\n if(!props.media) return null;\n return \n \n \n \n \n}","import React, {useEffect, useState} from 'react';\nimport {Paper, Grid, Typography, Container, GridList, GridListTile, Dialog} from '@material-ui/core'\nimport { makeStyles } from '@material-ui/core/styles';\n\nimport {has, filter, includes} from 'lodash';\nimport ImageCard from '../Media/ImageCard'\nimport AudioCard from '../Media/AudioCard'\nimport IS from '../ImageService'\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-around',\n overflow: 'hidden',\n backgroundColor: theme.palette.background.paper,\n },\n gridList: {\n width: '100%',\n height: 450,\n },\n}));\nexport default function Media(props){\n const [mediaFiles, setMediaFiles]= useState([]);\n const [viewerOpen, setViewerOpen]= useState(false);\n const [fileToView, setFileToView] = useState(null)\n const classes = useStyles();\n useEffect(() => {\n if(has(props.member, \"media\")){\n setMediaFiles(props.member.media.items)\n }\n }, [props.member.media]);\n \n const displayFile = (media)=>{\n console.log(media)\n if(includes(media.fileType, \"image\")) {\n \n return \n }\n if(includes(media.fileType, \"audio\")) {\n \n return \n }\n return null\n }\n const handleClose = () => {\n setViewerOpen(false)\n };\n \n return \n \n Media\n \n \n \n {mediaFiles.map(m=>\n {setFileToView(m); setViewerOpen(true);}}>\n {displayFile(m)}\n \n )}\n\n\n \n {fileToView && displayFile(fileToView)}\n \n \n \n \n \n \n}","import React from 'react'\n\n/* \n Each person will be associated with 1 or more families\n For each family association, this component will duplicate itself and display\n the relative information\n*/\n\nfunction Family(props){\n \n return
\n

Childhood Family

\n

His Father Henry Thiessen and mother Selena Derry were\n married 14 SEP 1875 at San Jose, Santa Clara, California, USA.

\n

His\n father is Henry Thiessen
\n

\n

His\n mother is Selena Derry
\n

\n

His\n sibling is Raymond Lee Thiessen born to mother and father

\n

He\n is George Wesley Thiessen born to mother and father

\n

His\n sibling is Anna M Thiessen born to mother and father

\n

His\n sibling is Minerva Derry Thiessen born to mother and father

\n
\n
\n}\n\nexport default Family;","export const getMember = /* GraphQL */ `\n query GetMember($id: ID!) {\n getMember(id: $id) {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n address\n abstract\n description\n birthdate\n media {\n items {\n id\n fileType\n assetKey\n createdAt\n updatedAt\n }\n nextToken\n }\n families {\n items {\n id\n name\n createdAt\n updatedAt\n }\n nextToken\n }\n associations {\n items {\n id\n type\n member2 {\n id\n name {\n prefix\n suffix\n firstname\n middlename\n lastname\n }\n profileKey\n phone\n email\n sex\n abstract\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;","/* This will be a dynamic person viewer. \n The person displayed is based on the id indicated in the url path\n The person data is passed on to the children compoents (headerblock, description, etc)\n this allows all information about each person to be dynamically displayed.\n*/\n\nimport React, {useEffect, useState} from 'react';\nimport {withRouter} from 'react-router';\nimport HeaderBlock from '../Components/Members/HeaderBlock';\nimport Description from '../Components/Members/Description';\nimport PersonSubNav from '../Components/Members/PersonSubNav';\nimport MemberAssociations from '../Components/Members/MemberAssociations';\nimport Media from '../Components/Members/Media';\nimport Family from '../Components/Family';\nimport {Link} from \"react-router-dom\";\nimport {find} from 'lodash';\nimport * as queries from '../graphql/savedQueries';\nimport { API } from 'aws-amplify';\nimport Backdrop from '@material-ui/core/Backdrop';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n color: '#fff',\n },\n}));\n\nfunction Person (props) {\n const [member, setMember] = useState({});\n const classes = useStyles();\n const [open, setOpen] = React.useState(false);\n useEffect(() => {\n setOpen(true)\n getMember();\n }, [props.match.params.id]);\n \n const getMember = async ()=> {\n const member = await API.graphql({ query: queries.getMember, variables: { id: props.match.params.id} });\n console.log(member); // result: { \"data\": { \"listTodos\": { \"items\": [/* ..... */] } } }\n setMember(member.data.getMember)\n setOpen(false)\n }\n \n if(member === {}) return null;\n \n return
\n \n \n \n \n \n \n \n \n
;\n \n \n}\n\n\n\nexport default withRouter(Person)","/* This will be a dynamic person viewer. \n The person displayed is based on the id indicated in the url path\n The person data is passed on to the children compoents (headerblock, description, etc)\n this allows all information about each person to be dynamically displayed.\n*/\nimport React, {useEffect, useState} from 'react';\nimport {withRouter} from 'react-router';\nimport {Link as RouterLink, useHistory} from \"react-router-dom\";\nimport {TextField, Grid, Paper, Card, Select, FormControl, InputLabel, MenuItem, Button, Chip } from '@material-ui/core'\nimport MomentUtils from '@date-io/moment';\nimport 'react-dropzone-uploader/dist/styles.css'\nimport Dropzone from 'react-dropzone-uploader'\nimport { v4 as uuidv4 } from 'uuid';\nimport moment from 'moment'\nimport {\n MuiPickersUtilsProvider,\n DatePicker,\n} from '@material-ui/pickers';\nimport {find} from 'lodash';\nimport {createMember} from '../graphql/mutations';\nimport { ChevronLeft, Publish } from '@material-ui/icons';\nimport { API, graphqlOperation, Storage, Auth } from 'aws-amplify';\nimport { useSnackbar } from 'notistack';\n\nfunction NewMember (props) {\n const [associations, setAssociations] = useState([])\n const [sex, setSex] = useState(\"MALE\")\n const [address, setAddress] = useState(\"\")\n const [prefix, setPrefix] = useState(\"\")\n const [suffix, setSuffix] = useState(\"\")\n const [firstName, setFirstName] = useState(\"\")\n const [middleName, setMiddleName] = useState(\"\")\n const [lastName, setLastName] = useState(\"\")\n const [email, setEmail] = useState(\"\")\n const [phone, setPhone] = useState(\"\")\n const [abstract, setAbstract] = useState(\"\")\n const [description, setDescription] = useState(\"\")\n const [selectedDate, setSelectedDate] = useState(new Date());\n const [profilePic, setProfilePic] = useState(null);\n const { enqueueSnackbar } = useSnackbar();\n const [working, setWorking] = useState(false)\n const history = useHistory();\n \n const handleChangeStatus = ({ meta, file }, status) => { \n setProfilePic(file);\n console.log(status, meta, file)\n }\n \n //User has submitted the form\n //Upload state to dynamoDB\n const handleFormSubmit = async() =>{\n setWorking(true)\n try {\n const user = await Auth.currentAuthenticatedUser()\n console.log(\"USER\", user)\n var memberObj = {\n id: uuidv4(),\n \n name: {\n prefix: prefix,\n suffix:suffix,\n firstname: firstName,\n middlename: middleName,\n lastname: lastName\n },\n phone: phone,\n email: email,\n sex: sex,\n address: address,\n abstract: abstract,\n description: description,\n birthdate: selectedDate\n }\n \n if(profilePic){\n var fileext = (/[.]/.exec(profilePic.name)) ? /[^.]+$/.exec(profilePic.name) : undefined;\n const pPic = await Storage.put(memberObj.id+'/profile.'+fileext[0].toLowerCase(), profilePic).catch(err => console.log(err));\n console.log(\"PIC UPLOAD\", pPic)\n \n memberObj.profileKey = pPic.key;\n }\n \n await API.graphql(graphqlOperation(createMember, {input: memberObj}))\n console.log(\"MEMBER CREATED\");\n //Display feedback\n enqueueSnackbar(`${memberObj.name.firstname} ${memberObj.name.lastname} as been CREATED!`, { variant: 'success' });\n setWorking(false)\n //Move user to editable interface with more options\n history.push(\"/edit/member/\"+ memberObj.id);\n \n }\n catch(e){\n console.log(\"FAILED\", e)\n enqueueSnackbar(`${memberObj.name.firstname} ${memberObj.name.lastname} creation failed...`, { variant: 'error' });\n setWorking(false)\n }\n }\n \n \n return
\n } />\n
\n \n \n
\n (extra.reject ? 'Image, audio and video files only' : 'Tap here or drag files here to upload profile picture')}\n accept=\"image/*\"\n />\n
\n \n \n \n setPrefix(e.target.value)}/>\n \n \n setFirstName(e.target.value)}/>\n \n \n setMiddleName(e.target.value)}/>\n \n \n setLastName(e.target.value)}/>\n \n \n setSuffix(e.target.value)}/>\n \n \n setEmail(e.target.value)}/>\n \n \n setPhone(e.target.value)}/>\n \n \n \n Sex\n setSex(e.target.value)}\n >\n Male\n Female\n Other\n \n \n \n \n \n setSelectedDate(date)}\n fullWidth\n />\n \n \n \n \n setAddress(e.target.value)}/>\n \n \n \n setAbstract(e.target.value)}/>\n \n \n \n
\n \n \n setDescription(e.target.value)}/>\n \n \n
\n \n
\n
\n
;\n \n \n}\n\n\n\nexport default withRouter(NewMember)","import React from 'react';\nimport {\n Button, \n TextField, \n Dialog, \n DialogActions, \n DialogContent, \n DialogContentText, \n DialogTitle,\n FormControl,\n InputLabel,\n Select,\n MenuItem\n \n} from '@material-ui/core';\nimport AssocAutoComplete from './AssocAutoComplete'\nimport {createAssociation} from '../../graphql/mutations';\nimport { API, graphqlOperation, Storage, Auth } from 'aws-amplify';\nimport { v4 as uuidv4 } from 'uuid';\nimport { useSnackbar } from 'notistack';\n\n\nexport default function AssociationDialog({member, onAdd}) {\n const [open, setOpen] = React.useState(false);\n const [assocType, setAssocType] = React.useState(\"\");\n const [assocMember, setAssocMember] = React.useState(null);\nconst { enqueueSnackbar } = useSnackbar();\n const handleClickOpen = () => {\n setOpen(true);\n };\n\n const handleClose = () => {\n setOpen(false);\n };\n const handleSaveAndClose = async() => {\n //Create Association\n try {\n var assocObj = {\n id: uuidv4(),\n \ttype: assocType,\n \tmemberAssociationsId: member.id,\n \tassociationMember1Id: member.id,\n \tassociationMember2Id: assocMember.id,\n }\n \n await API.graphql(graphqlOperation(createAssociation, {input: assocObj}))\n enqueueSnackbar(`Association ADDED!`, { variant: 'success' });\n setOpen(false);\n \n onAdd()\n } catch(e){\n console.log(e.message)\n enqueueSnackbar(`Association could not be added!`, { variant: 'error' });\n }\n };\n return (\n
\n \n \n New Association\n \n \n To add a new association to {member.name.firstname}:
\n Search for the family member by name.
\n Designate the type of assiociation.\n
\n setAssocMember(m)} />\n
\n \n Association Type\n setAssocType(e.target.value)}\n label=\"Age\"\n >\n \n None\n \n Father\n Mother\n Step Father\n Step Mother\n Sibling\n Spouse\n Ex-Spouse\n Child\n \n \n
\n \n \n \n \n
\n
\n );\n}\n","/* This will be a dynamic person viewer. \n The person displayed is based on the id indicated in the url path\n The person data is passed on to the children compoents (headerblock, description, etc)\n this allows all information about each person to be dynamically displayed.\n*/\nimport React, {useEffect, useState} from 'react';\nimport {withRouter} from 'react-router';\nimport {Link as RouterLink} from \"react-router-dom\";\nimport {TextField, Grid, Paper, Card, Select, FormControl, InputLabel, MenuItem, Button, Typography, Chip, Backdrop, CircularProgress } from '@material-ui/core'\nimport MomentUtils from '@date-io/moment';\nimport 'react-dropzone-uploader/dist/styles.css'\nimport Dropzone from 'react-dropzone-uploader'\nimport { v4 as uuidv4 } from 'uuid';\nimport moment from 'moment'\nimport {\n MuiPickersUtilsProvider,\n DatePicker,\n} from '@material-ui/pickers';\nimport {find} from 'lodash';\nimport IS from '../Components/ImageService';\nimport {updateMember, createMedia} from '../graphql/mutations';\nimport * as queries from '../graphql/savedQueries';\nimport { API, graphqlOperation, Storage, Auth } from 'aws-amplify';\nimport { ChevronLeft, Publish } from '@material-ui/icons';\nimport AssociationCard from '../Components/Associations/AssociationCard'\nimport AssociationDialog from '../Components/Associations/AssociationDialog'\nimport { useSnackbar } from 'notistack';\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n color: '#fff',\n },\n}));\n\n\nfunction UpdateMember (props) {\n const classes = useStyles();\n const [working, setWorking] = useState(false);\n const [id, setId] = useState(\"\")\n const [associations, setAssociations] = useState([])\n const [sex, setSex] = useState(\"\")\n const [address, setAddress] = useState(\"\")\n const [prefix, setPrefix] = useState(\"\")\n const [suffix, setSuffix] = useState(\"\")\n const [firstName, setFirstName] = useState(\"\")\n const [middleName, setMiddleName] = useState(\"\")\n const [lastName, setLastName] = useState(\"\")\n const [email, setEmail] = useState(\"\")\n const [phone, setPhone] = useState(\"\")\n const [abstract, setAbstract] = useState(\"\")\n const [description, setDescription] = useState(\"\")\n const [selectedDate, setSelectedDate] = useState(new Date());\n const [profilePic, setProfilePic] = useState(null);\n const [picHasChanged, setPicHasChanged] = useState(false);\n const [member, setMember] = useState(null)\n const [mediaFiles, setMediaFiles] = useState([])\n const { enqueueSnackbar } = useSnackbar();\n \n const handleChangeStatus = ({ meta, file }, status) => { \n setProfilePic(file);\n setPicHasChanged(true)\n console.log(status, meta, file)\n }\n \n useEffect(() => {\n setWorking(true)\n getMember();\n \n }, [props.match.params.id]);\n \n const getMember = async ()=> {\n const memberdata = await API.graphql({ query: queries.getMember, variables: { id: props.match.params.id} });\n const md = memberdata.data.getMember\n console.log(\"MEMBER DATA\", md)\n setId(md.id)\n setSex(md.sex);\n setAddress(md.address);\n setFirstName(md.name.firstname);\n setMiddleName(md.name.middlename);\n setLastName(md.name.lastname);\n setPrefix(md.name.prefix);\n setSuffix(md.name.suffix);\n setEmail(md.email);\n setPhone(md.phone);\n setAbstract(md.abstract);\n setDescription(md.description);\n setSelectedDate(md.birthdate);\n setProfilePic(await IS(md.profileKey, md.sex))\n setAssociations(md.associations.items)\n setMember(md)\n setWorking(false)\n }\n \n //User has submitted the form\n //Upload state to dynamoDB\n const handleFormSubmit = async() =>{\n try {\n setWorking(true)\n const user = await Auth.currentAuthenticatedUser()\n console.log(\"USER\", user)\n var memberObj = {\n id: id,\n \n name: {\n prefix: prefix,\n suffix:suffix,\n firstname: firstName,\n middlename: middleName,\n lastname: lastName\n },\n phone: phone,\n email: email,\n sex: sex,\n address: address,\n abstract: abstract,\n description: description,\n birthdate: selectedDate\n }\n \n if(picHasChanged){\n var fileext = (/[.]/.exec(profilePic.name)) ? /[^.]+$/.exec(profilePic.name) : undefined;\n console.log(\"FileExt\", fileext)\n const pPic = await Storage.put(id+'/profile.'+fileext[0].toLowerCase(), profilePic).catch(err => console.log(err));\n console.log(\"PIC UPLOAD\", pPic)\n memberObj.profileKey = pPic.key;\n }\n \n await API.graphql(graphqlOperation(updateMember, {input: memberObj}))\n console.log(\"MEMBER UPDATED\");\n enqueueSnackbar(`${memberObj.name.firstname} ${memberObj.name.lastname} as been UPDATED!`, { variant: 'success' });\n setWorking(false)\n }\n catch(e){\n console.log(\"FAILED\", e.message)\n enqueueSnackbar(`${memberObj.name.firstname} ${memberObj.name.lastname} update failed...`, { variant: 'error' });\n setWorking(false)\n }\n }\n \n const handleMediaChangeStatus = ({ meta, file }, status) => { \n if(status === \"done\"){\n setMediaFiles([...mediaFiles, file])\n console.log(status, meta, file) \n }\n \n }\n \n const uploadMediaFiles = async()=>{\n mediaFiles.reduce((p, file) => {\n return p.then(() => uploadMedia(file));\n }, Promise.resolve()); // initial\n \n }\n \n const uploadMedia = async(file)=>{\n //Upload to S3\n var fileext = (/[.]/.exec(file.name)) ? /[^.]+$/.exec(file.name) : undefined;\n console.log(\"FileExt\", fileext)\n const mUp = await Storage.put(id+'/media/'+file.name.toLowerCase(), file).catch(err => console.log(err));\n console.log(\"Media UPLOAD\", mUp)\n \n //Create Reference in Database\n var mediaId = uuidv4()\n var mediaObj = {\n id:mediaId,\n assetKey:mUp.key,\n fileType: file.type,\n memberMediaId:id,\n mediaMemberId:id\n }\n await API.graphql(graphqlOperation(createMedia, {input: mediaObj}))\n }\n \n const getProfilePic=()=>{\n if(profilePic){\n return \"https://futurefamilymedia205301-dev.s3.us-east-2.amazonaws.com/public/\"+id+\"/\"+profilePic\n }\n return \"https://futurefamilymedia205301-dev.s3.us-east-2.amazonaws.com/siteassets/generic-profile-icon-8.jpg\"\n }\n \n \n return
\n } />\n
\n \n \n
\n (extra.reject ? 'Image, audio and video files only' : 'Tap here or drag file here to upload profile picture')}\n accept=\"image/*\"\n />\n
\n \n \n \n setPrefix(e.target.value)}/>\n \n \n setFirstName(e.target.value)}/>\n \n \n setMiddleName(e.target.value)}/>\n \n \n setLastName(e.target.value)}/>\n \n \n setSuffix(e.target.value)}/>\n \n \n setEmail(e.target.value)}/>\n \n \n setPhone(e.target.value)}/>\n \n \n \n Sex\n setSex(e.target.value)}\n >\n Male\n Female\n Other\n \n \n \n \n \n setSelectedDate(date)}\n fullWidth\n />\n \n \n \n \n setAddress(e.target.value)}/>\n \n \n \n setAbstract(e.target.value)}/>\n \n \n \n \n \n
\n \n \n setDescription(e.target.value)}/>\n \n \n
\n \n \n
\n
\n \n \n \n {member && }\n \n Associations\n \n {associations.map(assoc=>\n \n )}\n \n \n \n \n Media\n \n (extra.reject ? 'Image, audio and video files only' : 'Tap here or drag files here to add media')}\n accept=\"image/*,video/*,audio/*\"\n />\n {mediaFiles.length > 0 && \n \n }\n \n \n \n \n
;\n \n \n}\n\n\n\nexport default withRouter(UpdateMember)","/* \n Help File\n*/\n\nimport React, {useEffect, useState} from 'react';\nimport {withRouter} from 'react-router';\nimport {Link} from 'react-router-dom';\nimport {Container, Paper, Chip} from '@material-ui/core'\nimport {ChevronLeft} from '@material-ui/icons'\n\nfunction Help (props) {\n return \n } />\n \n

Using the kin info website. WORK IN PROGRESS

\n

Trying to keep up to date with a enlarging family\n is an arduous task for any single person and is usually out of date. \n This globally accessible web site will allow family members to update\n their own information and make it immediately available to the rest of\n the family.  Furthermore it will carry more information regarding\n the individuals and their relationship to the family.

\n\n
\n\n

Login and security.  to Top

\n

KinInfo.net is a secure site. Information traveling\n between the site and your local browser is encrypted.  The site is\n hosted by Amazon and owned by John Domogalla. It is basically a list of\n family members. Many members have the ability to log in and view the site\n as well as invite others. They are called users.  Not all members are\n users.  Some are dead, some are children.

\n

I wanted a distributed management system so that I\n don't need to be involved in expanding the user base.  Existing\n users can create a new member and may invite that member to be a user. \n The existing user has the responsibility to evaluate a newly invited\n user's ability to behave responsibly and respectfully when invited to\n join.  While logged on any user will be able to edit any member\n page. This allows users to edit children's pages and histories of\n deceased member's pages.

\n

The site operates on mobile devices as well as\n desktops. It uses a browser like Chrome, Firefox or Safari.  There\n is a login prompt that expects the user identification to be the users\n email address combined with a password known only to the user.  Once\n logged in from a particular browser on a particular device that browser\n will remember the authorization, bypass the login process and go\n directly to the main page. The Chrome browser on an Android phone can\n make a widget on the phone so with just one touch you can open the site\n to get quick contact information. To set that up expand the Chrome setting\n menu and select the \"Add to home screen\" after logging in.

\n

The site uses Multi-Factor-Authentication (MFA)\n same as banks and other secure sites. The one time only process starts\n with email receipt of an invitation from an existing user. It will show\n up addressed like ...

\n \n

From: invite@kininfo.net
\n Subject: A family member invited you to contribute to KinInfo.net

\n

Go to KinInfo.net  You may sign in as YOUR_email_address@someservice using this temporary password\n [########] (8char long)

\n
\n

The process is easier with a real keyboard. \n On the first page you put in your email and the password sent in the\n invitation. This causes the site to send a random code to the email you\n used and the page changes awaiting you to input the code and a \n password that you made up and remembered to save.  When that is done the site takes\n you to the login page where you log in as normal using your email\n address and your personal password.  If you forget your password\n you will need to go through the MFA process again.

\n

The invite will expire in 30 days.

\n
\n\n

The Home Index is the main entry page.  to Top

\n

\n

The home page is an index of all of the family\n members electronic contact information. Clicking on an individual's listing will take you\n to that member's page. There is a search bar at\n the top since this list will inevitably get quite long as time goes\n on.  Any sequence of characters typed in, will filter the list by\n finding, without case sensitivity, the names in the list containing\n those characters.

\n

At the top left is a blue button ( + New Kin )\n .  Pressing that will open a template member page to describe some\n NEW  individual you wish to add to the family.  You should\n fill in at least first and last name, as well as choose the\n sex.  An email address must be added if you intend to invite the member as a\n user. When your satisfied with the page for the new member be sure to\n click on the \"CREATE NEW MEMBER\" button at the bottom right.

\n

For now, don't go on to add associations or upload\n other content.  Seems to be bugs if to much is added when\n initializing the new member page. Instead return to the index. Then\n re-enter the just created member, then Edit the member.

\n
\n\n

The Member page  to Top

\n

Clicking on an individuals listing on the home or\n index page will bring up a new page unique to that individual.  At\n the top of the page are three buttons ( < Back )  ( Invite\n )  ( Edit )   

\n

( < Back ) takes you back to the index.  (\n Invite )  sends an email invitation to the member to become a user\n of  KinInfo.net.   The email invitation will be sent to the\n email address displayed on the member page.  Make sure it is\n correct. Go to the Login and Security section of this document for more\n information.  ( Edit ) Allows you to change and add information to\n the members page. See the next section below.

\n

   At the top of the display is basic\n contact information, a picture, and a brief abstract regarding the\n individual such as daily routine, notes regarding when to contact the\n member in any intrusive way, subjects to be avoided :) etc.  \n On a deceased persons page define where they are buried with as much\n location detail as known, Or who has the ashes, or where is the mausoleum.  

\n

The section below labeled Description is a text\n area for longer expositions. Generally stuff like grew up in someplace,\n got a degree, served in the military during...  Married and\n Divorced some person not a member.   If there's any genetics\n important to siblings. Or you can discuss what your interests are,\n what you've been doing, buying or planning currently.   Why\n did you move too.....

\n

Midway down the member page is a section with three\n columns. Immediate family relationships are defined and clicking on the\n associations will take you directly to the member pages.  By\n choosing “Parents” the user will be jumpin “up” the family tree. By\n choosing “Siblings & Spouses” they will move horizontally on a\n family’s branch. By choosing “Children” they’ll be exploring down. \n At the moment there is no family tree graphic map.

\n

At the bottom of the page is area to post\n multimedia such as a picture of the member executing their\n favorite sport. ( JPG )  By talking into a digital\n recorder or a similar app on a cell phone and creating a mp3 file, then\n uploading it to this section family members will have the sound of the\n members voice in perpetuity by simply clicking on the player.

\n
\n

The Member Edit Page  to Top

\n

This mode is entered by pressing the  (Edit )\n button on the member's display page. After making changes you will click\n the UPDATE member button before clicking on the ( < Back ) button to\n exit the edit mode.

\n

ANYONE logged in can edit any members page. This\n allows users with information and time; to contribute to those who are\n not users or are busy.  I don't want to write a huge policy document on how to\n be civil in a public arena.  If you wish to trash a living member\n for personal affronts, please consider the rest of the family's need to know. I\n suggest using private email.  If you believe your anonymous and\n destructive; your not anonymous.

\n

Much of the edit page looks like a form fill-out.\n Just click on the cells of the form and enter what you wish.  There\n are embedded instructions on the edit page.  After you drag a\n picture or audio file into the media section you must click the \"upload\n media\" button  and wait a bit before clicking the update member\n button.

\n

An association is a link between two members. You\n will have to add the members to the data base first before using ADD NEW\n ASSOCIATION .   This is done on the home-index page by clicking the\n ( + New Kin ) button at the top left. \n With both members in the database you can go to the edit mode on both\n members and select ADD NEW ASSOCIATION.  You will then select the\n related member by selecting the member and association type from drop\n down menu’s and filter function.

\n

Nothing is automatically saved.  After you've\n modified Abstract or Description or Media, click update member before\n leaving the edit mode.

\n
\n

Why KinInfo.net?  to Top

\n

Until about 2015 Dot(Dorthy) Dodds would put out a \n contact list called \"Green Family\" annually. But she, getting older, stopped updating the document.\n I had been converting ancestry information that my wife, Jeannette,\n had collected, into a system of linked web pages trying to avoid the proprietary tools Jeannette used. \n I thought a replacement for Dot's document would be a interactive website\n which would provide a single location to record individual's contact \n information and relationships, but also add a storyline to their lives \n beyond the fact that they had a name, lived and died.\n

\n

Instead of having many copies of out-of-date\n information copied to computers and paper all over the country I wanted a central\n location where the information could be uniquely stored while being\n widely distributed. I did not want to act as the central administrator taking\n updates from many people and loading them on to the database, which is\n the equivalent of Dot's hard work. Her document was also trying to demonstrate\n ancestry by using indented formatting. The letter was\n becoming very complex and confusing as the family extended. kininfo is intended as a replacement.

\n

At first I created a very simple structure of linked HTML\n pages but I had trouble solving the multi-user editing of HTML pages\n and became frustrated trying to \"publish\" the website using google's\n free services. So I called my son Dero who is an expert on such things.\n Dero grabbed the concept and took off with it. We owe him significantly and\n the accolades could go on for quite awhile.

\n

The site has pages that can carry much\n more information than just contact and relationship information for an\n individual . An individual's page contains hyperlinks to family members.\n By clicking on the links you can \"jump\" to Father, Mother, Sibling's,\n Spouses and so on. People are more than just an email address. They have\n a storyline and a face and maybe some pictures demonstrating their\n favorite sport. They might be able to advise or help if you only knew\n what they knew and how to contact them. I did not intend this site to\n replicate Facebook. I did intend it to be like an ancestry site but one\n that deals with the present and future as well as the past. In the\n future it is inevitable that we will all be in the past, and the records\n of us would be best constructed in the present by ourselves.

\n

As a user of kininfo when something changes you\n simply log on and change it. You don't need to call me or anyone else.\n Neither Dot or Donna or Dero or anyone need be the \"manager\". As soon as\n you change it everyone in the greater family can instantly see the\n updated information. The information can be viewed from any internet\n capable device that has a standard browser. ( cell phone, pad, desktop,\n etc... )

\n

The site will expand automatically as the family\n members expand it. We will not run out of space.

\n
\n\n
;\n \n}\n\nexport default withRouter(Help)","import React from \"react\";\nimport { Route, withRouter } from \"react-router-dom\";\nimport { AnimatedSwitch } from \"./Utils/AnimatedSwitch\";\nimport Home from './Pages/Home'\nimport Member from './Pages/Member'\nimport NewMember from './Pages/NewMember'\nimport UpdateMember from './Pages/UpdateMember'\nimport Help from './Pages/Help'\n/**\n * The \".page\" class is key to animating a full page and not receive bumps while\n * animating pages in/out. It is position: fixed to allow the animation to play\n * without the DOM elements messing up.\n *\n * Try to remove .page to see the effect.\n */\n\n\n\nconst routes = [\n {\n component: Home,\n path: \"/\"\n },\n {\n component: Help,\n path: \"/help\"\n },\n {\n component: NewMember,\n path: \"/new/member\"\n }\n ,\n {\n component: UpdateMember,\n path: \"/edit/member/:id\"\n }\n ,\n {\n component: Member,\n path: \"/member/:id\"\n }\n];\n\n\n \n \n\nconst Routes = withRouter(({ location }) => {\n return (\n \n {routes.map(route => {\n return (\n \n );\n })}\n \n );\n});\n\nexport default Routes;","/*\n Entrypoint to the application\n \n This is where we will display application wide information. \n i.e. Application header, app navigation and anything else that will be displayed on all pages of the app.\n \n The router controls the pages that are displayed relative to the url path\n \n This is where the authentication controller will be inserted\n*/\n\nimport React from 'react';\n\nimport Navigation from './Components/Navigation'\nimport { AmplifyAuthenticator, AmplifySignOut, AmplifySignUp, AmplifySignIn } from '@aws-amplify/ui-react';\nimport { AuthState, onAuthUIStateChange } from '@aws-amplify/ui-components';\nimport { SnackbarProvider } from 'notistack';\nimport {\n BrowserRouter as Router,\n Switch,\n Route\n} from \"react-router-dom\";\nimport ScrollToTop from './Utils/ScrollToTop'\nimport Routes from './Routes';\nimport './App.css';\n\n\nfunction App() {\n const [authState, setAuthState] = React.useState();\n const [title, setTitle] = React.useState(\"KinInfo\")\n const [user, setUser] = React.useState();\n\n React.useEffect(() => {\n return onAuthUIStateChange((nextAuthState, authData) => {\n setAuthState(nextAuthState);\n setUser(authData)\n });\n }, []);\n return authState === AuthState.SignedIn && user ? (\n \n
\n \n \n \n \n
\n \n
\n
\n
\n
\n
\n ) : (\n \n \n \n \n \n );\n}\n\nexport default App;\n\n/*\n\n */","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","/* eslint-disable */\n// WARNING: DO NOT EDIT. This file is automatically generated by AWS Amplify. It will be overwritten.\n\nconst awsmobile = {\n \"aws_project_region\": \"us-east-2\",\n \"aws_cognito_identity_pool_id\": \"us-east-2:bbd6602d-8a14-4d58-81d8-45c03ff22ac6\",\n \"aws_cognito_region\": \"us-east-2\",\n \"aws_user_pools_id\": \"us-east-2_OTnlq9kO4\",\n \"aws_user_pools_web_client_id\": \"p8s1mvqonvk9k85cblln5q4ee\",\n \"oauth\": {},\n \"aws_appsync_graphqlEndpoint\": \"https://hpqgqp4h5bh2hk3ptknuymc77i.appsync-api.us-east-2.amazonaws.com/graphql\",\n \"aws_appsync_region\": \"us-east-2\",\n \"aws_appsync_authenticationType\": \"API_KEY\",\n \"aws_appsync_apiKey\": \"da2-h3n2xrqsojd3zl65pdarcubowm\",\n \"aws_user_files_s3_bucket\": \"futurefamilymedia205301-dev\",\n \"aws_user_files_s3_bucket_region\": \"us-east-2\"\n};\n\n\nexport default awsmobile;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\nimport Amplify, { Auth } from 'aws-amplify';\nimport awsconfig from './aws-exports';\nAmplify.configure(awsconfig);\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}