{"version":3,"sources":["Components/SignIn.css","Components/Link.tsx","Utils.ts","Stores/SessionShotState.ts","Stores/GlobalState.ts","Stores/SessionState.ts","Stores/RouteState.ts","Components/NavMenu.tsx","Components/BallFlight.tsx","Components/Layout.tsx","Stores/HomeState.ts","Components/Home.tsx","Stores/ProfileState.ts","Components/Profile.tsx","Components/SignIn.tsx","Components/Sessions.tsx","Components/InlineEdit.tsx","Components/ShotSettings.tsx","Components/ShotVisual.tsx","Components/SessionShots.tsx","Components/Help.tsx","App.tsx","index.tsx"],"names":["module","exports","black","dark","greyple","white","notsowhite","blurple","blurple-hover","Link","props","classes","className","isActive","react","onClick","e","html5LinkOnClick","event","nativeEvent","classNames","href","target","children","axiosInstance","axios","create","fetchJson","_callee","url","init","defaults","result","regenerator_default","a","wrap","_context","prev","next","Object","assign","sent","abrupt","data","t0","stop","this","formatDate","date","dateType","d","Moment","local","returnDate","format","DateType","Date","Time","avg","list","sum","length","reduce","memo","num","orderBy","selector","asc","arguments","undefined","sort","x","y","b","sortThings","toDict","dict","i","group","groupedList","forEach","index","findIndex","z","JSON","stringify","key","values","push","item","AutoSelectOnShot","SpinNumbers","globalState","auth","isCollapsedManu","override","isTracerActive","windowDimensions","isSmallScreen","isAuthenticated","routeState","route","Route","sessionShots","width","observable","user","username","apiKey","isMetres","isPremium","height","computed","action","colors","GroupedBy","defaultSessionShotSettings","autoSelectOnShot","Yes","showClubDataOnFirst","showDispersionCircles","showDispersionCirclesByClub","spinNumbers","SideBack","SessionShotsState","SessionShotState_class","sessionId","_this3","classCallCheck","archivedFilter","shot","archived","filterSettings","showArchived","initializerDefineProperty","SessionShotState_descriptor","SessionShotState_descriptor2","oldDisplayTracer","SessionShotState_descriptor3","SessionShotState_descriptor4","_descriptor5","_descriptor6","_descriptor7","_descriptor8","_descriptor9","_descriptor10","_descriptor11","_descriptor12","_descriptor13","_descriptor14","_descriptor15","_descriptor16","_descriptor17","_descriptor18","createClass","get","_this","keys","shots","map","filter","id","_this2","shotsInOrder","localStorage","getItem","value","_routed","asyncToGenerator","mark","shotId","_shots","_this4","selectedShots","setInitialData","shotsCount","indexOf","split","isNaN","setSelected","_x","apply","settings","setItem","isSettingsOpen","isFiltersOpen","isVisualOpen","_setInitialData","_callee2","_this5","_context2","loading","concat","runInAction","sessionName","isOwnSession","shotData","clubData","clubSpeed","openCloseStates","_updateShot","_callee3","club","_context3","method","cachedTracerPoints","_x2","_x3","_archiveShot","_callee4","_context4","archive","_x4","rating","_this6","defineProperty","animateLast","selectedTracerPoints","shotsInReverseOrder","LastOnly","Last5","slice","LastClub","connectedState","label","text","_toggleGroupBy","_callee5","grouped","_this7","_context5","groupedByClub","Summary","assignColor","toggleTracer","getTracerPoints","_x5","show","showClubData","currentHoverShot","_setSelected","_callee6","selected","filteredShots","_this8","_context6","objectSpread","_x6","_x7","_this9","clubColors","colorIndex","_getTracerPoints","_callee7","tracerShots","newShots","newPoints","points","_this10","_context7","shotIds","_x8","tracerPoints","_this11","dispersionsPerClub","carrys","Math","sqrt","pow","calcCarry","dispCarry","underscore","max","min","clubValues","dist","offline","offlines","avgDistances","avgOfflines","sumSqrtXs","sumSqrtYs","avgXs","xStdDev","avgYs","yStdDev","_this12","_this13","_this14","horizontalImpact","verticalImpact","applyDecoratedDescriptor","prototype","configurable","enumerable","writable","initializer","getOwnPropertyDescriptor","Default","defaultNewSession","name","isPrivate","sessionState","isLoading","showCreateSession","sessions","editSessionId","editSessionData","params","query","startedAt","links","shotSeg","routeLinkMappings","RouteState_class","RouteState","RouteState_descriptor","RouteState_descriptor2","RouteState_descriptor3","RouteState_descriptor4","linkRoute","showMenu","_setSessionId","sessionShotsState","sessionShotId","routed","home","Router","$","enter","setRoute","signin","profile","help","beforeEnter","_beforeEnter","_ref","_ref$params","setSessionId","_ref2","enableHtml5Routing","NavMenu","observer","NavMenu_class","_React$Component","possibleConstructorReturn","getPrototypeOf","inherits","menuNavClasses","collapse","navBarClasses","navbar navbar-dark","underline","navItemClasses","nav-item","px-3","isSmallMenu","toggleMenu","Link_Link","aria-hidden","React","point","multiplier","toFixed","BallFlight","displayInMetres","ballFlightData","distanceMarkers","maxCarry","maxWidth","abs","dispersions","carryDispersion","multiplier1","multiplier2","symbol","sideDispersion","aboveDispersion","std1","displayDispersionCircles","cx","cy","rx","ry","fill","stroke","strokeDasharray","std2","strokeWidth","style","display","padding","fontWeight","float","viewBox","r","join","above","currentHoverShotId","textAnchor","dominantBaseline","fontSize","side","Layout","Layout_class","contentClassNames","content","px-1","has-bottombar","showBottomBar","sideBarClasses","sidebar","small","bottomBarClasses","bottombar","data-color","onMouseEnter","toggleCollapsedMenu","onMouseLeave","NavMenu_NavMenu","shotState","getBallFlight","homeState","isLoadingVersionId","versionId","latestVersion","Home","preventDefault","navigate","loadVersion","onSubmit","onChange","updateSessionId","type","aria-describedby","placeholder","profileState","globalAuth","setAuth","Profile","Profile_class","call","getProfile","form","saveProfile","htmlFor","readOnly","checked","setProfile","SignIn","SessionEdit","position","top","createSessionSubmitted","submit","setNewSession","cancelCreateSession","Sessions","Sessions_class","getSessions","contents","renderSessions","orderedSessions","createSession","session","shotCount","data-toggle","aria-haspopup","aria-expanded","aria-labelledby","editSession","ReactIf","condition","deleteSession","InlineEdit","startEditing","stopPropagation","setState","editing","finishEditing","isInputValid","state","commitEditing","cancelEditing","newProp","paramName","change","clickWhenEditing","minLength","defaultProps","maxLength","keyDown","keyCode","textChanged","trim","validate","nextProps","isTextChanged","isEditingChanged","nextState","prevProps","prevState","element","inputElem","ReactDOM","refs","input","focus","setSelectionRange","isDisabled","Element","staticElement","editingElement","_Element2","onKeyDown","onBlur","activeClassName","defaultValue","ref","_Element","tabIndex","title","ShotSettings","ShotSettings_class","store","setSetting","No","AxisTotal","Modal","isOpen","toggle","toggleSettings","ModalHeader","ModalBody","ShotVisual","ShotVisual_class","selectedShotClubData","lie","allSelectedShots","isWoodShot","test","toLowerCase","imageOffsetX","centerY","factor","image","borderRadius","backgroundColor","transform","transformOrigin","offsetX","xlinkHref","last","opacity","innerFill","marginTop","textAlign","size","fade","toggleVisual","formatNum","precision","math","notation","SessionShots","SessionShots_class","connection","signalR","withUrl","build","on","onShot","start","then","invoke","setLiveConnection","onclose","_start","console","log","setTimeout","self","groupedShots","Grouped","ByClub","lastItem","orderedGroup","j","selectedShotsInGroup","renderShot","ClubAvgs","BallAvgs","isSummary","colSpan","summaryTracerPoints","renderClubDataSpecificHeaders","renderBallDataSpecificHeaders","win","premium","isSideBack","backTotalSpin","ballData","backSpin","totalSpin","sideAxisSpin","sideSpin","spinAxis","degSymbol","ballSpeed","launchAngle","launchDirection","flashit training-good","offlineMts","peakHeightMts","peakHeight","carryMts","carry","toggleClubData","color","marginLeft","rankShot","el","document","createElement","body","appendChild","select","execCommand","removeChild","copy","archiveShot","shotsInGroup","isMisread","displayExtra","openCloseStatesInGroup","misread","notSelected","styles","setHoverShot","setUnHoverShot","rowSpan","toggleGroupSelection","paddingLeft","1","2","3","InlineEdit_InlineEdit","updateShot","minHeight","Full","renderClubDataSpecificRow","renderBallDataSpecificRow","renderInlineClubData","hasData","smashFactor","angleOfAttack","clubPath","faceToPath","faceToTarget","loft","closingRate","paddingBottom","border","marginBottom","background","renderClubDataHeaders","renderClubDataRow","toggleGroupBy","toggleDataType","setFilters","renderShots","labelClasses","btn btn-primary","active","labelClassesGroups","ShotSettings_ShotSettings","ShotVisual_ShotVisual","marginRight","autoComplete","aria-pressed","toggleFilters","renderFilters","roundToTwo","round","avgs","subFontWeight","leftOffline","rightOffline","offlineL","offlineR","offlineLMts","offlineRMts","heightRange","toConsumableArray","heightRangeMts","carryRange","carryRangeMts","offlineDisp","heightDisp","carryDisp","backTotalAvgSpin","sideSpinAxisAvg","shotClub","summaryClasses","summary","_ref3","smash","calcAvg","Help","Help_class","App","loadAuth","setWindowDimensions","window","innerWidth","innerHeight","updateWindowDimensions","addEventListener","removeEventListener","Layout_Layout","Page","setMainMargin","Home_Home","SignIn_SignIn","Profile_Profile","Help_Help","Sessions_Sessions","SessionShots_SessionShots","outerHeight","css","src_App","getElementById"],"mappings":"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","file":"static/js/main.96bb413b.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"black\":\"#23272A\",\"dark\":\"#2C2F33\",\"greyple\":\"#99AAB5\",\"white\":\"#FFFFFF\",\"notsowhite\":\"rgba(255,255,255,0.4)\",\"blurple\":\"#7289DA\",\"blurple-hover\":\"#697ec4\"};","import { html5LinkOnClick } from 'takeme';\r\nimport * as React from 'react';\r\nimport classNames from 'classnames';\r\n\r\nexport const Link: React.SFC<{ href: string, className?: string, target?: string, isActive?: boolean }> = (props) => {\r\n\r\n var classes = {};\r\n classes[props.className || ''] = true;\r\n classes['active'] = props.isActive;\r\n\r\n return html5LinkOnClick({ event: e.nativeEvent })}\r\n className={classNames(classes)}\r\n href={props.href}\r\n target={props.target}\r\n children={props.children}\r\n />\r\n}\r\n","import * as Moment from 'moment';\r\nimport axios, { AxiosRequestConfig } from 'axios';\r\n\r\nvar axiosInstance = axios.create();\r\n\r\nasync function fetchJson(url: string, init?: AxiosRequestConfig | undefined): Promise {\r\n var defaults = Object.assign({}, init);\r\n\r\n try {\r\n var result = await axiosInstance(url, defaults);\r\n // if (result.status === 302) {\r\n // window.location = response.url\r\n // }\r\n return result.data;\r\n }\r\n catch {\r\n return {} as T;\r\n }\r\n}\r\n\r\nfunction formatDate(date: string, dateType: DateType) {\r\n let d = Moment.utc(date).local(); \r\n let returnDate = d.format(\"YYYY-MM-DD h:mm:ss a\");\r\n if (dateType == DateType.Date) \r\n returnDate = d.format(\"YYYY-MM-DD\");\r\n else if (dateType == DateType.Time)\r\n returnDate = d.format(\"H:mm:ss\");\r\n return returnDate;\r\n}\r\n\r\nfunction avg(list: number[]) {\r\n return sum(list) / (list.length || 1);\r\n}\r\n\r\nfunction sum(list: number[]) {\r\n return list.reduce((memo, num) => memo + num, 0);\r\n}\r\n\r\nfunction orderBy(list: T[], selector: (item: T) => T2, asc: boolean = true) {\r\n function sortThings(a: T2, b: T2) {\r\n var result = a > b ? 1 : b > a ? -1 : 0;\r\n return asc ? result : result * -1;\r\n }\r\n\r\n return list.sort((x, y) => sortThings(selector(x), selector(y)));\r\n}\r\n\r\nfunction toDict(list: T[], selector: (item: T) => string) {\r\n var dict: { [id: string]: T } = {};\r\n for (let i=0; i(list: T[], selector: (item: T) => T2) {\r\n let groupedList: { key: T2, values: T[] }[] = [];\r\n list.forEach(x => {\r\n if (groupedList.length > 0) {\r\n let lastItem = groupedList[groupedList.length - 1];\r\n if (JSON.stringify(lastItem.key) == JSON.stringify(selector(x))) {\r\n lastItem.values.push(x);\r\n return;\r\n }\r\n }\r\n let item = {\r\n key: selector(x),\r\n values: [x]\r\n };\r\n groupedList.push(item);\r\n });\r\n return groupedList;\r\n}\r\n\r\nfunction group(list: T[], selector: (item: T) => T2) {\r\n let groupedList: { key: T2, values: T[] }[] = [];\r\n list.forEach(x => {\r\n var index = groupedList.findIndex(z => JSON.stringify(z.key) === JSON.stringify(selector(x)));\r\n if (index >= 0) {\r\n groupedList[index].values.push(x);\r\n }\r\n else {\r\n let item = {\r\n key: selector(x),\r\n values: [x]\r\n };\r\n groupedList.push(item);\r\n }\r\n });\r\n return groupedList;\r\n}\r\n\r\nvar arrayMath = {\r\n all: function(array: boolean[]) {\r\n for(var i = 0; i maxCount) {\r\n modes = [val];\r\n maxCount = modeMap[val];\r\n }\r\n else if (modeMap[val] === maxCount) {\r\n modes.push(val);\r\n maxCount = modeMap[val];\r\n }\r\n });\r\n return modes;\r\n },\r\n\r\n variance: function(array: number[]) {\r\n var mean = arrayMath.mean(array);\r\n return arrayMath.mean(array.map(function(num) {\r\n return Math.pow(num - mean, 2);\r\n }));\r\n },\r\n\r\n standardDeviation: function(array: number[]) {\r\n return Math.sqrt(arrayMath.variance(array));\r\n },\r\n\r\n meanAbsoluteDeviation: function(array: number[]) {\r\n var mean = arrayMath.mean(array);\r\n return arrayMath.mean(array.map(function(num) {\r\n return Math.abs(num - mean);\r\n }));\r\n },\r\n\r\n zScores: function(array: number[]) {\r\n var mean = arrayMath.mean(array);\r\n var standardDeviation = arrayMath.standardDeviation(array);\r\n return array.map(function(num) {\r\n return (num - mean) / standardDeviation;\r\n });\r\n }\r\n};\r\n\r\nexport enum DateType {\r\n Full,\r\n Date,\r\n Time\r\n}\r\n\r\nexport { fetchJson, formatDate, avg, sum, orderedGroup, group, orderBy, toDict, arrayMath };","import { observable, action, computed, runInAction } from \"mobx\";\r\nimport { fetchJson, avg, sum, group, orderBy, toDict } from '../Utils';\r\nimport underscore from 'underscore';\r\nimport { globalState } from \"./GlobalState\";\r\nimport localStorage from 'mobx-localstorage';\r\n\r\nlet colors = [\r\n '#e8081e',\r\n '#fd7e14',\r\n '#ffc107',\r\n '#28a745',\r\n '#007bff',\r\n '#6610f2',\r\n '#20c997',\r\n '#17a2b8',\r\n '#6c757d',\r\n];\r\n\r\nexport enum AutoSelectOnShot {\r\n No = 'no',\r\n Yes = 'yes',\r\n LastOnly = 'last-only',\r\n Last5 = 'last-5',\r\n LastClub = 'last-club'\r\n};\r\n\r\nexport enum SpinNumbers {\r\n SideBack = 0,\r\n AxisTotal = 1\r\n};\r\n\r\nlet defaultSessionShotSettings: SessionShotSettings = {\r\n isMetres: undefined,\r\n autoSelectOnShot: AutoSelectOnShot.Yes,\r\n showClubDataOnFirst: false,\r\n showDispersionCircles: true,\r\n showDispersionCirclesByClub: false,\r\n spinNumbers: SpinNumbers.SideBack\r\n};\r\n\r\nexport class SessionShotsState {\r\n sessionId: string;\r\n archivedFilter = (shot: Shot) => !shot.archived || this.filterSettings.showArchived;\r\n\r\n @observable public shots: { [shotId: string]: Shot } = {};\r\n @observable public isOwnSession: boolean = false;\r\n \r\n oldDisplayTracer: boolean | null = null;\r\n\r\n @computed public get shotsInOrder() {\r\n return orderBy(Object.keys(this.shots).map(x => this.shots[x]), x => x.date).filter(x => this.archivedFilter(x)).map(x => x.id);\r\n }\r\n\r\n @computed public get shotsInReverseOrder() {\r\n return orderBy(Object.keys(this.shots).map(x => this.shots[x]), x => x.date, false).filter(x => this.archivedFilter(x)).map(x => x.id);\r\n }\r\n\r\n @computed public get shotsCount() {\r\n return this.shotsInOrder.length;\r\n }\r\n\r\n @observable public loading: boolean = false;\r\n @observable public openCloseStates: { [shotId: string]: boolean } = {};\r\n @observable public groupedByClub: GroupedBy = GroupedBy.Default;\r\n @observable public showClubData: boolean = false;\r\n @observable public selectedShots: { [id: string]: boolean } = {};\r\n @observable public colorIndex: number = 0;\r\n @observable public clubColors: { [id: string]: string } = {};\r\n @observable public connectedState: { label: string, text: string } = { label: \"secondary\", text: \"Idle\" };\r\n @observable public cachedTracerPoints: { [id: string]: BallFlightData } = {};\r\n @observable public isSettingsOpen: boolean = false;\r\n @observable public isFiltersOpen: boolean = false;\r\n @observable public isVisualOpen: boolean = false;\r\n @observable public animateLast: boolean = false;\r\n\r\n @computed public get settings(): SessionShotSettings {\r\n return Object.assign({}, defaultSessionShotSettings, localStorage.getItem('shot.settings') as SessionShotSettings);\r\n };\r\n\r\n @observable public filterSettings: SessionShotFilterSettings = {\r\n showArchived: false\r\n };\r\n\r\n @observable public sessionName: string = '';\r\n @observable public currentHoverShot: string | null = null;\r\n\r\n constructor(sessionId: string) {\r\n this.sessionId = sessionId;\r\n }\r\n\r\n @action\r\n async routed(shotId: string | undefined) {\r\n this.selectedShots = {};\r\n await this.setInitialData();\r\n if (shotId !== undefined &&\r\n (this.shots[shotId] !== undefined\r\n || (+shotId > 0 && +shotId <= this.shotsCount)\r\n || shotId.indexOf(',') > 0)) {\r\n\r\n let shots = [];\r\n if (shotId.indexOf(',') > 0) {\r\n shots = shotId.split(',').filter(x => +x > 0 && +x < this.shotsCount).map(x => this.shots[this.shotsInOrder[+x - 1]]);\r\n }\r\n else if (!isNaN(+shotId)) {\r\n shots = [this.shots[this.shotsInOrder[+shotId - 1]]];\r\n }\r\n else {\r\n shots = [this.shots[shotId]];\r\n }\r\n await this.setSelected(shots, true);\r\n }\r\n }\r\n\r\n @action\r\n setSetting(data: Pick) {\r\n var settings = Object.assign(this.settings, data);\r\n localStorage.setItem('shot.settings', settings);\r\n }\r\n\r\n setFilters(data: Pick) {\r\n this.filterSettings = Object.assign(this.filterSettings, data);\r\n }\r\n\r\n @action\r\n toggleSettings() {\r\n this.isSettingsOpen = !this.isSettingsOpen;\r\n }\r\n\r\n @action\r\n toggleFilters() {\r\n this.isFiltersOpen = !this.isFiltersOpen;\r\n }\r\n\r\n @action\r\n toggleVisual() {\r\n this.isVisualOpen = !this.isVisualOpen;\r\n }\r\n\r\n @action\r\n async setInitialData() {\r\n this.loading = true;\r\n\r\n var data = await fetchJson(`/webapi/sessions/${this.sessionId}`);\r\n\r\n runInAction(() => {\r\n this.sessionName = data.sessionName;\r\n this.isOwnSession = data.isOwnSession;\r\n \r\n if (data.shots.length > 0 && data.shots[0].shotData.clubData.clubSpeed > 0) {\r\n this.openCloseStates[data.shots[0].id] = this.settings.showClubDataOnFirst;\r\n }\r\n \r\n this.shots = toDict(data.shots, x => x.id);\r\n this.loading = false;\r\n }); \r\n }\r\n\r\n @action\r\n async updateShot(shotId: string, club: string) {\r\n fetchJson(`/webapi/sessions/${this.sessionId}/shot-update/${shotId}`, { method: 'POST', data: { club: club } });\r\n this.shots[shotId].club = club;\r\n if (this.selectedShots[this.shots[shotId].id]) {\r\n this.setSelected([{ id: shotId, club: club }], true);\r\n }\r\n this.cachedTracerPoints[shotId] && (this.cachedTracerPoints[shotId].club = club);\r\n }\r\n\r\n @action\r\n async archiveShot(shotId: string) {\r\n fetchJson(`/webapi/sessions/${this.sessionId}/shot-archive/${shotId}`, { method: 'POST', data: { archive: !this.shots[shotId].archived } });\r\n this.shots[shotId].archived = !this.shots[shotId].archived;\r\n this.selectedShots[shotId] = false;\r\n }\r\n\r\n @action\r\n rankShot(shotId: string, rating: number) {\r\n fetchJson(`/webapi/sessions/${this.sessionId}/shot-rate/${shotId}`, { method: 'POST', data: { rating: rating } });\r\n this.shots[shotId].rating = rating;\r\n }\r\n\r\n @action\r\n onShot(shot: Shot) {\r\n let existing = this.shots[shot.id] !== undefined;\r\n if (existing) {\r\n this.shots[shot.id] = shot;\r\n }\r\n else {\r\n this.openCloseStates = { [shot.id]: this.settings.showClubDataOnFirst };\r\n this.shots[shot.id] = shot;\r\n this.animateLast = false;\r\n\r\n let selectedShots = this.selectedTracerPoints.map(x => ({ id: x.shotId, club: x.club }));\r\n\r\n switch (this.settings.autoSelectOnShot) {\r\n case AutoSelectOnShot.Yes:\r\n this.setSelected([this.shots[this.shotsInReverseOrder[0]]], true);\r\n break;\r\n case AutoSelectOnShot.LastOnly:\r\n this.setSelected(selectedShots, false);\r\n this.setSelected([this.shots[this.shotsInReverseOrder[0]]], true);\r\n break;\r\n case AutoSelectOnShot.Last5:\r\n this.setSelected(selectedShots, false);\r\n this.setSelected(this.shotsInReverseOrder.map(x => this.shots[x]).slice(0, 5), true);\r\n this.animateLast = true;\r\n break;\r\n case AutoSelectOnShot.LastClub:\r\n this.setSelected(selectedShots, false);\r\n this.setSelected(this.shotsInOrder.map(x => this.shots[x]).filter(x => x.club === this.shots[this.shotsInReverseOrder[0]].club), true);\r\n this.animateLast = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n @action\r\n setLiveConnection() {\r\n this.connectedState = {\r\n label: 'success',\r\n text: 'Live'\r\n };\r\n }\r\n\r\n @action\r\n toggleClubData(shotId: string) {\r\n this.openCloseStates[shotId] = !this.openCloseStates[shotId] ? true : false;\r\n }\r\n\r\n @action\r\n async toggleGroupBy(grouped: GroupedBy) {\r\n if (this.groupedByClub == grouped)\r\n return;\r\n\r\n this.groupedByClub = grouped;\r\n\r\n if (grouped === GroupedBy.Summary) {\r\n this.assignColor(this.shotsInReverseOrder.map(x => this.shots[x]), x => true);\r\n this.oldDisplayTracer = globalState.isTracerActive;\r\n globalState.toggleTracer(false);\r\n await this.getTracerPoints(this.shotsInOrder);\r\n }\r\n else {\r\n if (this.oldDisplayTracer != null) {\r\n globalState.toggleTracer(this.oldDisplayTracer);\r\n this.oldDisplayTracer = null;\r\n } \r\n }\r\n }\r\n\r\n @action\r\n toggleDataType(show: boolean) {\r\n this.showClubData = show;\r\n }\r\n\r\n @action\r\n setHoverShot(shotId: string) {\r\n this.currentHoverShot = shotId;\r\n }\r\n\r\n @action\r\n setUnHoverShot() {\r\n this.currentHoverShot = null;\r\n }\r\n\r\n @action\r\n async setSelected(shots: { id: string, club: string }[], selected?: boolean) {\r\n var selectedShots: { [id: string]: boolean } = {};\r\n var filteredShots = shots.filter(x => !this.shots[x.id].archived);\r\n filteredShots.forEach(x => selectedShots[x.id] = selected !== undefined ? selected : !this.selectedShots[x.id]);\r\n this.assignColor(filteredShots, x => selectedShots[x]);\r\n this.selectedShots = { ...this.selectedShots, ...selectedShots };\r\n await this.getTracerPoints(Object.keys(selectedShots));\r\n }\r\n\r\n private assignColor(shots: { id: string; club: string; }[], selectedShots: (id: string) => boolean) {\r\n shots.forEach((x => {\r\n if (!this.clubColors[x.club]) {\r\n this.clubColors[x.club] = colors[this.colorIndex % colors.length];\r\n this.colorIndex = this.colorIndex + (selectedShots(x.id) ? 1 : -1);\r\n }\r\n }));\r\n }\r\n\r\n public async getTracerPoints(tracerShots: string[]) {\r\n var newShots = tracerShots.filter(x => Object.keys(this.cachedTracerPoints).findIndex(z => z === x) === -1);\r\n if (newShots.length > 0) {\r\n var newPoints = await fetchJson(`/webapi/sessions/${this.sessionId}/tracer-data`, { method: \"POST\", data: { shotIds: newShots } })\r\n if (newPoints.length > 0) {\r\n var points: { [id: string]: BallFlightData } = {};\r\n newPoints.forEach(x => { points[x.shotId] = x; });\r\n this.cachedTracerPoints = { ...this.cachedTracerPoints, ...points };\r\n }\r\n }\r\n }\r\n\r\n @computed\r\n get selectedTracerPoints() {\r\n return this.shotsInOrder\r\n .filter(x => this.selectedShots[x] && this.cachedTracerPoints[x])\r\n .map(x => this.cachedTracerPoints[x]);\r\n }\r\n\r\n @computed\r\n get summaryTracerPoints() {\r\n return this.shotsInOrder\r\n .filter(x => this.cachedTracerPoints[x])\r\n .map(x => this.cachedTracerPoints[x]);\r\n }\r\n\r\n @computed\r\n get selectedShotClubData() {\r\n return this.shotsInOrder\r\n .filter(x => this.selectedShots[x]\r\n && (this.shots[x].shotData.clubData.horizontalImpact != null || this.shots[x].shotData.clubData.verticalImpact != null))\r\n .map(x => this.shots[x]);\r\n }\r\n\r\n carryDispersion(tracerPoints: BallFlightData[]): CarryDispersion {\r\n var list = tracerPoints;\r\n if (list.length == 0) {\r\n return {\r\n x: 0,\r\n y: 0,\r\n dispersionsPerClub: []\r\n };\r\n }\r\n\r\n var carrys = list.map(x => x.points.length > 0 ? calcCarry(x.points[x.points.length - 1].x, x.points[x.points.length - 1].y) : 0);\r\n var dispCarry = carrys.length > 0 ? underscore.max(carrys) - underscore.min(carrys) : 0;\r\n\r\n var clubValues = list.map(x => ({ club: x.club, dist: x.points.length > 0 ? x.points[x.points.length - 1].x : 0, offline: x.points.length > 0 ? x.points[x.points.length - 1].y : 0 }));\r\n var offlines = clubValues.map(x => x.offline);\r\n var dispLeftRight = clubValues.length > 0 ? underscore.max(offlines) - underscore.min(offlines) : 0;\r\n\r\n var groups = group(clubValues, x => this.settings.showDispersionCirclesByClub ? x.club : '__allClubs').map(x => {\r\n var avgDistances = avg(x.values.map(y => y.dist));\r\n var avgOfflines = avg(x.values.map(y => y.offline));\r\n\r\n var sumSqrtXs = sum(x.values.map(y => Math.pow(y.dist - avgDistances, 2)));\r\n var sumSqrtYs = sum(x.values.map(y => Math.pow(y.offline - avgOfflines, 2)));\r\n\r\n return {\r\n club: x.key,\r\n selected: x.values.length,\r\n avgXs: avgDistances,\r\n xStdDev: Math.max(Math.sqrt(sumSqrtXs / x.values.length), 15),\r\n avgYs: avgOfflines,\r\n yStdDev: Math.max(Math.sqrt(sumSqrtYs / x.values.length), 15)\r\n }\r\n });\r\n\r\n var disp = {\r\n x: dispCarry,\r\n y: dispLeftRight,\r\n dispersionsPerClub: groups\r\n };\r\n\r\n return disp;\r\n }\r\n\r\n @computed get displayInMetres() {\r\n return this.settings.isMetres == undefined\r\n ? globalState.auth.user.isMetres\r\n : this.settings.isMetres;\r\n }\r\n}\r\n\r\nexport function calcCarry(x: number, y: number) {\r\n return Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));\r\n}\r\n\r\nexport interface CarryDispersion {\r\n x: number;\r\n y: number;\r\n dispersionsPerClub: {\r\n club: string;\r\n selected: number;\r\n avgXs: number;\r\n xStdDev: number;\r\n avgYs: number;\r\n yStdDev: number;\r\n }[]\r\n}\r\n\r\nexport interface Shot {\r\n id: string;\r\n date: string;\r\n shotData: ShotData;\r\n club: string;\r\n archived: boolean;\r\n rating: number;\r\n}\r\n\r\nexport interface ShotData {\r\n smashFactor: any;\r\n ballData: BallData;\r\n clubData: ClubData;\r\n}\r\n\r\nexport interface BallData {\r\n peakHeightMts: number;\r\n carryMts: number;\r\n peakHeight: number;\r\n ballSpeed: number;\r\n carry: number;\r\n launchAngle: number;\r\n launchDirection: number;\r\n backSpin: number;\r\n totalSpin: number;\r\n sideSpin: number;\r\n spinAxis: number;\r\n offline: number;\r\n offlineMts: number;\r\n}\r\n\r\nexport interface ClubData {\r\n angleOfAttack: number;\r\n loft: number;\r\n clubPath: number;\r\n faceToPath: number;\r\n faceToTarget: number;\r\n closingRate: number;\r\n lie: number;\r\n horizontalImpact: number;\r\n verticalImpact: number;\r\n clubSpeed: number;\r\n}\r\n\r\nexport enum GroupedBy {\r\n Default,\r\n Grouped,\r\n ByClub,\r\n Summary\r\n}\r\n\r\nexport interface Data {\r\n sessionName: string;\r\n isOwnSession: boolean;\r\n shots: Shot[];\r\n}\r\n\r\nexport interface BallFlightData {\r\n shotId: string;\r\n club: string;\r\n points: Point[];\r\n animate: boolean;\r\n}\r\n\r\nexport interface Point {\r\n x: number;\r\n y: number;\r\n z: number;\r\n}\r\n\r\ninterface SessionShotSettings {\r\n isMetres: boolean | undefined;\r\n showClubDataOnFirst: boolean;\r\n showDispersionCircles: boolean;\r\n autoSelectOnShot: AutoSelectOnShot;\r\n showDispersionCirclesByClub: boolean;\r\n spinNumbers: SpinNumbers;\r\n}\r\n\r\ninterface SessionShotFilterSettings {\r\n showArchived: boolean;\r\n}\r\n\r\n","import { observable, action, computed } from \"mobx\";\r\nimport { AuthDetails } from \"../App\";\r\nimport { routeState, Route } from \"./RouteState\";\r\nimport { fetchJson } from \"../Utils\";\r\n\r\nclass GlobalState {\r\n @observable\r\n public isTracerActive: boolean = true;\r\n \r\n @observable\r\n public auth: AuthDetails = {\r\n isAuthenticated: false,\r\n user: {\r\n username: '',\r\n apiKey: '',\r\n isMetres: false,\r\n isPremium: false\r\n }\r\n };\r\n\r\n @observable\r\n public windowDimensions: WindowDimensions = { width: 0, height: 0 }\r\n\r\n @observable\r\n public isCollapsedManu: boolean = true;\r\n\r\n @computed\r\n public get isSmallMenu(): boolean {\r\n return !this.isSmallScreen && this.isCollapsedManu && (this.auth.isAuthenticated || routeState.route == Route.sessionShots);\r\n }\r\n\r\n @action\r\n async loadAuth() {\r\n this.auth = await fetchJson('/auth-details');\r\n }\r\n\r\n @action\r\n toggleCollapsedMenu() {\r\n this.isCollapsedManu = !this.isCollapsedManu;\r\n }\r\n\r\n @action\r\n setAuth(auth: AuthDetails) {\r\n this.auth = auth;\r\n }\r\n\r\n @action\r\n toggleTracer(override?: boolean) {\r\n this.isTracerActive = override === undefined ? !this.isTracerActive : override;\r\n }\r\n\r\n @computed\r\n get showBottomBar() {\r\n return routeState.route === 'sessionShots' && this.isTracerActive;\r\n }\r\n\r\n @action\r\n setWindowDimensions(windowDimensions: WindowDimensions) {\r\n this.windowDimensions = windowDimensions;\r\n }\r\n\r\n @computed \r\n get isSmallScreen() {\r\n return this.windowDimensions.width <= 1024;\r\n }\r\n}\r\n\r\ninterface WindowDimensions { \r\n width: number; \r\n height: number; \r\n}\r\n\r\nexport const globalState = new GlobalState();","import { SessionShotsState } from \"./SessionShotState\";\r\nimport { fetchJson, toDict, orderBy } from \"../Utils\";\r\nimport { action, observable, computed } from \"mobx\";\r\n\r\nlet defaultNewSession = { name: '', isPrivate: false };\r\n\r\nclass SessionState {\r\n private sessionShots: { [sessionId: string]: SessionShotsState } = {};\r\n \r\n @observable\r\n public sessions: { [id: string] : Session } = {};\r\n @observable\r\n public isLoading: boolean = false;\r\n @observable\r\n public showCreateSession: boolean = false;\r\n @observable\r\n public editSessionId: string = '';\r\n\r\n @observable\r\n public editSessionData: { name: string, isPrivate: boolean } = defaultNewSession;\r\n\r\n get(sessionId: string) {\r\n var sessionShotState = this.sessionShots[sessionId] || (this.sessionShots[sessionId] = new SessionShotsState(sessionId));\r\n return sessionShotState;\r\n }\r\n\r\n @computed\r\n get orderedSessions() {\r\n return orderBy(Object.keys(this.sessions).map(x=>this.sessions[x]), x => x.startedAt, false);\r\n }\r\n\r\n @action\r\n async getSessions() {\r\n this.isLoading = true;\r\n this.showCreateSession = false;\r\n this.sessions = toDict(await fetchJson('/webapi/sessions'), x => x.sessionId);\r\n this.isLoading = false;\r\n }\r\n\r\n @action \r\n editSession(sessionId: string) {\r\n this.editSessionId = sessionId;\r\n this.showCreateSession = true;\r\n this.editSessionData.name = this.sessions[sessionId].name;\r\n this.editSessionData.isPrivate = this.sessions[sessionId].isPrivate;\r\n }\r\n\r\n @action \r\n async deleteSession(sessionId: string) {\r\n await fetchJson(`/webapi/sessions/delete`, { params: { sessionId: this.sessions[sessionId].id }, method: 'POST' });\r\n delete this.sessions[sessionId];\r\n }\r\n\r\n @action \r\n createSession() {\r\n this.showCreateSession = true;\r\n this.editSessionId = '';\r\n }\r\n\r\n @action\r\n cancelCreateSession() {\r\n this.showCreateSession = false;\r\n }\r\n\r\n @action\r\n async createSessionSubmitted() {\r\n var query = this.editSessionId ? { sessionId: this.sessions[this.editSessionId].id } : undefined;\r\n var result = await fetchJson(`/webapi/sessions/create`, { params: query, method: 'POST', data: this.editSessionData });\r\n this.sessions[result.sessionId].name = result.name;\r\n this.sessions[result.sessionId].isPrivate = result.isPrivate;\r\n this.editSessionData = defaultNewSession;\r\n this.editSessionId = '';\r\n this.showCreateSession = false;\r\n }\r\n\r\n @action\r\n setNewSession(data: Pick) {\r\n this.editSessionData = Object.assign(this.editSessionData, data);\r\n }\r\n}\r\n\r\nexport interface Session {\r\n id: string;\r\n sessionId: string;\r\n name: string;\r\n isPrivate: boolean;\r\n startedAt: string;\r\n shotCount: number;\r\n}\r\n\r\nexport const sessionState = new SessionState();","import { navigate, Router } from 'takeme';\r\nimport { observable, action } from 'mobx';\r\nimport { sessionState } from './SessionState'\r\n\r\n// URLs\r\nexport const links = {\r\n home: () => '/',\r\n signin: () => '/signin',\r\n profile: () => '/profile',\r\n help: () => '/help',\r\n sessions: () => '/sessions',\r\n sessionShots: (id: string, shotId?: string) => {\r\n let shotSeg = shotId ? `(/${shotId})` : '';\r\n return `/sessions/${id}${shotSeg}`;\r\n },\r\n}\r\n\r\n// State \r\nexport enum Route {\r\n home = 'home',\r\n signin = 'signin',\r\n profile = 'profile',\r\n help = 'help',\r\n sessions = 'sessions',\r\n sessionShots = 'sessionShots'\r\n}\r\n\r\nvar routeLinkMappings: { [route in Route]?: Route } = {};\r\nrouteLinkMappings[Route.sessionShots] = Route.sessions;\r\n\r\nexport class RouteState {\r\n @observable route: Route = Route.home;\r\n @observable linkRoute: Route = Route.home;\r\n @observable showMenu: boolean = false;\r\n\r\n @action setRoute(route: Route) {\r\n this.route = route;\r\n this.linkRoute = (routeLinkMappings[route] ? routeLinkMappings[route] : route) as Route;\r\n this.showMenu = false;\r\n }\r\n\r\n @observable sessionId: string = '';\r\n @observable sessionShotId: string | undefined;\r\n @action async setSessionId(sessionId: string, shotId?: string) {\r\n this.sessionId = sessionId;\r\n this.sessionShotId = shotId;\r\n var sessionShotsState = sessionState.get(sessionId);\r\n await sessionShotsState.routed(shotId);\r\n }\r\n\r\n @action toggleMenu() {\r\n this.showMenu = !this.showMenu;\r\n }\r\n}\r\n\r\nexport const routeState = new RouteState();\r\n\r\nexport const router = new Router([\r\n {\r\n $: links.signin(),\r\n enter: () => routeState.setRoute(Route.signin)\r\n },\r\n {\r\n $: links.sessions(),\r\n enter: () => routeState.setRoute(Route.sessions)\r\n },\r\n {\r\n $: links.profile(),\r\n enter: () => routeState.setRoute(Route.profile)\r\n },\r\n {\r\n $: links.help(),\r\n enter: () => routeState.setRoute(Route.help)\r\n },\r\n {\r\n $: links.sessionShots(':sessionId', ':shotId'),\r\n beforeEnter: async ({ params: { sessionId, shotId } }) => {\r\n routeState.setRoute(Route.sessionShots); \r\n await routeState.setSessionId(sessionId, shotId);\r\n },\r\n enter: ({ params: { sessionId } }) => { },\r\n },\r\n { $: '*', enter: () => routeState.setRoute(Route.home) },\r\n]).enableHtml5Routing().init();\r\n","import * as React from 'react';\r\n//import { Link } from 'react-router-dom';\r\nimport './NavMenu.css';\r\nimport { AuthDetails } from '../App';\r\nimport { Link } from './Link';\r\nimport { routeState, Route, links } from '../Stores/RouteState';\r\nimport classNames from 'classnames';\r\nimport { observer } from 'mobx-react';\r\nimport { globalState } from '../Stores/GlobalState';\r\n\r\ninterface Props {\r\n auth: AuthDetails\r\n}\r\n\r\n@observer\r\nexport class NavMenu extends React.Component {\r\n render() {\r\n\r\n var menuNavClasses = classNames({\r\n 'collapse': true,\r\n 'show': routeState.showMenu\r\n });\r\n\r\n var navBarClasses = classNames({\r\n 'navbar navbar-dark': true,\r\n 'underline': routeState.showMenu || !globalState.isSmallScreen\r\n });\r\n\r\n var navItemClasses = classNames({\r\n 'nav-item': true,\r\n 'px-3': !globalState.isSmallMenu\r\n });\r\n\r\n return (\r\n \r\n
\r\n
\r\n {!globalState.isSmallMenu ? \"Schogolf\" : \"SG\"}\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n );\r\n }\r\n}\r\n","import * as React from \"react\";\r\nimport { Point, BallFlightData, CarryDispersion } from '../Stores/SessionShotState';\r\nimport { observer } from \"mobx-react\";\r\nimport underscore from 'underscore';\r\n\r\ninterface BallFlightProps {\r\n carryDispersion: CarryDispersion;\r\n ballFlightData: BallFlightData[];\r\n displayInMetres: boolean;\r\n displayDispersionCircles: boolean;\r\n animateLast: boolean; \r\n clubColors: { [id: string]: string };\r\n currentHoverShotId: string | null;\r\n}\r\n\r\nfunction above(list: Point[], multiplier: number, isMetres: boolean) {\r\n return list.map(x => (multiplier * x.x * (isMetres ? 0.9144 : 1)).toFixed(2) + ',' + (50 + (multiplier * x.y * (isMetres ? 0.9144 : 1))).toFixed(2)).join(' ');\r\n}\r\n\r\nfunction side(list: Point[], multiplier: number, isMetres: boolean) {\r\n return list.map(x => (multiplier * x.x * (isMetres ? 0.9144 : 1)).toFixed(2) + ',' + (90 - (multiplier * x.z * (isMetres ? 0.9144 : 1))).toFixed(2)).join(' ');\r\n}\r\n\r\nfunction point(point: number, multiplier: number, isMetres: boolean) {\r\n return +(point * multiplier * (isMetres ? 0.9144 : 1)).toFixed(2);\r\n}\r\n\r\nfunction ballFlight(props: BallFlightProps) {\r\n\r\n var isMetres = props.displayInMetres;\r\n var points = props.ballFlightData;\r\n var distanceMarkers = [50, 100, 150, 200, 250, 300, 350, 400];\r\n\r\n var maxCarry = underscore.max([0].concat(points.map(x => x.points.length > 0 ? x.points[x.points.length-1].x * (isMetres ? 0.9144 : 1) : 0)));\r\n var maxWidth = underscore.max([0].concat(points.map(x => x.points.length > 0 ? Math.abs(x.points[x.points.length-1].y * (isMetres ? 0.9144 : 1)) : 0)));\r\n\r\n var dispersions = props.carryDispersion;\r\n var multiplier1 = 3 / ((maxCarry + (0.1 * Math.max(maxCarry, 100))) / 100);\r\n var multiplier2 = 2 / ((maxWidth + (0.1 * maxWidth)) / 25);\r\n var multiplier = points.length > 0 ? Math.min(multiplier1, multiplier2) : 1;\r\n\r\n var symbol = isMetres ? 'm' : 'y';\r\n var sideDispersion = (isMetres?dispersions.x * 0.9144:dispersions.x).toFixed(1) + symbol;\r\n var aboveDispersion = (isMetres?dispersions.y * 0.9144:dispersions.y).toFixed(1) + symbol;\r\n\r\n var std1 = dispersions.dispersionsPerClub.map(x=>{\r\n return props.displayDispersionCircles && x.selected > 1 && \r\n \r\n \r\n \r\n }).filter(x => x);\r\n\r\n var std2 = dispersions.dispersionsPerClub.map(x=>{\r\n return props.displayDispersionCircles && x.selected > 1 && \r\n }).filter(x => x);\r\n\r\n return (\r\n
\r\n
\r\n
From above {aboveDispersion}
\r\n \r\n {distanceMarkers.map(x => \r\n \r\n )}\r\n \r\n {std2}\r\n {points.map((x, i) =>\r\n \r\n )}\r\n {std1}\r\n {points.map((x, i) =>\r\n \r\n )}\r\n {(300/multiplier).toFixed()+symbol}\r\n \r\n
\r\n
\r\n
From the side {sideDispersion}
\r\n \r\n \r\n \r\n \r\n {distanceMarkers.map(x => \r\n \r\n )}\r\n \r\n {points.map((x, i) =>\r\n \r\n )}\r\n {points.map((x, i) =>\r\n \r\n )}\r\n {(300/multiplier).toFixed()+symbol}\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\n\r\nexport const BallFlight = observer(ballFlight);","import * as React from 'react';\r\nimport { NavMenu } from './NavMenu';\r\nimport { AuthDetails } from '../App';\r\nimport { BallFlight } from './BallFlight';\r\nimport { globalState } from '../Stores/GlobalState';\r\nimport { observer } from 'mobx-react';\r\nimport classNames from 'classnames';\r\nimport { routeState } from '../Stores/RouteState';\r\nimport { sessionState } from '../Stores/SessionState';\r\n\r\ninterface Props {\r\n auth: AuthDetails\r\n}\r\n\r\n@observer\r\nexport class Layout extends React.Component {\r\n render() {\r\n\r\n let contentClassNames = classNames({\r\n 'content': true,\r\n 'px-1': globalState.isSmallScreen,\r\n 'px-3': !globalState.isSmallScreen,\r\n 'has-bottombar': globalState.showBottomBar\r\n });\r\n\r\n let sideBarClasses = classNames({\r\n 'sidebar': true,\r\n 'small': globalState.isSmallMenu\r\n });\r\n\r\n let bottomBarClasses = classNames({\r\n 'bottombar': true,\r\n 'small': globalState.isSmallMenu\r\n })\r\n\r\n function getBallFlight() {\r\n var shotState = sessionState.get(routeState.sessionId);\r\n return \r\n }\r\n\r\n return (\r\n \r\n
globalState.toggleCollapsedMenu()} \r\n onMouseLeave={() => globalState.toggleCollapsedMenu()}>\r\n \r\n
\r\n
\r\n
\r\n {this.props.children}\r\n
\r\n {globalState.showBottomBar &&\r\n
\r\n {globalState.isTracerActive && getBallFlight()}\r\n
\r\n }\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import { observable, action, computed } from \"mobx\";\r\nimport { fetchJson } from \"../Utils\";\r\n\r\ninterface VersionInfo {\r\n latestVersion: string\r\n}\r\n\r\nclass HomeState {\r\n @observable\r\n public sessionId: string = '';\r\n\r\n @observable\r\n public versionId: string = '';\r\n\r\n @observable\r\n public isLoadingVersionId: boolean = false;\r\n\r\n @action\r\n updateSessionId(sessionId: string) {\r\n this.sessionId = sessionId;\r\n }\r\n\r\n @action\r\n async loadVersion() {\r\n this.isLoadingVersionId = true;\r\n this.versionId = (await fetchJson('/webapi/version')).latestVersion;\r\n this.isLoadingVersionId = false;\r\n }\r\n}\r\n\r\nexport const homeState = new HomeState();","import * as React from 'react';\r\nimport { navigate } from 'takeme';\r\nimport { homeState } from '../Stores/HomeState';\r\nimport { links } from '../Stores/RouteState';\r\nimport { observer } from 'mobx-react';\r\nimport { globalState } from '../Stores/GlobalState';\r\n\r\n@observer\r\nclass Home extends React.Component {\r\n onSubmit(e: React.FormEvent) {\r\n e.preventDefault();\r\n if (homeState.sessionId != '') {\r\n navigate(links.sessionShots(homeState.sessionId));\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n homeState.loadVersion();\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n
\r\n

Welcome!

\r\n
\r\n
\r\n Your online shot tracking software with integrations directly to GC2 or via the OGT interface.\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

View Live Sessions

\r\n
\r\n
\r\n
this.onSubmit(e)}>\r\n
\r\n homeState.updateSessionId(x.target.value)} type=\"text\" className=\"form-control\" id=\"sessionId\" aria-describedby=\"sessionIdHelp\" placeholder=\"Enter Session Id\" />\r\n To view an existing public schedule enter the id in above.\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n {globalState.auth.isAuthenticated && \r\n
\r\n
\r\n
\r\n

Schogolf Client

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

\r\n The latest version of the client is {homeState.isLoadingVersionId ? 'awesome' : homeState.versionId}. Click here to download or click update directly in the application.\r\n

\r\n

\r\n For help or just getting started click on the menu item HELP.\r\n

\r\n
\r\n
\r\n
\r\n
\r\n }\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport { Home };","import { User } from '../App';\r\nimport { fetchJson } from '../Utils';\r\nimport { observable, action } from 'mobx';\r\nimport { globalState } from './GlobalState';\r\n\r\nclass ProfileState {\r\n @observable\r\n public isLoading: boolean = false;\r\n\r\n @observable\r\n public user: User = { \r\n apiKey: '',\r\n isMetres: false,\r\n username: '',\r\n isPremium: false\r\n };\r\n\r\n @action\r\n async getProfile() {\r\n this.isLoading = true;\r\n this.user = await fetchJson('/webapi/profile');\r\n this.isLoading = false;\r\n }\r\n\r\n @action \r\n async saveProfile() {\r\n await fetchJson('/webapi/profile', { method: \"POST\", data: { isMetres: this.user.isMetres }});\r\n var globalAuth = globalState.auth;\r\n globalAuth.user.isMetres = this.user.isMetres;\r\n globalState.setAuth(globalAuth);\r\n }\r\n\r\n @action\r\n setProfile(data: Pick) {\r\n this.user = Object.assign(this.user, data);\r\n }\r\n}\r\n\r\nexport const profileState = new ProfileState();","import * as React from 'react';\r\nimport { profileState } from '../Stores/ProfileState';\r\nimport { observer } from 'mobx-react';\r\n\r\n@observer\r\nexport class Profile extends React.Component {\r\n constructor(props: any) {\r\n super(props);\r\n profileState.getProfile();\r\n }\r\n\r\n render() {\r\n const form =
{ e.preventDefault(); profileState.saveProfile(); }}>\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
Metres?
\r\n
\r\n
\r\n profileState.setProfile({ isMetres: e.target.checked })} />\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
;\r\n\r\n return (\r\n profileState.isLoading ?

Loading...

:\r\n
\r\n
\r\n

Profile

\r\n
\r\n
\r\n {form}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport './SignIn.css';\r\n\r\nfunction SignIn() {\r\n return (\r\n
\r\n
\r\n
\r\n Signin\r\n
\r\n \r\n
\r\n This website is not affiliated with discord inc.\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport { SignIn }","import * as React from 'react';\r\nimport { Link } from './Link';\r\nimport { links } from '../Stores/RouteState';\r\nimport { sessionState, Session } from '../Stores/SessionState';\r\nimport { observer } from 'mobx-react';\r\nimport { formatDate, DateType } from '../Utils';\r\nimport { If } from 'react-if';\r\n\r\nconst SessionEdit = observer(() => {\r\n\r\n let submit = (e: React.FormEvent) => {\r\n e.preventDefault();\r\n sessionState.createSessionSubmitted();\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

{sessionState.editSessionId === '' ? 'Create' : 'Edit'} Session

\r\n
\r\n
\r\n
submit(e)}>\r\n
\r\n \r\n sessionState.setNewSession({ name: e.target.value })} />\r\n Describe your session.\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n {' '}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n});\r\n\r\n@observer\r\nexport class Sessions extends React.Component {\r\n constructor(props: any) {\r\n super(props);\r\n sessionState.getSessions();\r\n }\r\n\r\n static renderSessions(sessions: Session[]) {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n

Sessions

\r\n

These are your sessions.

\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {sessions.map(session =>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n
DateSession IdNameShotsIs Private?
{formatDate(session.startedAt, DateType.Date)}{session.sessionId}{session.name}{session.shotCount}{session.isPrivate ? \"Yes\" : \"No\"}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {sessionState.showCreateSession && }\r\n
\r\n );\r\n }\r\n\r\n render() {\r\n let contents = sessionState.isLoading\r\n ?

Loading...

\r\n : Sessions.renderSessions(sessionState.orderedSessions);\r\n\r\n return (\r\n
\r\n {contents}\r\n
\r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\n\r\nfunction selectInputText(element: HTMLInputElement) {\r\n element.setSelectionRange(0, element.value.length);\r\n}\r\n\r\ninterface Props {\r\n text: string,\r\n paramName: string,\r\n change: (data: { [id: string]: string }) => void;\r\n placeholder?: string,\r\n className?: string,\r\n activeClassName?: string,\r\n minLength?: number,\r\n maxLength?: number,\r\n validate?: (text: string) => boolean,\r\n style?: object,\r\n editingElement?: string,\r\n staticElement?: string,\r\n tabIndex?: number,\r\n isDisabled?: boolean,\r\n editing?: boolean,\r\n stopPropagation?: boolean,\r\n title?: string\r\n}\r\n\r\ninterface State {\r\n editing?: boolean;\r\n text: string;\r\n minLength?: number;\r\n maxLength?: number;\r\n}\r\n\r\nclass InlineEdit extends React.Component {\r\n\r\n static defaultProps = {\r\n minLength: 1,\r\n maxLength: 256,\r\n editingElement: 'input',\r\n staticElement: 'span',\r\n tabIndex: 0,\r\n isDisabled: false,\r\n editing: false\r\n };\r\n\r\n constructor(props: any) {\r\n super(props);\r\n this.state = {\r\n editing: this.props.editing,\r\n text: this.props.text,\r\n minLength: this.props.minLength,\r\n maxLength: this.props.maxLength\r\n };\r\n }\r\n\r\n componentWillMount() {\r\n this.isInputValid = this.props.validate || this.isInputValid;\r\n }\r\n\r\n componentWillReceiveProps(nextProps: Props) {\r\n const isTextChanged = (nextProps.text !== this.props.text);\r\n const isEditingChanged = (nextProps.editing !== this.props.editing);\r\n let nextState: Partial = {};\r\n if (isTextChanged) {\r\n nextState.text = nextProps.text;\r\n }\r\n if (isEditingChanged) {\r\n nextState.editing = nextProps.editing;\r\n }\r\n if (isTextChanged || isEditingChanged) {\r\n this.setState(nextState as State);\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps: Props, prevState: Props) {\r\n let inputElem = ReactDOM.findDOMNode(this.refs.input);\r\n if (this.state.editing && !prevState.editing) {\r\n (inputElem as HTMLInputElement).focus();\r\n selectInputText(inputElem as HTMLInputElement);\r\n } else if (this.state.editing && prevProps.text != this.props.text) {\r\n this.finishEditing();\r\n }\r\n }\r\n\r\n startEditing = (e: React.MouseEvent) => {\r\n if (this.props.stopPropagation) {\r\n e.stopPropagation()\r\n }\r\n this.setState({ editing: true, text: this.props.text });\r\n };\r\n\r\n finishEditing = () => {\r\n if (this.isInputValid(this.state.text) && this.props.text != this.state.text) {\r\n this.commitEditing();\r\n } else if (this.props.text === this.state.text || !this.isInputValid(this.state.text)) {\r\n this.cancelEditing();\r\n }\r\n };\r\n\r\n cancelEditing = () => {\r\n this.setState({ editing: false, text: this.props.text });\r\n };\r\n\r\n commitEditing = () => {\r\n this.setState({ editing: false, text: this.state.text });\r\n let newProp = {};\r\n newProp[this.props.paramName] = this.state.text;\r\n this.props.change(newProp);\r\n };\r\n\r\n clickWhenEditing = (e: React.MouseEvent) => {\r\n if (this.props.stopPropagation) {\r\n e.stopPropagation();\r\n }\r\n };\r\n\r\n isInputValid = (text: string) => {\r\n return (text.length >= (this.state.minLength || InlineEdit.defaultProps.minLength) && text.length <= (this.state.maxLength || InlineEdit.defaultProps.maxLength));\r\n };\r\n\r\n keyDown = (event: React.KeyboardEvent) => {\r\n if (event.keyCode === 13) {\r\n this.finishEditing();\r\n } else if (event.keyCode === 27) {\r\n this.cancelEditing();\r\n }\r\n };\r\n\r\n textChanged = (event: React.ChangeEvent) => {\r\n this.setState({\r\n text: event.target.value.trim()\r\n });\r\n };\r\n\r\n render() {\r\n if (this.props.isDisabled) {\r\n const Element = this.props.staticElement || InlineEdit.defaultProps.staticElement as any;\r\n return \r\n {this.state.text || this.props.placeholder}\r\n ;\r\n } else if (!this.state.editing) {\r\n const Element = this.props.staticElement || InlineEdit.defaultProps.staticElement as any;\r\n return \r\n {this.state.text || this.props.placeholder}\r\n ;\r\n } else {\r\n const Element = this.props.editingElement || InlineEdit.defaultProps.editingElement as any;\r\n return ;\r\n }\r\n }\r\n}\r\n\r\nexport { InlineEdit }","import * as React from 'react';\r\nimport { sessionState } from '../Stores/SessionState';\r\nimport { observer } from 'mobx-react';\r\nimport { SessionShotsState, AutoSelectOnShot, SpinNumbers } from '../Stores/SessionShotState';\r\nimport { Modal, ModalHeader, ModalBody } from 'reactstrap';\r\n\r\ninterface Props {\r\n sessionId: string\r\n}\r\n\r\n@observer\r\nexport class ShotSettings extends React.Component {\r\n store: SessionShotsState;\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.store = sessionState.get(props.sessionId)\r\n }\r\n\r\n render() {\r\n const form =
{ e.preventDefault(); }}>\r\n
\r\n
Display in Metres?
\r\n
\r\n
\r\n this.store.setSetting({ isMetres: e.target.checked })} />\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
Show Club Data on First shot?
\r\n
\r\n
\r\n this.store.setSetting({ showClubDataOnFirst: e.target.checked })} />\r\n \r\n
\r\n
\r\n
\r\n
\r\n
Show Dispersion Circles?
\r\n
\r\n
\r\n this.store.setSetting({ showDispersionCircles: e.target.checked })} />\r\n \r\n
\r\n
\r\n
\r\n {this.store.settings.showDispersionCircles &&\r\n
\r\n
Show Dispersion Circles By Club?
\r\n
\r\n
\r\n this.store.setSetting({ showDispersionCirclesByClub: e.target.checked })} />\r\n \r\n
\r\n
\r\n
}\r\n
\r\n
Spin Numbers
\r\n
\r\n \r\n
\r\n
\r\n
;\r\n\r\n return (\r\n this.store.toggleSettings()} >\r\n \r\n Settings\r\n \r\n {form}\r\n \r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { sessionState } from '../Stores/SessionState';\r\nimport { observer } from 'mobx-react';\r\nimport { SessionShotsState, AutoSelectOnShot } from '../Stores/SessionShotState';\r\nimport { Modal, ModalHeader, ModalBody } from 'reactstrap';\r\nimport { avg } from '../Utils';\r\nimport { If, Then } from 'react-if';\r\n\r\ninterface Props {\r\n sessionId: string\r\n}\r\n\r\n@observer\r\nexport class ShotVisual extends React.Component {\r\n store: SessionShotsState;\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.store = sessionState.get(props.sessionId)\r\n }\r\n\r\n render() {\r\n var shots = this.store.selectedShotClubData;\r\n var lie = shots.length > 0 ? avg(shots.map(x => x.shotData.clubData.lie)) : 0;\r\n\r\n // var shots = [\r\n // { shotData: { clubData: { horizontalImpact: 50, verticalImpact: 23 }}},\r\n // { shotData: { clubData: { horizontalImpact: -50, verticalImpact: -23 }}},\r\n // { shotData: { clubData: { horizontalImpact: -50, verticalImpact: 23 }}},\r\n // { shotData: { clubData: { horizontalImpact: 50, verticalImpact: -23 }}},\r\n // ] as any[];\r\n\r\n // shots = [\r\n // { club: '8i', shotData: { clubData: { horizontalImpact: 25, verticalImpact: 20 }}},\r\n // { club: '8i', shotData: { clubData: { horizontalImpact: -25, verticalImpact: -20 }}},\r\n // { club: '8i', shotData: { clubData: { horizontalImpact: -25, verticalImpact: 29 }}},\r\n // { club: '8i', shotData: { clubData: { horizontalImpact: 25, verticalImpact: -20 }}},\r\n // ] as any[];\r\n\r\n const isWood = (club: string | null) => {\r\n if (club == null)\r\n return true;\r\n return /\\b[^0-9]?[0-9][wW]/.test(club) || club.toLowerCase().indexOf('dr') >= 0;\r\n }\r\n\r\n var allSelectedShots = this.store.shotsInReverseOrder.filter(x => this.store.selectedShots[x]).map(x => this.store.shots[x]);\r\n var isWoodShot = allSelectedShots.length > 0 ? isWood(allSelectedShots[0].club) : true;\r\n\r\n var imageOffsetX = isWoodShot ? 50 : 102;\r\n var offsetX = 50;\r\n var offsetY = isWoodShot ? 0 : 12;\r\n var lineOffset = 80;\r\n var baseCenterX = 240;\r\n var baseCenterY = 226;\r\n var centerX = offsetX + baseCenterX;\r\n var centerY = offsetY + baseCenterY;\r\n var factor = isWoodShot ? 3.4 : 4.1;\r\n var image = `/images/${isWoodShot ? 'driver' : 'iron'}-front-white.png`;\r\n\r\n const renderStrike = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {shots.map((x, i) => {\r\n let last = shots.length - 1;\r\n let opacity = 0.8 - ((i >= last - 4 ? last - i : 4) * 0.15);\r\n let innerFill = this.store.clubColors[x.club];\r\n\r\n return (\r\n \r\n \r\n {i >= last - 4 && }\r\n )\r\n })}\r\n \r\n \r\n );\r\n\r\n const content =
\r\n
\r\n
\r\n {renderStrike()}\r\n 0}>\r\n {() => (\r\n
\r\n Lie: {shots[shots.length - 1].shotData.clubData.lie}° \r\n Horizontal Impact: {shots[shots.length - 1].shotData.clubData.horizontalImpact}mm \r\n Vertical Impact: {shots[shots.length - 1].shotData.clubData.verticalImpact}mm\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
;\r\n\r\n return (\r\n this.store.toggleVisual()} >\r\n \r\n Shot Visual\r\n \r\n {content}\r\n \r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { observer } from \"mobx-react\";\r\nimport * as signalR from '@aspnet/signalr';\r\nimport './SessionShots.css';\r\nimport classNames from 'classnames';\r\nimport { InlineEdit } from './InlineEdit';\r\nimport { GroupedBy, Shot, ClubData, BallData, SessionShotsState, SpinNumbers } from '../Stores/SessionShotState';\r\nimport { sessionState } from '../Stores/SessionState';\r\nimport { globalState } from '../Stores/GlobalState';\r\nimport { routeState } from '../Stores/RouteState';\r\nimport { formatDate, DateType, avg, group, orderedGroup, arrayMath } from '../Utils';\r\nimport { ShotSettings } from './ShotSettings';\r\nimport { ShotVisual } from './ShotVisual';\r\nimport math from 'mathjs';\r\nimport { BallFlight } from './BallFlight';\r\n\r\nconst formatNum = (num: number, precision?: number) => {\r\n if (num === null)\r\n return '';\r\n var result = math.format(num, { notation: 'fixed', precision: precision === undefined ? 1 : precision });\r\n return result;\r\n}\r\n\r\n@observer\r\nexport class SessionShots extends React.Component {\r\n connection: signalR.HubConnection;\r\n store: SessionShotsState;\r\n\r\n constructor(props: any) {\r\n super(props);\r\n\r\n this.store = sessionState.get(routeState.sessionId);\r\n\r\n this.connection = new signalR.HubConnectionBuilder()\r\n .withUrl(\"https://schogolf.net/api/liveshot\")\r\n //.configureLogging(signalR.LogLevel.Information)\r\n .build();\r\n\r\n this.connection.on(\"Shot\", (shot) => {\r\n this.store.onShot(shot);\r\n });\r\n\r\n this.start().then(x => {\r\n this.connection.invoke('Register', routeState.sessionId);\r\n this.store.setLiveConnection();\r\n });\r\n\r\n this.connection.onclose(async () => {\r\n await this.start();\r\n });\r\n }\r\n\r\n async start() {\r\n try {\r\n await this.connection.start();\r\n } catch (err) {\r\n console.log(err);\r\n setTimeout(() => this.start(), 5000);\r\n }\r\n }\r\n\r\n distinct(list: T[]) {\r\n function onlyUnique(value: T, index: number, self: any) {\r\n return self.indexOf(value) === index;\r\n }\r\n return list.filter(onlyUnique);\r\n }\r\n\r\n componentWillUnmount() {\r\n this.connection.stop();\r\n }\r\n\r\n renderShots(shots: Shot[]) {\r\n\r\n let groupedShots: JSX.Element[];\r\n if (this.store.groupedByClub === GroupedBy.Grouped || this.store.groupedByClub === GroupedBy.ByClub) {\r\n let filteredShots = this.store.showClubData ? shots.filter(x => x.shotData.clubData.clubSpeed > 0) : shots;\r\n let groupSeq = this.store.groupedByClub === GroupedBy.ByClub ? group(filteredShots, x => x.club || '') : orderedGroup(filteredShots, x => x.club);\r\n groupedShots = groupSeq.map((x, j) => {\r\n let selectedShotsInGroup = x.values.filter(x => Object.keys(this.store.selectedShots).findIndex(z => z === x.id && this.store.selectedShots[z]) >= 0).map(x => x.id);\r\n return (\r\n \r\n {x.values.map((y, i) => this.renderShot(y, i, x.values, selectedShotsInGroup.length))}\r\n {this.store.showClubData\r\n ? \r\n : }\r\n \r\n );\r\n });\r\n }\r\n else if (this.store.groupedByClub === GroupedBy.Summary) {\r\n let filteredShots = this.store.showClubData ? shots.filter(x => x.shotData.clubData.clubSpeed > 0) : shots;\r\n let groupSeq = group(filteredShots, x => x.club || '');\r\n groupedShots = groupSeq.map((x, j) => {\r\n let selectedShotsInGroup = x.values.filter(x => Object.keys(this.store.selectedShots).findIndex(z => z === x.id && this.store.selectedShots[z]) >= 0).map(x => x.id);\r\n return (\r\n \r\n {this.store.showClubData\r\n ? \r\n : \r\n }\r\n \r\n \r\n z.club == x.key)}\r\n carryDispersion={this.store.carryDispersion(this.store.summaryTracerPoints.filter(z => z.club == x.key))}\r\n clubColors={this.store.clubColors}\r\n displayDispersionCircles={this.store.settings.showDispersionCircles}\r\n displayInMetres={this.store.displayInMetres} />\r\n \r\n \r\n \r\n );\r\n });\r\n }\r\n else {\r\n let selectedShots = Object.keys(this.store.selectedShots).filter(x => this.store.selectedShots[x]).map(x => this.store.shots[x].id);\r\n groupedShots = shots\r\n .map((shot, i) => this.renderShot(shot, i, shots, selectedShots.length))\r\n .concat(this.store.showClubData\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 {this.store.groupedByClub != GroupedBy.Summary && }\r\n {this.store.showClubData ? this.renderClubDataSpecificHeaders() : this.renderBallDataSpecificHeaders()}\r\n \r\n \r\n \r\n {groupedShots}\r\n \r\n
Shot{this.store.groupedByClub == GroupedBy.Summary ? 's' : ''}ClubDate
\r\n
\r\n );\r\n }\r\n\r\n renderBallDataSpecificHeaders() {\r\n var headers = (\r\n \r\n Ball Speed\r\n Launch Ang\r\n Launch Dir\r\n {this.store.settings.spinNumbers == SpinNumbers.SideBack ? \"Back Spin\" : \"Total Spin\"}\r\n {this.store.settings.spinNumbers == SpinNumbers.SideBack ? \"Side Spin\" : \"Spin Axis\"}\r\n Offline {this.store.displayInMetres ? '(m)' : '(y)'}\r\n Height {this.store.displayInMetres ? '(m)' : '(y)'}\r\n Carry {this.store.displayInMetres ? '(m)' : '(y)'}\r\n  \r\n \r\n );\r\n return headers;\r\n }\r\n\r\n renderBallDataSpecificRow(shot: Shot) {\r\n\r\n let copy = () => {\r\n const el = document.createElement('textarea');\r\n el.value = `https://schogolf.net/sessions/${this.store.sessionId}/${shot.id}`;\r\n document.body.appendChild(el);\r\n el.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(el);\r\n };\r\n\r\n let premium = globalState.auth.user.isPremium;\r\n let awesome = (win: boolean) => classNames({\r\n 'flashit training-good': win\r\n });\r\n\r\n const isSideBack = this.store.settings.spinNumbers == SpinNumbers.SideBack;\r\n let backTotalSpin = isSideBack ? formatNum(shot.shotData.ballData.backSpin, 0) : formatNum(shot.shotData.ballData.totalSpin, 0);\r\n let sideAxisSpin = isSideBack ? formatNum(shot.shotData.ballData.sideSpin, 0) : formatNum(shot.shotData.ballData.spinAxis, 1);\r\n let degSymbol = isSideBack ? null : °\r\n\r\n let rows = (\r\n \r\n {formatNum(shot.shotData.ballData.ballSpeed)}\r\n {formatNum(shot.shotData.ballData.launchAngle)}°\r\n {formatNum(shot.shotData.ballData.launchDirection)}°\r\n {backTotalSpin}\r\n {sideAxisSpin}{degSymbol}\r\n \r\n \r\n {formatNum(this.store.displayInMetres ? shot.shotData.ballData.offlineMts : shot.shotData.ballData.offline)}\r\n \r\n \r\n {formatNum(this.store.displayInMetres ? shot.shotData.ballData.peakHeightMts : shot.shotData.ballData.peakHeight)}\r\n {formatNum(this.store.displayInMetres ? shot.shotData.ballData.carryMts : shot.shotData.ballData.carry)}\r\n \r\n
\r\n {shot.shotData.clubData.clubSpeed > 0\r\n && }\r\n \r\n \r\n
\r\n \r\n
\r\n );\r\n\r\n return rows;\r\n }\r\n\r\n\r\n\r\n setSelected(shots: Shot[], selected?: boolean) {\r\n this.store.setSelected(shots, selected);\r\n }\r\n\r\n toggleGroupSelection(shotsInGroup: Shot[], selectedShotsInGroup: number) {\r\n if (shotsInGroup.length / 2 >= selectedShotsInGroup) {\r\n this.setSelected(shotsInGroup, true);\r\n }\r\n else {\r\n this.setSelected(shotsInGroup, false);\r\n }\r\n }\r\n\r\n //https://stackoverflow.com/a/44038181\r\n renderShot(shot: Shot, i: number, shotsInGroup: Shot[], selectedShotsInGroup: number) {\r\n var isMisread = shot.shotData.ballData.ballSpeed === 0;\r\n var displayExtra = (!isMisread\r\n && (shot.shotData.clubData.clubSpeed > 0))\r\n && this.store.openCloseStates[shot.id]\r\n && !this.store.showClubData;\r\n\r\n var openCloseStatesInGroup = this.store.showClubData ? 0 : Object.keys(this.store.openCloseStates).filter(x => this.store.openCloseStates[x] && shotsInGroup.map(z => z.id).findIndex(z => z === x) >= 0).length;\r\n var classes = classNames({\r\n 'misread': isMisread,\r\n 'notSelected': selectedShotsInGroup > 0 && !this.store.selectedShots[shot.id]\r\n });\r\n\r\n var styles = {};\r\n if (this.store.selectedShots[shot.id]) {\r\n styles['borderLeft'] = `2px solid ${this.store.clubColors[shot.club]}`\r\n }\r\n\r\n var ratingMap = {\r\n 1: 'var(--success)',\r\n 2: 'var(--warning)',\r\n 3: 'var(--danger)'\r\n };\r\n\r\n return \r\n this.store.setHoverShot(shot.id)} onMouseLeave={() => this.store.setUnHoverShot()}>\r\n {i === 0 && this.toggleGroupSelection(shotsInGroup, selectedShotsInGroup)}>}\r\n \r\n {!shot.archived &&\r\n this.setSelected([shot])} />\r\n }\r\n \r\n {shot.rating > 0 && }\r\n {shotsInGroup.length - i}\r\n \r\n this.updateShot(shot.id, d['club'])} style={{ display: 'inline-block', width: '70px', minHeight: '1em' }} />\r\n \r\n {formatDate(shot.date, DateType.Time)}\r\n {this.store.showClubData ? this.renderClubDataSpecificRow(shot) : this.renderBallDataSpecificRow(shot)}\r\n \r\n {displayExtra && this.renderInlineClubData(shot)}\r\n ;\r\n }\r\n\r\n updateShot(shotId: string, value: string) {\r\n this.store.updateShot(shotId, value);\r\n }\r\n\r\n renderClubDataSpecificRow(shot: Shot) {\r\n var hasData = shot.shotData.clubData.clubSpeed;\r\n var rows = (\r\n \r\n {formatNum(shot.shotData.clubData.clubSpeed)}\r\n {hasData && formatNum(shot.shotData.smashFactor, 2)}\r\n {formatNum(shot.shotData.clubData.angleOfAttack)}{shot.shotData.clubData.angleOfAttack ? ° : ''}\r\n {formatNum(shot.shotData.clubData.clubPath)}{shot.shotData.clubData.clubPath ? ° : ''}\r\n {hasData && formatNum(shot.shotData.clubData.faceToPath)}{shot.shotData.clubData.faceToPath ? ° : ''}\r\n {hasData && formatNum(shot.shotData.clubData.faceToTarget)}{shot.shotData.clubData.faceToTarget ? ° : ''}\r\n {formatNum(shot.shotData.clubData.lie)}{shot.shotData.clubData.lie ? ° : ''}\r\n {formatNum(shot.shotData.clubData.loft)}{shot.shotData.clubData.loft ? ° : ''}\r\n {formatNum(shot.shotData.clubData.closingRate, 0)}\r\n {formatNum(shot.shotData.clubData.horizontalImpact)}\r\n {formatNum(shot.shotData.clubData.verticalImpact)}\r\n \r\n );\r\n return rows;\r\n }\r\n\r\n renderClubDataRow(shot: Shot) {\r\n return (\r\n \r\n {this.renderClubDataSpecificRow(shot)}\r\n \r\n );\r\n }\r\n\r\n renderClubDataSpecificHeaders() {\r\n var headers = (\r\n \r\n Club Speed\r\n Smash Factor\r\n Angle of Attack\r\n Club Path\r\n Face to Path\r\n Face to Target\r\n Club Lie\r\n Dynamic Loft\r\n Closing Rate\r\n H Impact\r\n V Impact\r\n \r\n );\r\n return headers;\r\n }\r\n\r\n renderClubDataHeaders() {\r\n return (\r\n \r\n {this.renderClubDataSpecificHeaders()}\r\n \r\n );\r\n }\r\n\r\n renderInlineClubData(shot: Shot) {\r\n return \r\n \r\n
\r\n \r\n \r\n {this.renderClubDataHeaders()}\r\n \r\n \r\n {this.renderClubDataRow(shot)}\r\n \r\n
\r\n
\r\n \r\n ;\r\n }\r\n\r\n toggleGroupBy(grouped: GroupedBy) {\r\n this.store.toggleGroupBy(grouped);\r\n }\r\n\r\n toggleDataType(clubData: boolean) {\r\n this.store.toggleDataType(clubData);\r\n }\r\n\r\n renderFilters() {\r\n return (\r\n
\r\n
\r\n
\r\n this.store.setFilters({ showArchived: e.target.checked })} />\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.store.loading\r\n ?

Loading...

\r\n : this.renderShots(this.store.shotsInReverseOrder.map(x => this.store.shots[x]));\r\n\r\n let labelClasses = (showClubData: boolean) => classNames({\r\n 'btn btn-primary': true,\r\n 'active': showClubData === this.store.showClubData\r\n });\r\n\r\n let labelClassesGroups = (grouped: GroupedBy) => classNames({\r\n 'btn btn-primary': true,\r\n 'active': grouped === this.store.groupedByClub\r\n });\r\n\r\n let tracerClasses = () => classNames({\r\n 'btn btn-primary': true,\r\n 'active': globalState.isTracerActive\r\n });\r\n\r\n let settingsClasses = () => classNames({\r\n 'btn btn-primary': true,\r\n 'active': this.store.isSettingsOpen\r\n });\r\n\r\n let visualClasses = () => classNames({\r\n 'btn btn-primary': true,\r\n 'active': this.store.isVisualOpen\r\n });\r\n\r\n let filterClasses = () => classNames({\r\n 'btn btn-primary': true,\r\n 'active': this.store.isFiltersOpen\r\n });\r\n\r\n var name = (this.store.sessionName && (this.store.sessionName + ' - ' + this.store.sessionId)) || this.store.sessionId;\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n
\r\n {this.store.connectedState.text}\r\n

\r\n Shots for Session: {name}\r\n

\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n {globalState.auth.user.isPremium &&\r\n \r\n }\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n {this.store.isFiltersOpen && this.renderFilters()}\r\n {contents}\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\ninterface BallAvgsData {\r\n shots: Shot[],\r\n selectedShotsInGroup: string[],\r\n displayInMetres: boolean,\r\n spinNumbers: SpinNumbers,\r\n isSummary?: boolean\r\n}\r\n\r\nfunction BallAvgs({ shots, selectedShotsInGroup, displayInMetres, spinNumbers, isSummary }: BallAvgsData) {\r\n\r\n let filteredShots = shots;\r\n if (selectedShotsInGroup.length > 0) {\r\n filteredShots = filteredShots.filter(x => selectedShotsInGroup.findIndex(z => z === x.id) >= 0);\r\n }\r\n let ballData = filteredShots.map(x => x.shotData.ballData).filter(x => x.ballSpeed > 0);\r\n let roundToTwo = (num: number) => +(Math.round(num + \"e+2\" as any) + \"e-2\");\r\n let avgs: BallData = {\r\n carry: roundToTwo(avg(ballData.map(x => x.carry))),\r\n carryMts: roundToTwo(avg(ballData.map(x => x.carryMts))),\r\n ballSpeed: roundToTwo(avg(ballData.map(x => x.ballSpeed))),\r\n launchAngle: roundToTwo(avg(ballData.map(x => x.launchAngle))),\r\n launchDirection: roundToTwo(avg(ballData.map(x => x.launchDirection))),\r\n backSpin: roundToTwo(avg(ballData.map(x => x.backSpin))),\r\n sideSpin: roundToTwo(avg(ballData.map(x => x.sideSpin))),\r\n peakHeight: roundToTwo(avg(ballData.map(x => x.peakHeight))),\r\n peakHeightMts: roundToTwo(avg(ballData.map(x => x.peakHeightMts))),\r\n offline: roundToTwo(avg(ballData.map(x => x.offline))),\r\n offlineMts: roundToTwo(avg(ballData.map(x => x.offlineMts))),\r\n spinAxis: roundToTwo(avg(ballData.map(x => x.spinAxis))),\r\n totalSpin: roundToTwo(avg(ballData.map(x => x.totalSpin)))\r\n };\r\n\r\n const subFontWeight = { fontWeight: 100 };\r\n\r\n //offline\r\n const leftOffline = ballData.filter(x => x.offline < 0);\r\n const rightOffline = ballData.filter(x => x.offline > 0);\r\n const offlineL = {formatNum(-roundToTwo(avg(leftOffline.map(x => x.offline))))}L ({leftOffline.length});\r\n const offlineR = {formatNum(roundToTwo(avg(rightOffline.map(x => x.offline))))}R ({rightOffline.length});\r\n const offlineLMts = {formatNum(-roundToTwo(avg(leftOffline.map(x => x.offlineMts))))}L ({leftOffline.length});\r\n const offlineRMts = {formatNum(roundToTwo(avg(rightOffline.map(x => x.offlineMts))))}R ({rightOffline.length});\r\n\r\n //height\r\n const heightRange = {formatNum(ballData.length > 0 ? Math.min(...ballData.map(x => x.peakHeight)) : 0)} - {formatNum(Math.max(...[0].concat(ballData.map(x => x.peakHeight))))};\r\n const heightRangeMts = {formatNum(ballData.length > 0 ? Math.min(...ballData.map(x => x.peakHeightMts)) : 0)} - {formatNum(Math.max(...[0].concat(ballData.map(x => x.peakHeightMts))))};\r\n\r\n //carry\r\n const carryRange = {formatNum(ballData.length > 0 ? Math.min(...ballData.map(x => x.carry)) : 0)} - {formatNum(Math.max(...[0].concat(ballData.map(x => x.carry))))};\r\n const carryRangeMts = {formatNum(ballData.length > 0 ? Math.min(...ballData.map(x => x.carryMts)) : 0)} - {formatNum(Math.max(...[0].concat(ballData.map(x => x.carryMts))))};\r\n\r\n const offlineDisp = globalState.auth.user.isPremium\r\n ? \r\n {displayInMetres ? offlineLMts : offlineL}\r\n
\r\n {displayInMetres ? offlineRMts : offlineR}\r\n
\r\n : formatNum(displayInMetres ? avgs.offlineMts : avgs.offline);\r\n\r\n const heightDisp = globalState.auth.user.isPremium\r\n ? {formatNum(displayInMetres ? avgs.peakHeightMts : avgs.peakHeight)}\r\n
\r\n {displayInMetres ? heightRangeMts : heightRange}\r\n
\r\n : formatNum(displayInMetres ? avgs.peakHeightMts : avgs.peakHeight)\r\n\r\n const carryDisp = globalState.auth.user.isPremium\r\n ? \r\n {formatNum(displayInMetres ? avgs.carryMts : avgs.carry)}\r\n
\r\n {displayInMetres ? carryRangeMts : carryRange}\r\n
\r\n : formatNum(displayInMetres ? avgs.carryMts : avgs.carry)\r\n\r\n const isSideBack = spinNumbers == SpinNumbers.SideBack;\r\n const backTotalAvgSpin = isSideBack ? formatNum(avgs.backSpin, 0) : formatNum(avgs.totalSpin, 0);\r\n const sideSpinAxisAvg = isSideBack ? formatNum(avgs.sideSpin, 0) : formatNum(avgs.spinAxis, 1);\r\n const degSymbol = isSideBack ? null : °\r\n\r\n const shotClub = isSummary\r\n ? \r\n \r\n {shots.length}\r\n {shots[0].club}\r\n \r\n : \r\n\r\n const summaryClasses = classNames({\r\n 'avgs': true,\r\n 'summary': isSummary\r\n });\r\n\r\n return (\r\n \r\n {shotClub}\r\n {formatNum(avgs.ballSpeed)}\r\n {formatNum(avgs.launchAngle)}°\r\n {formatNum(avgs.launchDirection)}°\r\n {backTotalAvgSpin}\r\n {sideSpinAxisAvg}{degSymbol}\r\n \r\n {offlineDisp}\r\n \r\n \r\n {heightDisp}\r\n \r\n \r\n {carryDisp}\r\n \r\n \r\n \r\n );\r\n}\r\n\r\ninterface ClubAvgsData {\r\n shots: Shot[],\r\n selectedShotsInGroup: string[],\r\n isSummary?: boolean\r\n}\r\n\r\nfunction ClubAvgs({ shots, selectedShotsInGroup, isSummary }: ClubAvgsData) {\r\n let filteredShots = shots;\r\n if (selectedShotsInGroup.length > 0) {\r\n filteredShots = filteredShots.filter(x => selectedShotsInGroup.findIndex(z => z === x.id) >= 0);\r\n }\r\n let clubData = filteredShots.filter(x => x.shotData.ballData.ballSpeed > 0 && x.shotData.clubData.clubSpeed).map(x => x.shotData.clubData);\r\n let smash = filteredShots.map(x => x.shotData.smashFactor);\r\n let calcAvg = (list: T[], selector: (item: T) => number) => avg(list.map(x => selector(x)));\r\n let roundToTwo = (num: number) => math.round(num, 2) as number;\r\n let avgs: ClubData = {\r\n clubSpeed: roundToTwo(calcAvg(clubData, x => x.clubSpeed)),\r\n angleOfAttack: roundToTwo(calcAvg(clubData, x => x.angleOfAttack)),\r\n loft: roundToTwo(calcAvg(clubData, x => x.loft)),\r\n clubPath: roundToTwo(calcAvg(clubData, x => x.clubPath)),\r\n faceToPath: roundToTwo(calcAvg(clubData, x => x.faceToPath)),\r\n faceToTarget: roundToTwo(calcAvg(clubData, x => x.faceToTarget)),\r\n closingRate: roundToTwo(calcAvg(clubData, x => x.closingRate)),\r\n lie: roundToTwo(calcAvg(clubData, x => x.lie)),\r\n horizontalImpact: roundToTwo(calcAvg(clubData, x => x.horizontalImpact)),\r\n verticalImpact: roundToTwo(calcAvg(clubData, x => x.verticalImpact)),\r\n };\r\n let smashFactor = roundToTwo(calcAvg(smash, x => x));\r\n\r\n const shotClub = isSummary\r\n ? \r\n \r\n {shots.length}\r\n {shots[0].club}\r\n \r\n : \r\n\r\n const summaryClasses = classNames({\r\n 'avgs': true,\r\n 'summary': isSummary\r\n });\r\n\r\n return (\r\n \r\n {shotClub}\r\n {formatNum(avgs.clubSpeed)}\r\n {formatNum(smashFactor, 2)}\r\n {formatNum(avgs.angleOfAttack)}°\r\n {formatNum(avgs.clubPath)}°\r\n {formatNum(avgs.faceToPath)}°\r\n {formatNum(avgs.faceToTarget)}°\r\n {formatNum(avgs.lie)}{avgs.lie ? ° : ''}\r\n {formatNum(avgs.loft)}{avgs.loft ? ° : ''}\r\n {formatNum(avgs.closingRate, 0) || ''}\r\n {formatNum(avgs.horizontalImpact) || ''}\r\n {formatNum(avgs.verticalImpact) || ''}\r\n \r\n );\r\n}","import * as React from 'react';\r\nimport { observer } from 'mobx-react';\r\nimport { Link } from './Link';\r\n\r\n@observer\r\nexport class Help extends React.Component {\r\n constructor(props: any) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n
\r\n

Help

\r\n
\r\n
\r\n Here are all the answers to all your swing problems... or its just some information to help you start figuring out how many problems you do have.\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Schogolf Client

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

Getting started

\r\n
    \r\n
  1. Download the client from here
  2. \r\n
  3. Unzip it to a location of your choice
  4. \r\n
  5. Run the application
  6. \r\n
  7. Open the settings tab
  8. \r\n
  9. Go and grab your API key from the Profile menu
  10. \r\n
  11. Paste it into the API key on the settings tab
  12. \r\n
  13. Select OGT interface (for use with JNPG) or COM port for direct integration
  14. \r\n
  15. Select metres or yards
  16. \r\n
  17. Go back to the main tab and select to create a session
  18. \r\n
  19. Enter a name for the session and click Create
  20. \r\n
  21. If you have chosen OGT interface its ready and waiting for connections, (Note: Windows may ask you to allow connections. If you are on the same network private is all you need) otherwise click Connect. Next time you start Schogolf OGT will wait for connections on startup if chosen as the connection type
  22. \r\n
  23. If you are using the OGT interface integration then in the interface, goto the settings tab and click Connect
  24. \r\n
  25. The Schogolf application should now say connected
  26. \r\n
  27. Start Swinging
  28. \r\n
  29. To open the overlay click Open Overlay
  30. \r\n
\r\n

Connecting to an existing session

\r\n
    \r\n
  1. Once you have created a session you may want to add more shots, so click Existing Session
  2. \r\n
  3. Enter the Session Id in if you know it or click Get Latest
  4. \r\n
  5. The session can then be open by clicking Open Session
  6. \r\n
  7. Now swing harder
  8. \r\n
\r\n

Overlay

\r\n
    \r\n
  • Choose the club to be recorded for the current shot. Note: free text is supported
  • \r\n
  • If connecting via OGT interface then selecting the OGT Club in the club dropdown will record the JNPG club
  • \r\n
  • Double clicking the top bar will dock the window to the left at the current height
  • \r\n
\r\n

Settings

\r\n
    \r\n
  • COM port dropdown is not required when using OGT Interface integration
  • \r\n
  • Choose between metres and yards for the overlay display
  • \r\n
\r\n

USB Connection

\r\n
    \r\n
  • Firstly an open driver needs to be installed for the GC2
  • \r\n
  • Download Zadig here: https://zadig.akeo.ie/
  • \r\n
  • Open Zadig and find your GC2. You might have to select Options -> List All Devices. It can be called Unknown Device #1 or NGLM MSC Interface Device. It should look like this
  • \r\n
  • Select WinUSB and install or replace driver
  • \r\n
  • Select USB connection in settings of Schogolf client
  • \r\n
\r\n

Alignment

\r\n
    \r\n
  • Select USB as the connection type
  • \r\n
  • Click Connect
  • \r\n
  • In the settings tab click Open Alignment
  • \r\n
  • Place one ball in each of the two boxes so that the GC2 says there are multiple balls and when the number is 0 you are aligned
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

The Website

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

Signing In

\r\n
    \r\n
  • You have! Well done
  • \r\n
  • Only your email address and discord username are stored
  • \r\n
  • To logout click Signout in the menu
  • \r\n
\r\n

Sessions (WIP)

\r\n
    \r\n
  • Sessions can be also created in the web interface by clicking on the Sessions menu then Create Session
  • \r\n
  • Sessions are displayed in reverse chronological order
  • \r\n
\r\n

Shots

\r\n
    \r\n
  • By default shots are displayed in reverse chronological order with a single summary at the bottom
  • \r\n
  • There are currently 2 grouping modes:\r\n
    Grouped: This keeps the shots in order and groups shots of the same clubs together with their summary\r\n
    Grouped By Club: This groups all shots by the same club\r\n
  • \r\n
  • Shots can be selected by clicking the checkboxes. This will dim the other shots in the group and they will be excluded from the summaries
  • \r\n
  • Groups can also be selected by clicking the bar to the left of the checkboxes
  • \r\n
  • All data comes directly from the GC2 except for Offline, Height and Carry which is calculated. Note: Carry is directly from the GC2
  • \r\n
  • The club can be edited by clicking on it
  • \r\n
\r\n

Tracer

\r\n
    \r\n
  • The tracer is switched on by default and can be switched off by clicking Tracer
  • \r\n
  • The shots are rendered when they are selected
  • \r\n
  • Colours are allocated based on the different clubs
  • \r\n
  • Dispersions are shown in the top right corner of each visualisation. Note: Carry dispersion is based off the Schogolf algorithm
  • \r\n
\r\n

Live

\r\n
    \r\n
  • If the Live badge is shown then all shots will be updated without refreshing
  • \r\n
  • Currently by default, all new shots are automatically selected. (will be settings around this eventually)
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import * as React from 'react';\nimport { Layout } from './Components/Layout';\nimport { Home } from './Components/Home';\nimport { Profile } from './Components/Profile';\nimport { SignIn } from './Components/SignIn';\nimport { Sessions } from './Components/Sessions';\nimport { SessionShots } from './Components/SessionShots';\nimport { Help } from './Components/Help';\nimport { fetchJson } from './Utils';\nimport { observer } from 'mobx-react';\nimport { routeState } from './Stores/RouteState';\nimport { globalState } from './Stores/GlobalState';\n\nexport interface User {\n isMetres: boolean;\n isPremium: boolean;\n apiKey: string;\n username: string;\n}\n\nexport interface AuthDetails {\n user: User;\n isAuthenticated: boolean;\n}\n\n@observer\nclass App extends React.Component {\n constructor(props: any) {\n super(props);\n globalState.loadAuth();\n }\n\n updateWindowDimensions() {\n globalState.setWindowDimensions({ width: window.innerWidth, height: window.innerHeight });\n }\n\n componentDidMount() {\n this.updateWindowDimensions();\n window.addEventListener('resize', () => this.updateWindowDimensions());\n }\n \n componentWillUnmount() {\n window.removeEventListener('resize', () => this.updateWindowDimensions());\n } \n\n public render() {\n return (\n \n \n \n );\n }\n}\n\nconst Page = observer(() => {\n setTimeout(() => setMainMargin(), 1000);\n switch (routeState.route) {\n case 'home': return \n case 'signin': return \n case 'profile': return \n case 'help': return \n case 'sessions': return \n case 'sessionShots': return \n default:\n //const _ensure: never = routeState.route;\n return