{"version":3,"sources":["graphql/client.ts","config/index.ts","graphql/query/get_images.ts","graphql/mutation/delete_photo.ts","components/button.tsx","components/header.tsx","components/gallery.tsx","App.tsx","serviceWorker.ts","index.tsx"],"names":["cache","InMemoryCache","authMiddleware","ApolloLink","operation","forward","wsLink","WebSocketLink","uri","options","reconnect","connectionParams","headers","httpLink","HttpLink","link","split","query","getMainDefinition","kind","logErrors","onError","graphQLErrors","networkError","map","message","locations","path","console","log","client","ApolloClient","from","resolvers","initialState","alerts","writeData","data","onResetStore","Promise","resolve","reject","GET_IMAGES","gql","DELETE_PHOTO","Button","styled","button","StyledHeader","div","Header","title","allowUserUpload","code","refetch","useState","state","setState","undefined","user","setUser","userRequestDone","setUserRequestDone","useEffect","jQuery","document","ready","ajax","type","url","window","location","hostname","dataType","xhrFields","withCredentials","success","id","error","err","uploadOptions","server","scrubFilename","filename","Fragment","onFinish","setTimeout","gallery","onDrop","onProgress","s3Url","upload","style","height","onClick","e","preventDefault","replace","pathname","Row","Col","Gallery","isAdmin","useQuery","variables","loading","useMutation","deletePhoto","image","length","imagesPerColumn","chunk","Math","round","maxWidth","margin","columnArray","index","border","display","justifyContent","alignItems","user_id","maxHeight","refetchQueries","key","src","App","Boolean","match","ReactDOM","render","getElementById","navigator","serviceWorker","then","registration","unregister"],"mappings":"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","file":"static/js/main.cd27eb51.chunk.js","sourcesContent":["import { InMemoryCache } from \"apollo-cache-inmemory\";\r\nimport { ApolloClient } from \"apollo-client\";\r\nimport { ApolloLink, split } from \"apollo-link\";\r\nimport { HttpLink } from \"apollo-link-http\";\r\nimport { WebSocketLink } from \"apollo-link-ws\";\r\nimport { getMainDefinition } from \"apollo-utilities\";\r\nimport { onError } from \"apollo-link-error\";\r\nimport { graphqlUrl, subscriptionUrl } from \"../config\";\r\n\r\n// Instance of a cache\r\nconst cache = new InMemoryCache();\r\n\r\n// do token auth later\r\nconst token = undefined;\r\n\r\n// pass authentication header when exists\r\nconst authMiddleware = new ApolloLink((operation, forward: any) => {\r\n if (token) {\r\n operation.setContext({\r\n headers: {\r\n authorization: `Bearer ${token}`\r\n }\r\n });\r\n }\r\n return forward(operation);\r\n});\r\n\r\n// Set up subscription\r\nconst wsLink = new WebSocketLink({\r\n uri: subscriptionUrl,\r\n options: {\r\n reconnect: true,\r\n connectionParams: () => {\r\n if (token) {\r\n return {\r\n headers: {\r\n authorization: `Bearer ${token}`\r\n }\r\n };\r\n }\r\n return {\r\n headers: {}\r\n };\r\n }\r\n }\r\n});\r\n\r\n// Set up http link\r\nconst httpLink = new HttpLink({\r\n uri: graphqlUrl\r\n});\r\n\r\ninterface Definintion {\r\n kind: string;\r\n operation?: string;\r\n}\r\n\r\n// using the ability to split links, you can send data to each link\r\n// depending on what kind of operation is being sent\r\nconst link = split(\r\n // split based on operation type\r\n ({ query }) => {\r\n const { kind, operation }: Definintion = getMainDefinition(query);\r\n return kind === \"OperationDefinition\" && operation === \"subscription\";\r\n },\r\n wsLink,\r\n httpLink\r\n);\r\n\r\n// log errors to the console\r\nconst logErrors = onError(({ graphQLErrors, networkError }) => {\r\n if (graphQLErrors) {\r\n graphQLErrors.map(({ message, locations, path }) =>\r\n console.log(\r\n `[GraphQL error]: Message: ${message}, Location: ${locations}, Path: ${path}`\r\n )\r\n );\r\n }\r\n\r\n if (networkError) {\r\n console.log(`[Network error]: ${networkError}`);\r\n }\r\n});\r\n\r\n// Apollo\r\nconst client = new ApolloClient({\r\n link: ApolloLink.from([logErrors, authMiddleware, link]),\r\n cache,\r\n resolvers: {\r\n // Mutation: {\r\n // ...alertResolver\r\n // }\r\n }\r\n});\r\n\r\nconst initialState = {\r\n alerts: []\r\n};\r\n\r\ncache.writeData({\r\n data: initialState\r\n});\r\n\r\nclient.onResetStore(() => {\r\n return new Promise((resolve, reject) => {\r\n cache.writeData({ data: initialState });\r\n resolve();\r\n });\r\n});\r\n\r\nexport default client;\r\n","export const graphqlUrl = \"https://cdhagallery.leoalves.net/v1/graphql\";\r\nexport const subscriptionUrl = \"wss://cdhagallery.leoalves.net/v1/graphql\";\r\n","import gql from \"graphql-tag\";\r\n\r\nexport const GET_IMAGES = gql`\r\n query get_images($gallery: String!) {\r\n image(\r\n where: {\r\n _and: [{ gallery_code: { _eq: $gallery } }, { deleted: { _eq: false } }]\r\n }\r\n order_by: { created_at: desc }\r\n ) {\r\n id\r\n user_id\r\n filename\r\n likeCount\r\n commentCount\r\n likes {\r\n user_id\r\n }\r\n comments {\r\n user_id\r\n comment\r\n }\r\n }\r\n }\r\n`;\r\n","import gql from \"graphql-tag\";\r\n\r\nexport const DELETE_PHOTO = gql`\r\n mutation delete_photo($id: uuid!) {\r\n update_image(_set: { deleted: true }, where: { id: { _eq: $id } }) {\r\n affected_rows\r\n }\r\n }\r\n`;\r\n","import React from \"react\";\r\nimport styled from \"styled-components\";\r\n\r\nconst Button = styled.button`\r\n padding: 10px;\r\n background-color: #7294d3;\r\n border: none;\r\n color: white;\r\n border-radius: 5px;\r\n min-width: 130px;\r\n margin: 0 15px;\r\n cursor: pointer;\r\n`;\r\n\r\nexport default Button;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport styled from \"styled-components\";\r\nimport Button from \"./button\";\r\nimport * as DropzoneS3Uploader from \"react-dropzone-s3-uploader\";\r\n\r\ndeclare var jQuery: any;\r\n\r\ntype HeaderProps = {\r\n title: string;\r\n allowUserUpload: boolean;\r\n code: string;\r\n refetch: any;\r\n};\r\n\r\nconst StyledHeader = styled.div`\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n`;\r\n\r\nconst Header = ({ title, allowUserUpload, code, refetch }: HeaderProps) => {\r\n const [state, setState] = useState(\"initial\");\r\n const [user, setUser]: [any, any] = useState(undefined);\r\n const [userRequestDone, setUserRequestDone] = useState(false);\r\n useEffect(() => {\r\n if (process.env.NODE_ENV === \"production\") {\r\n jQuery(document).ready(function() {\r\n jQuery.ajax({\r\n type: \"post\",\r\n url:\r\n \"//\" +\r\n window.location.hostname +\r\n \"/CDHACommon/UpdatePersonalInfo.ashx\",\r\n dataType: \"json\",\r\n xhrFields: {\r\n withCredentials: true\r\n },\r\n success: (data: any) => {\r\n setUserRequestDone(true);\r\n if (data && data.data && data.data.id) {\r\n setUser(data.data);\r\n } else {\r\n setUser(undefined);\r\n }\r\n },\r\n error: (err: any) => {\r\n setUserRequestDone(true);\r\n }\r\n });\r\n });\r\n } else {\r\n setUser({\r\n id: 36798\r\n });\r\n }\r\n }, []);\r\n const uploadOptions = {\r\n server: \"https://a1bqn55c8e.execute-api.us-east-1.amazonaws.com/latest\",\r\n scrubFilename: (filename: string) =>\r\n user && user.id ? `${code}_${user.id}_${filename}` : `${code}_${filename}`\r\n };\r\n const s3Url = \"https://pypogallery.s3.amazonaws.com\";\r\n\r\n const handleFinish = () => {\r\n window.setTimeout(() => {\r\n setState(\"initial\");\r\n refetch({\r\n gallery: code\r\n });\r\n }, 15000);\r\n };\r\n\r\n const handleOnDrop = () => {\r\n console.log(\"drop\");\r\n };\r\n\r\n const handleError = () => {\r\n console.log(\"error\");\r\n setState(\"error\");\r\n };\r\n\r\n const handleProgress = () => {\r\n setState(\"loading\");\r\n };\r\n\r\n return (\r\n \r\n

{title}

\r\n {userRequestDone ? (\r\n \r\n {user && user.id && allowUserUpload && (\r\n \r\n {state === \"loading\" ? (\r\n

Uploading ...

\r\n ) : state === \"error\" ? (\r\n

Error uploading. Please refresh the page and try again.

\r\n ) : (\r\n {\r\n e.preventDefault();\r\n }}\r\n >\r\n Upload Image\r\n \r\n )}\r\n \r\n )}\r\n {!user && (\r\n {\r\n e.preventDefault();\r\n window.location.replace(\r\n `https://www.cdha.ca/CDHA/Sign_In.aspx?returnUrl=${window.location.pathname.replace(\r\n \"?\",\r\n \"\"\r\n )}`\r\n );\r\n }}\r\n >\r\n Upload Image\r\n \r\n )}\r\n
\r\n ) : (\r\n

Loading ...

\r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default Header;\r\n","import React from \"react\";\r\nimport { useQuery, useMutation } from \"@apollo/react-hooks\";\r\nimport { GET_IMAGES } from \"../graphql/query/get_images\";\r\nimport { DELETE_PHOTO } from \"../graphql/mutation/delete_photo\";\r\nimport { chunk } from \"lodash-es\";\r\nimport Header from \"./header\";\r\nimport styled from \"styled-components\";\r\n\r\ntype GalleryProps = {\r\n code: string;\r\n isAdmin: boolean;\r\n allowUserUpload: boolean;\r\n title: string;\r\n};\r\n\r\nconst Row = styled.div`\r\n display: flex;\r\n padding: 0 4px;\r\n`;\r\n\r\nconst Col = styled.div`\r\n flex: 33%;\r\n max-width: 33%;\r\n padding: 0 4px;\r\n img {\r\n margin-top: 8px;\r\n vertical-align: middle;\r\n width: 100%;\r\n }\r\n @media screen and (max-width: 800px) {\r\n flex: 50%;\r\n max-width: 50%;\r\n }\r\n @media screen and (max-width: 600px) {\r\n flex: 100%;\r\n max-width: 100%;\r\n }\r\n`;\r\n\r\nconst Gallery = ({ code, isAdmin, title, allowUserUpload }: GalleryProps) => {\r\n const { loading, error, data, refetch } = useQuery(GET_IMAGES, {\r\n variables: {\r\n gallery: code\r\n }\r\n });\r\n const [deletePhoto] = useMutation(DELETE_PHOTO);\r\n\r\n if (data && data.image && data.image.length > 0) {\r\n const imagesPerColumn = chunk(\r\n data.image,\r\n Math.round(\r\n data.image.length /\r\n (data.image.length > 2 ? 3 : data.image.length === 1 ? 1 : 2)\r\n )\r\n );\r\n return (\r\n
\r\n \r\n \r\n {imagesPerColumn.map((columnArray, index) => {\r\n return (\r\n \r\n {columnArray.map((image: any, index) => {\r\n if (isAdmin) {\r\n return (\r\n
\r\n \r\n

Uploaded by: {image.user_id}

\r\n {\r\n deletePhoto({\r\n variables: {\r\n id: image.id\r\n },\r\n refetchQueries: [\r\n {\r\n query: GET_IMAGES,\r\n variables: { gallery: code }\r\n }\r\n ]\r\n });\r\n }}\r\n >\r\n Delete photo\r\n \r\n
\r\n \r\n
\r\n );\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 if (loading) {\r\n return

Loading ...

;\r\n }\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default Gallery;\r\n","import React from \"react\";\nimport logo from \"./logo.svg\";\nimport client from \"./graphql/client\";\nimport { ApolloProvider } from \"@apollo/react-hooks\";\nimport Gallery from \"./components/gallery\";\n\nconst App: React.FC = () => {\n return (\n \n \n \n );\n};\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(\n (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\n window.location.href\n );\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(, document.getElementById('root'));\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}