{"version":3,"file":"dynamic_table_controller-BQR8QhgO.js","sources":["../../../app/javascript/entrypoints/controllers/dynamic_table_controller.js"],"sourcesContent":["import { Controller } from \"@hotwired/stimulus\";\nimport _ from \"lodash\";\nimport { get } from \"@rails/request.js\";\n\nexport default class extends Controller {\n lastHeaderObserver = null;\n previousDates = [];\n observeredElement = null;\n\n static targets = [\"last\"];\n\n connect() {\n this.table = this.element;\n\n const headers = this.table.querySelectorAll(\".header\");\n const columnCount = headers.length;\n\n this.table.style.gridTemplateColumns = `repeat(${columnCount + 3}, 200px)`;\n this.table.parentElement.classList.add(\n \"animate__animated\",\n \"animate__fadeIn\"\n );\n this.table.classList.remove(\"hidden\");\n\n const headersObserver = new MutationObserver((mutations) => {\n const headers = this.table.querySelectorAll(\".header\");\n const columnCount = headers.length;\n\n this.table.style.gridTemplateColumns = `repeat(${\n columnCount + 3\n }, 200px)`;\n });\n\n headersObserver.observe(document.getElementById(\"headers\"), {\n childList: true,\n });\n\n // set focus to the first input on the page\n this.table.querySelector(\"input\").focus();\n\n this.table.addEventListener(\"keydown\", (event) => {\n if (event.key === \"ArrowDown\") {\n this.handleKeyDown(event);\n }\n\n if (event.target && event.key == \"ArrowUp\") {\n this.handleKeyUp(event);\n }\n });\n }\n\n disconnect() {\n this.table.removeEventListener(\"keydown\", this.handleKeyDown);\n this.table.removeEventListener(\"keyup\", this.handleKeyUp);\n }\n\n handleKeyDown = (event) => {\n const focusedInput = event.target;\n const parentElement = focusedInput.parentElement;\n const parentRowIndex = [...parentElement.parentElement.children].indexOf(\n parentElement\n );\n\n const nextSibling = parentElement.parentElement.nextSibling;\n if (nextSibling && nextSibling.children[parentRowIndex]) {\n nextSibling.children[parentRowIndex].children[0].focus();\n }\n };\n\n handleKeyUp = (event) => {\n const focusedInput = event.target;\n const parentElement = focusedInput.parentElement;\n const parentRowIndex = [...parentElement.parentElement.children].indexOf(\n parentElement\n );\n\n const previousSibling = parentElement.parentElement.previousSibling;\n if (previousSibling && previousSibling.children[parentRowIndex]) {\n previousSibling.children[parentRowIndex].children[0].focus();\n }\n };\n\n lastTargetConnected = (element) => {\n if (this.lastHeaderObserver) {\n [...this.lastTargets].map((target) => {\n this.lastHeaderObserver.unobserve(target);\n });\n\n this.lastHeaderObserver.observe(element);\n } else {\n this.createLastHeaderObserver(element);\n }\n };\n\n createLastHeaderObserver = (element) => {\n this.lastHeaderObserver = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting) {\n this.fetchMoreEntries();\n }\n },\n {\n root: document.getElementById(\"table\"),\n rootMargin: \"60%\",\n }\n );\n\n this.lastHeaderObserver.observe(element);\n };\n\n fetchMoreEntries = () => {\n const last = _.last(this.lastTargets);\n\n const lastDate = last.dataset.lastDate;\n const interval = last.dataset.interval;\n const group = last.dataset?.group;\n\n if (this.previousDates.includes(lastDate)) {\n return;\n }\n\n this.previousDates.push(lastDate);\n\n let url = `/statistic_multiple_entries?interval=${interval}&start_date=${lastDate}`;\n\n if (group) {\n url += `&group=${group}`;\n }\n\n get(url, {\n format: \"turbo-stream\",\n responseKind: \"turbo-stream\",\n });\n };\n}\n"],"names":["dynamic_table_controller","Controller","__publicField","event","parentElement","parentRowIndex","nextSibling","previousSibling","element","target","entries","last","_","lastDate","interval","group","_a","url","get","columnCount","mutations"],"mappings":"+WAIe,MAAKA,UAASC,CAAW,CAAzB,kCACbC,EAAA,0BAAqB,MACrBA,EAAA,qBAAgB,CAAA,GAChBA,EAAA,yBAAoB,MAiDpBA,EAAA,qBAAiBC,GAAU,CAEzB,MAAMC,EADeD,EAAM,OACQ,cAC7BE,EAAiB,CAAC,GAAGD,EAAc,cAAc,QAAQ,EAAE,QAC/DA,CACN,EAEUE,EAAcF,EAAc,cAAc,YAC5CE,GAAeA,EAAY,SAASD,CAAc,GACpDC,EAAY,SAASD,CAAc,EAAE,SAAS,CAAC,EAAE,OAEvD,GAEEH,EAAA,mBAAeC,GAAU,CAEvB,MAAMC,EADeD,EAAM,OACQ,cAC7BE,EAAiB,CAAC,GAAGD,EAAc,cAAc,QAAQ,EAAE,QAC/DA,CACN,EAEUG,EAAkBH,EAAc,cAAc,gBAChDG,GAAmBA,EAAgB,SAASF,CAAc,GAC5DE,EAAgB,SAASF,CAAc,EAAE,SAAS,CAAC,EAAE,OAE3D,GAEEH,EAAA,2BAAuBM,GAAY,CAC7B,KAAK,oBACP,CAAC,GAAG,KAAK,WAAW,EAAE,IAAKC,GAAW,CACpC,KAAK,mBAAmB,UAAUA,CAAM,CAChD,CAAO,EAED,KAAK,mBAAmB,QAAQD,CAAO,GAEvC,KAAK,yBAAyBA,CAAO,CAE3C,GAEEN,EAAA,gCAA4BM,GAAY,CACtC,KAAK,mBAAqB,IAAI,qBAC3BE,GAAY,CACPA,EAAQ,CAAC,EAAE,gBACb,KAAK,iBAAgB,CAExB,EACD,CACE,KAAM,SAAS,eAAe,OAAO,EACrC,WAAY,KACb,CACP,EAEI,KAAK,mBAAmB,QAAQF,CAAO,CAC3C,GAEEN,EAAA,wBAAmB,IAAM,OACvB,MAAMS,EAAOC,EAAE,KAAK,KAAK,WAAW,EAE9BC,EAAWF,EAAK,QAAQ,SACxBG,EAAWH,EAAK,QAAQ,SACxBI,GAAQC,EAAAL,EAAK,UAAL,YAAAK,EAAc,MAE5B,GAAI,KAAK,cAAc,SAASH,CAAQ,EACtC,OAGF,KAAK,cAAc,KAAKA,CAAQ,EAEhC,IAAII,EAAM,wCAAwCH,CAAQ,eAAeD,CAAQ,GAE7EE,IACFE,GAAO,UAAUF,CAAK,IAGxBG,EAAID,EAAK,CACP,OAAQ,eACR,aAAc,cACpB,CAAK,CACL,GA1HE,SAAU,CACR,KAAK,MAAQ,KAAK,QAGlB,MAAME,EADU,KAAK,MAAM,iBAAiB,SAAS,EACzB,OAE5B,KAAK,MAAM,MAAM,oBAAsB,UAAUA,EAAc,CAAC,WAChE,KAAK,MAAM,cAAc,UAAU,IACjC,oBACA,iBACN,EACI,KAAK,MAAM,UAAU,OAAO,QAAQ,EAEZ,IAAI,iBAAkBC,GAAc,CAE1D,MAAMD,EADU,KAAK,MAAM,iBAAiB,SAAS,EACzB,OAE5B,KAAK,MAAM,MAAM,oBAAsB,UACrCA,EAAc,CACf,UACP,CAAK,EAEe,QAAQ,SAAS,eAAe,SAAS,EAAG,CAC1D,UAAW,EACjB,CAAK,EAGD,KAAK,MAAM,cAAc,OAAO,EAAE,MAAK,EAEvC,KAAK,MAAM,iBAAiB,UAAYhB,GAAU,CAC5CA,EAAM,MAAQ,aAChB,KAAK,cAAcA,CAAK,EAGtBA,EAAM,QAAUA,EAAM,KAAO,WAC/B,KAAK,YAAYA,CAAK,CAE9B,CAAK,CACF,CAED,YAAa,CACX,KAAK,MAAM,oBAAoB,UAAW,KAAK,aAAa,EAC5D,KAAK,MAAM,oBAAoB,QAAS,KAAK,WAAW,CACzD,CAgFH,CA7HED,EALkBF,EAKX,UAAU,CAAC,MAAM"}