{"version":3,"sources":["logo.svg","photo.jpg","badge.png","core/shallowEqualObject.ts","core/findLast.ts","core/data.tsx","state.tsx","App.tsx","track.ts","index.tsx"],"names":["hasOwn","Object","prototype","hasOwnProperty","is","x","y","shallowEqual","objectA","objectB","options","keysA","keys","keysB","length","isEqual","customEqual","i","key","call","findLast","arr","pred","LOADER_ID","CACHE","Map","MainStore","Store","photos","data","prevData","params","error","_id","_cancelSrc","loadPhotos","conf","loaderId","pathParams","path","openedAt","push","substring","parsePathParams","url","Error","a","id","cancelSrc","axios","CancelToken","source","axiosConfig","cacheTimeMillis","cache","get","now","Date","filter","c","createdAt","set","store","update","draft","state","d","prev","cancel","queryParams","forEach","p","replace","cancelToken","token","response","prepare","pagination","console","log","isCancel","loader","page_result","totalCount","total_count","s","App","PER_PAGE","useMediaQuery","useState","React","page","setPage","useEffect","toString","per_page","Wrap","src","require","default","alt","Head","style","maxWidth","href","target","rel","className","width","height","Main","map","photo","PhotoView","Pagination","perPage","styled","div","props","PhotoWrap","extra","selected","main_thumbnail","location","name","pages","Math","ceil","pgs","onClick","PaginationWrap","event","meta","tracking","game_instance","request","XMLHttpRequest","open","setRequestHeader","send","JSON","stringify","track","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.24295e2b.chunk.js","sourcesContent":["export default __webpack_public_path__ + \"static/media/logo.43042dfa.svg\";","export default __webpack_public_path__ + \"static/media/photo.62d8daa8.jpg\";","export default \"data:image/png;base64,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\"","// MIT © 2017 azu\nconst hasOwn = Object.prototype.hasOwnProperty;\n// Object.is ponyfill\nexport const is = (x: any, y: any): boolean => {\n if (x === y) {\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n /* eslint-disable no-self-compare */\n return x !== x && y !== y;\n }\n};\n/**\n * Return true, if `objectA` is shallow equal to `objectB`.\n * Pass Custom equality function to `customEqual`.\n * Default equality is `Object.is`\n *\n * Options:\n *\n * - `customEqual`: function should return true if the `a` value is equal to `b` value.\n * - `debug`: enable debug info to console log. This log will be disable in production build\n */\nexport const shallowEqual = (\n objectA: any,\n objectB: any,\n options?: {\n customEqual?: (a: T, b: T) => boolean;\n // debug options available in development build\n debug?: true;\n console?: Pick;\n }\n): boolean => {\n if (objectA === objectB) {\n return true;\n }\n if (typeof objectA !== 'object' || objectA === null) {\n if (process.env.NODE_ENV !== 'production' && options && options.debug) {\n const out = options.console || console;\n out.group(`shallow-equal-object`);\n out.log('objectA is not object.');\n out.log('objectA', objectA);\n out.log('objectB', objectB);\n out.groupEnd();\n }\n return false;\n }\n if (typeof objectB !== 'object' || objectB === null) {\n if (process.env.NODE_ENV !== 'production' && options && options.debug) {\n const out = options.console || console;\n out.group(`shallow-equal-object`);\n out.log('objectB is not object.');\n out.log('objectA', objectA);\n out.log('objectB', objectB);\n out.groupEnd();\n }\n return false;\n }\n\n const keysA = Object.keys(objectA);\n const keysB = Object.keys(objectB);\n\n if (keysA.length !== keysB.length) {\n if (process.env.NODE_ENV !== 'production' && options && options.debug) {\n const out = options.console || console;\n out.group(`shallow-equal-object`);\n out.log('object key length is not same');\n out.log('objectA', objectA);\n out.log('objectB', objectB);\n out.groupEnd();\n }\n return false;\n }\n\n const isEqual =\n options && typeof options.customEqual === 'function'\n ? options.customEqual\n : is;\n\n for (let i = 0; i < keysA.length; i++) {\n const key = keysA[i];\n if (!hasOwn.call(objectB, key) || !isEqual(objectA[key], objectB[key])) {\n if (process.env.NODE_ENV !== 'production' && options && options.debug) {\n const out = options.console || console;\n out.group(`shallow-equal-object`);\n out.log(`key:${key} is not equals between A and B.`);\n out.log(`objectA[${key}]:`, objectA[key]);\n out.log(`objectB[${key}]:`, objectB[key]);\n out.log('objectA', objectA);\n out.log('objectB', objectB);\n out.groupEnd();\n }\n return false;\n }\n }\n\n return true;\n};\n","export function findLast(arr: Array, pred: (e: T) => boolean): T | null {\n let i = arr.length - 1;\n for (; i >= 0; i--) {\n if (pred(arr[i])) return arr[i];\n }\n return null;\n}\n","import axios, { CancelTokenSource, AxiosRequestConfig } from 'axios';\nimport { Draft } from 'immer';\nimport { Store } from 'pullstate';\n\nimport { shallowEqual } from './shallowEqualObject';\nimport { findLast } from './findLast';\n\nlet LOADER_ID = 0;\n\ninterface Cache {\n createdAt: number;\n params: Params;\n data: any;\n}\n\nlet CACHE: Map = new Map();\n\ntype Params = { [key: string]: string };\n\n/* Return null if path is invalid, otherwise an array of all params */\nfunction parsePathParams(path: string): null | string[] {\n let openedAt: number | null = null;\n let params: string[] = [];\n for (let i = 0; i < path.length; i++) {\n if (path[i] === '{') {\n if (openedAt != null) return null;\n openedAt = i;\n } else if (path[i] === '}') {\n if (openedAt != null) {\n params.push(path.substring(openedAt + 1, i));\n } else {\n return null;\n }\n openedAt = null;\n }\n }\n if (openedAt != null) return null;\n return params;\n}\n\nexport interface Data {\n data: D | null;\n prevData: D | null;\n params: Params;\n error: null | {\n code: string;\n message: string;\n };\n pagination?: { totalCount: number };\n _id: number;\n _cancelSrc: null | CancelTokenSource;\n}\n\nexport function newData(): Data {\n return {\n data: null,\n prevData: null,\n params: {},\n error: null,\n _id: 0,\n _cancelSrc: null,\n };\n}\n\ninterface Loader {\n url: string;\n store: Store;\n prepare: (api_data: ApiD) => D;\n pagination?: (api_data: ApiD) => { totalCount: number };\n get: (s: S) => Data;\n set: (s: Draft, data: Data) => void;\n cacheTimeMillis?: number;\n axiosConfig?: Partial;\n}\n\ntype LoaderFn = (params: Params) => void;\n\nexport function loader(conf: Loader): LoaderFn {\n let loaderId = LOADER_ID;\n LOADER_ID++;\n\n let pathParams = parsePathParams(conf.url);\n if (pathParams == null)\n throw new Error('Invalid path params in URL ' + conf.url);\n\n return async (params: Params) => {\n // each request made with this loader will get a unique id\n // when the request finished, if the id differes it means another\n // request was fired in the meantime\n let id: number | null = null;\n let cancelSrc = axios.CancelToken.source();\n let axiosConfig = conf.axiosConfig || {};\n\n // check cache\n if (conf.cacheTimeMillis) {\n let cache = CACHE.get(loaderId) || [];\n let now = +new Date();\n cache = cache.filter(\n (c) => now - c.createdAt < (conf.cacheTimeMillis || 0)\n );\n CACHE.set(loaderId, cache);\n\n let c = findLast(cache, (c) => shallowEqual(c.params, params));\n\n if (c != null) {\n let data = c.data as D;\n conf.store.update((draft, state) => {\n let d = newData();\n let prev = conf.get(state);\n if (prev._cancelSrc) {\n prev._cancelSrc.cancel('new_request');\n }\n id = prev._id + 1;\n d.data = data;\n conf.set(draft, d);\n });\n return; // short-circuit\n }\n }\n\n // prepare state before starting a request\n conf.store.update((draft, state) => {\n let d = newData();\n let prev = conf.get(state);\n if (prev._cancelSrc) {\n prev._cancelSrc.cancel('new_request');\n }\n id = prev._id + 1;\n // If multiple requests are fired then prev.data will be null\n d.prevData = prev.data || prev.prevData;\n d.params = params;\n d._id = id;\n d._cancelSrc = cancelSrc;\n conf.set(draft, d);\n });\n\n // start request\n try {\n // prepare params\n let url = conf.url;\n let queryParams = { ...params };\n if (pathParams)\n pathParams.forEach((p) => {\n delete queryParams[p];\n url = url.replace(`{${p}}`, params[p] || '');\n });\n\n let response = await axios.get(url, {\n ...axiosConfig,\n params: queryParams,\n cancelToken: cancelSrc.token,\n });\n\n let d = newData();\n d.data = conf.prepare(response.data as ApiD);\n if (conf.pagination) {\n d.pagination = conf.pagination(response.data);\n }\n\n // Cache data\n if (conf.cacheTimeMillis) {\n let cache = CACHE.get(loaderId) || [];\n cache.push({\n params,\n createdAt: +new Date(),\n data: d.data,\n });\n CACHE.set(loaderId, cache);\n }\n\n d.params = params;\n conf.store.update((draft, state) => {\n if (conf.get(state)._id === id) {\n conf.set(draft, d);\n } else {\n console.log('Stale request ', id);\n }\n });\n } catch (e) {\n if (axios.isCancel(e)) {\n return;\n }\n let d = newData();\n d.params = params;\n conf.store.update((draft, state) => {\n if (conf.get(state)._id === id) {\n conf.set(draft, d);\n }\n });\n }\n };\n}\n\nexport { Store };\n","import { Store } from 'pullstate';\nimport { Data, newData, loader } from 'core/data';\n\ninterface Response {\n total_count: number;\n page_result: Photo[];\n}\n\nexport interface Photo {\n main: string;\n main_thumbnail: string;\n name: string;\n id: number;\n extra: {\n email: string;\n location: string;\n selected?: boolean;\n };\n}\n\ninterface State {\n photos: Data;\n}\n\nexport const MainStore = new Store({\n photos: newData(),\n});\n\nexport const loadPhotos = loader({\n url: 'https://interaktivno.go2digital.hr/api/games/88/images/',\n store: MainStore,\n prepare: (d: Response) => d.page_result,\n pagination: (d: Response) => ({totalCount: d.total_count}),\n get: (s) => s.photos,\n set: (s, d) => (s.photos = d),\n});\n","import React from 'react';\nimport { MainStore, Photo, loadPhotos } from 'state';\nimport { useMediaQuery } from '@mantine/hooks';\nimport styled from 'styled-components';\n\nexport default function App() {\n const min1300 = useMediaQuery('(min-width: 1300px)');\n\n let PER_PAGE = min1300 ? 24 : 8;\n console.log(PER_PAGE)\n\n\n const photos = MainStore.useState((s) => s.photos);\n let [page, setPage] = React.useState(1);\n\n React.useEffect(() => {\n loadPhotos({page: page.toString(), per_page: PER_PAGE.toString()});\n }, [page, PER_PAGE]);\n\n let data = photos.data || photos.prevData;\n let totalCount = photos.pagination?.totalCount;\n\n return (\n \n

\n \"Mastercard\n

\n \n
\n

\n Neprocjenjiva iskustva čine naš život bogatijim.\n

\n\n

\n \n Priceless.com\n {' '}\n jedinstven je program dostupan korisnicima Mastercard® kartica koji\n omogućava pristup nezaboravnim iskustvima u gradovima u kojima\n živite i u koje putujete, ali i online. Začinite svoju rutinu i\n pronađite vrijeme za svoje strasti, ponovno otkrijte ljubav prema\n kuhanju – ili glazbi. Ili oboje.\n

\n

\n Napravite uspomene koje traju cijeli život. Posjetite \n priceless.com\n i započnite nešto neprocjenjivo™.\n

\n
\n\n
\n

\n A koje je tvoje neprocjenjivo iskustvo?\n

\n\n

\n Bez obzira radi li se o vikendu provedenom s obitelji, mirisu svježe\n pečenog kruha ili trenutku kada se jednostavno isključiš u prirodi,\n svatko ima svoje omiljeno neprocjenjivo iskustvo.\n

\n\n

\n Podijeli s nama fotografiju svojeg i osvoji antistress vikend u\n Slavoniji!\n

\n\n

\n \n Pravila natječaja\n \n

\n

\n

\n
\n\n
\n \n
\n \n\n
\n {data &&\n data.map((photo) => )}\n
\n\n { totalCount && }\n
\n );\n}\n\nlet Wrap = styled.div`\n max-width: 300px;\n margin: 0 auto;\n padding-top: 35px;\n padding-bottom: 100px;\n color: white;\n font-family: font-regular, sans-serif;\n\n h1,\n h2,\n h3 {\n font-family: font-bold, sans-serif;\n }\n\n @media (min-width: 380px) {\n max-width: 340px;\n }\n\n @media (min-width: 660px) {\n max-width: 580px;\n padding-top: 50px;\n }\n\n @media (min-width: 1300px) {\n max-width: 1160px;\n }\n\n @media (min-width: 1920px) {\n max-width: 1740px; /* 3 x 560 */\n }\n\n #logo {\n width: 240px;\n height: 40px;\n margin-bottom: 30px;\n margin-left: -15px;\n\n @media (min-width: 660px) {\n margin-bottom: 100px;\n }\n }\n\n a,\n a:active,\n a:hover {\n color: white;\n }\n`;\n\nlet Head = styled.div`\n h2 {\n font-size: 24px;\n line-height: 35px;\n margin-bottom: 50px;\n padding-top: 30px;\n }\n\n p {\n margin-bottom: 30px;\n font-size: 19px\n line-height: 28px\n }\n\n a.link {\n font-size: 18px;\n line-height: 27px;\n font-family: font-bold, sans-serif;\n }\n\n #pravila {\n margin-bottom: 60px;\n }\n\n .hid {\n display: none;\n }\n\n @media (min-width: 660px) {\n h2 {\n font-size: 30px;\n line-height: 44px;\n }\n\n p {\n font-size: 23px;\n line-height: 34px;\n }\n }\n\n @media (min-width: 1300px) {\n display: flex;\n justify-content: space-between;\n\n & > div {\n width: 550px;\n }\n\n #pravila {\n margin-bottom: 40px;\n }\n }\n\n @media (min-width: 1920px) {\n .hid {\n display: block;\n }\n }\n`;\n\nlet Main = styled.div`\n padding-top: 40px;\n\n @media (min-width: 660px) {\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n }\n\n @media (min-width: 1920px) {\n justify-content: flex-start;\n & > * {\n margin-right: 40px;\n }\n\n }\n`;\n\nlet Btn = styled.a`\n background: #f79e1b;\n border-radius: 5px;\n height: 62px;\n display: flex;\n align-items: center;\n justify-content: center;\n text-transform: uppercase;\n text-decoration: none;\n`;\n\nfunction PhotoView(props: { photo: Photo }) {\n let p = props.photo;\n return (\n \n {p.extra.selected &&
}\n
\n \"\"\n
\n
{p.extra.location}
\n
{p.name}
\n \n );\n}\n\nlet PhotoWrap = styled.div`\n margin-bottom: 50px;\n position: relative;\n\n .imgwrap {\n width: 100%;\n padding-top: 176%;\n position: relative;\n background: pink;\n margin-bottom: 25px;\n }\n\n img {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n object-fit: cover;\n background: white;\n }\n\n .badge {\n position: absolute;\n top: 12px;\n left: 12px;\n z-index: 2;\n width: 64px;\n height: 64px;\n background: url('${require('./badge.png').default}') no-repeat 0 0;\n background-size: contain;\n }\n\n div {\n font-size: 17px;\n }\n\n div:nth-child(2) {\n font-family: font-bold, sans-serif;\n margin-bottom: 5px;\n }\n\n @media (min-width: 660px) {\n width: 250px;\n }\n`;\n\nfunction Pagination(props: {totalCount: number, page: number, perPage: number, setPage: ((page: number) => void)}) {\n let { totalCount, page, perPage, setPage } = props;\n let pages = Math.ceil(totalCount / perPage);\n let pgs = [];\n for (let p = 1; p <= pages; p++) {\n pgs.push( setPage(p)}>{ p })\n }\n return (\n \n { pgs }\n \n )\n}\n\nlet PaginationWrap = styled.div`\n font-size: 20px;\n text-align: center;\n\n span {\n display: block-inline;\n margin: 0 6px;\n cursor: pointer;\n }\n\n span.selected {\n font-family: font-bold, sans-serif;\n font-size: 1.1em;\n color: #f79e1b;\n text-decoration: underline;\n }\n`;\n\n","export default function track(event: string, meta: any) {\n const url = 'https://interaktivno.go2digital.hr/api/games/tracking/';\n const data = {\n event,\n meta,\n tracking: 'web',\n game_instance: 88,\n };\n\n let request = new XMLHttpRequest();\n request.open('POST', url, true);\n request.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');\n request.send(JSON.stringify(data));\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport FormApp from './FormApp';\nimport App from './App';\nimport track from './track';\nimport 'index.css';\n\ntrack('init', {});\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n"],"sourceRoot":""}