@green-code-studio/objects-list 1.12.1 → 1.12.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/demo/demo.js CHANGED
@@ -48,6 +48,7 @@ objectList.calendarDayActions=(day)=>[
48
48
  {title:'aaa', href:'https://bing.com/'+day, main: true,},
49
49
  ]
50
50
  document.body.appendChild(objectList);
51
+ objectList.paramsInUrl=true;
51
52
  objectList.readUrl()
52
53
  objectList.refresh();
53
54
 
package/demoDist/demo.js CHANGED
@@ -86,7 +86,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
86
86
  \*****************************************************************************************************************/
87
87
  /***/ ((module, __webpack_exports__, __webpack_require__) => {
88
88
 
89
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.contextMenu {\n position: fixed;\n z-index: 1000;\n margin: 0;\n padding: 0;\n max-width: 100vh;\n min-width: 200px;\n user-select: none;\n background: var(--background);\n}\n.contextMenu li, .contextMenu a {\n display: flex;\n cursor: pointer;\n margin: 0;\n white-space: nowrap;\n align-items: center;\n}\n.contextMenu li .icon, .contextMenu a .icon {\n display: inline-block;\n flex: 0 0 50px;\n text-align: center;\n font-size: 1.2em;\n line-height: 1em;\n vertical-align: middle;\n}\n.contextMenu li .iconPlaceholder, .contextMenu a .iconPlaceholder {\n display: inline-block;\n width: 50px;\n}\n.contextMenu li .content, .contextMenu a .content {\n flex: 1 1 auto;\n display: inline-block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 15px 10px;\n line-height: 1em;\n vertical-align: middle;\n}\n\ndata-view {\n border: 1px solid var(--second);\n display: flex;\n flex-direction: column;\n height: calc(100vh - 200px);\n user-select: none;\n}\ndata-view table-view {\n display: block;\n flex-grow: 1;\n overflow: auto;\n --rowHeight: 41px;\n}\ndata-view table-view .head {\n position: sticky;\n top: 0;\n z-index: 1;\n height: 19px;\n background: var(--second);\n}\ndata-view table-view .head .column {\n background: var(--second);\n color: var(--textSecondColor);\n cursor: default;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 700;\n position: absolute;\n padding: 0 10px;\n box-sizing: border-box;\n height: 19px;\n transform: translateX(var(--move-x));\n}\ndata-view table-view .head .column.ableToSort {\n cursor: pointer;\n}\ndata-view table-view .head .column.ableToSort::before {\n transform: scaleY(0);\n transition: all 300ms ease-out;\n position: absolute;\n right: 0;\n}\ndata-view table-view .head .column.ableToSort[data-order=asc]::before {\n transform: scaleY(1);\n}\ndata-view table-view .head .column.ableToSort[data-order=desc]::before {\n transform: scaleY(-1);\n}\ndata-view table-view .head .column.ableToSort .tableCopy {\n display: none;\n}\ndata-view table-view .body {\n position: relative;\n}\ndata-view table-view .body .tr {\n display: flex;\n position: absolute;\n transition: top 300ms ease, background 100ms;\n table-layout: fixed;\n flex-direction: row;\n animation: data-view-appear 200ms;\n}\n@keyframes data-view-appear {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\ndata-view table-view .body .tr.selectedMain, data-view table-view .body .tr:focus {\n outline: 2px black dashed;\n outline-offset: -2px;\n}\ndata-view table-view .body .tr .td {\n padding: 5px 10px;\n margin: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n flex: 0 0 auto;\n box-sizing: border-box;\n height: var(--rowHeight);\n}\ndata-view table-view .body .tr .td button, data-view table-view .body .tr .td .button {\n font-size: 16px;\n margin-left: 2px;\n}\ndata-view table-view .body .tr .td.actions {\n display: flex;\n}\ndata-view list-view {\n display: block;\n flex-grow: 1;\n overflow: auto;\n}\ndata-view list-view .body {\n position: relative;\n}\ndata-view list-view .body .tr {\n display: grid;\n position: absolute;\n transition: top 300ms ease, background 100ms;\n animation: data-view-appear 200ms;\n grid-template-columns: max-content 1fr max-content;\n width: 100%;\n padding: 10px 0;\n}\ndata-view list-view .body .tr.selectedMain, data-view list-view .body .tr:focus {\n outline: 2px black dashed;\n outline-offset: -2px;\n}\ndata-view list-view .body .tr button, data-view list-view .body .tr .button {\n font-size: 16px;\n margin-left: 2px;\n}\ndata-view list-view .body .tr .icon {\n grid-column: 1;\n grid-row: 1/4;\n font-size: 40px;\n line-height: 63px;\n}\ndata-view list-view .body .tr .keyValue {\n grid-column: 2/4;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n line-height: 21px;\n}\ndata-view list-view .body .tr .keyValue:nth-child(2), data-view list-view .body .tr .keyValue:nth-child(3) {\n grid-column: 2;\n}\ndata-view list-view .body .tr .actions {\n grid-column: 3;\n grid-row: 1/3;\n}\ndata-view calendar-view {\n flex-grow: 1;\n}\ndata-view calendar-view .bodyContainer {\n overflow: scroll;\n display: grid;\n min-height: 100%;\n}\ndata-view calendar-view .body {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n min-height: 100%;\n}\ndata-view .foot {\n border-top: 1px solid var(--second);\n display: flex;\n justify-content: space-between;\n}\n@media (max-width: 600px) {\n data-view .foot form input {\n width: 40px;\n }\n data-view .foot form input:focus {\n width: 200px;\n margin-left: -160px;\n }\n}\ndata-view pagination-buttons {\n flex: 1 1;\n display: flex;\n justify-content: center;\n}\ndata-view.infiniteScrollEnabled table-view .body, data-view.infiniteScrollEnabled list-view .body {\n height: var(--height);\n}\ndata-view.infiniteScrollEnabled pagination-buttons {\n display: none;\n}\n\npagination-buttons button.active {\n background: var(--main);\n}\n\n.categoryTableContainer:not(:has(.filter)) .filterHeader {\n display: none;\n}`, \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./src/style/objectsList.scss?./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js");
89
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.contextMenu {\n position: fixed;\n z-index: 1000;\n margin: 0;\n padding: 0;\n max-width: 100vh;\n min-width: 200px;\n user-select: none;\n background: var(--background);\n}\n.contextMenu li, .contextMenu a {\n display: flex;\n cursor: pointer;\n margin: 0;\n white-space: nowrap;\n align-items: center;\n}\n.contextMenu li .icon, .contextMenu a .icon {\n display: inline-block;\n flex: 0 0 50px;\n text-align: center;\n font-size: 1.2em;\n line-height: 1em;\n vertical-align: middle;\n}\n.contextMenu li .iconPlaceholder, .contextMenu a .iconPlaceholder {\n display: inline-block;\n width: 50px;\n}\n.contextMenu li .content, .contextMenu a .content {\n flex: 1 1 auto;\n display: inline-block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 15px 10px;\n line-height: 1em;\n vertical-align: middle;\n}\n\ndata-view {\n border: 1px solid var(--second);\n display: flex;\n flex-direction: column;\n height: calc(100vh - 200px);\n user-select: none;\n}\ndata-view table-view {\n display: block;\n flex-grow: 1;\n overflow: auto;\n --rowHeight: 41px;\n}\ndata-view table-view .head {\n position: sticky;\n top: 0;\n z-index: 1;\n height: 19px;\n background: var(--second);\n}\ndata-view table-view .head .column {\n background: var(--second);\n color: var(--textSecondColor);\n cursor: default;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 700;\n position: absolute;\n padding: 0 10px;\n box-sizing: border-box;\n height: 19px;\n transform: translateX(var(--move-x));\n}\ndata-view table-view .head .column.ableToSort {\n cursor: pointer;\n}\ndata-view table-view .head .column.ableToSort::before {\n transform: scaleY(0);\n transition: all 300ms ease-out;\n position: absolute;\n right: 0;\n}\ndata-view table-view .head .column.ableToSort[data-order=asc]::before {\n transform: scaleY(1);\n}\ndata-view table-view .head .column.ableToSort[data-order=desc]::before {\n transform: scaleY(-1);\n}\ndata-view table-view .head .column.ableToSort .tableCopy {\n display: none;\n}\ndata-view table-view .body {\n position: relative;\n}\ndata-view table-view .body .tr {\n display: flex;\n position: absolute;\n transition: top 300ms ease, background 100ms;\n table-layout: fixed;\n flex-direction: row;\n animation: data-view-appear 200ms;\n}\n@keyframes data-view-appear {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\ndata-view table-view .body .tr.selectedMain, data-view table-view .body .tr:focus {\n outline: 2px black dashed;\n outline-offset: -2px;\n}\ndata-view table-view .body .tr .td {\n padding: 5px 10px;\n margin: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n flex: 0 0 auto;\n box-sizing: border-box;\n height: var(--rowHeight);\n}\ndata-view table-view .body .tr .td button, data-view table-view .body .tr .td .button {\n font-size: 16px;\n margin-left: 2px;\n}\ndata-view table-view .body .tr .td.actions {\n display: flex;\n}\ndata-view list-view {\n display: block;\n flex-grow: 1;\n overflow: auto;\n}\ndata-view list-view .body {\n position: relative;\n}\ndata-view list-view .body .tr {\n display: grid;\n position: absolute;\n transition: top 300ms ease, background 100ms;\n animation: data-view-appear 200ms;\n grid-template-columns: max-content 1fr max-content;\n width: 100%;\n padding: 10px 0;\n}\ndata-view list-view .body .tr.selectedMain, data-view list-view .body .tr:focus {\n outline: 2px black dashed;\n outline-offset: -2px;\n}\ndata-view list-view .body .tr button, data-view list-view .body .tr .button {\n font-size: 16px;\n margin-left: 2px;\n}\ndata-view list-view .body .tr .icon {\n grid-column: 1;\n grid-row: 1/4;\n font-size: 40px;\n line-height: 63px;\n}\ndata-view list-view .body .tr .keyValue {\n grid-column: 2/4;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n line-height: 21px;\n}\ndata-view list-view .body .tr .keyValue:nth-child(2), data-view list-view .body .tr .keyValue:nth-child(3) {\n grid-column: 2;\n}\ndata-view list-view .body .tr .actions {\n grid-column: 3;\n grid-row: 1/3;\n}\ndata-view calendar-view {\n flex-grow: 1;\n}\ndata-view calendar-view .bodyContainer {\n overflow: scroll;\n display: grid;\n min-height: 100%;\n}\ndata-view calendar-view .body {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n min-height: 100%;\n}\ndata-view calendar-view .body .day {\n display: flex;\n flex-direction: column;\n}\ndata-view calendar-view .body .day .calendarDayActionsWrapper {\n flex-grow: 1;\n}\ndata-view .foot {\n border-top: 1px solid var(--second);\n display: flex;\n justify-content: space-between;\n}\n@media (max-width: 600px) {\n data-view .foot form input {\n width: 40px;\n }\n data-view .foot form input:focus {\n width: 200px;\n margin-left: -160px;\n }\n}\ndata-view pagination-buttons {\n flex: 1 1;\n display: flex;\n justify-content: center;\n}\ndata-view.infiniteScrollEnabled table-view .body, data-view.infiniteScrollEnabled list-view .body {\n height: var(--height);\n}\ndata-view.infiniteScrollEnabled pagination-buttons {\n display: none;\n}\n\npagination-buttons button.active {\n background: var(--main);\n}\n\n.categoryTableContainer:not(:has(.filter)) .filterHeader {\n display: none;\n}`, \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./src/style/objectsList.scss?./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js");
90
90
 
91
91
  /***/ }),
92
92
 
@@ -206,7 +206,7 @@ eval("\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElem
206
206
  \**********************/
207
207
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
208
208
 
209
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _src_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../src/index.js */ \"./src/index.js\");\n/* harmony import */ var _src_style_objectsList_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/style/objectsList.scss */ \"./src/style/objectsList.scss\");\n\r\n\r\n\r\nconsole.log('aa');\r\nconst dataSource={\r\n async get(options){\r\n console.log('aaaaaa')\r\n await new Promise(resolve=>setTimeout(resolve, 1000))\r\n return {\r\n rows:[\r\n {id:1, start:'2026-09-01 12:00:00', end:'2026-09-01 14:00:00', name:'John'},\r\n {id:2, start:'2026-09-01 15:00:00', end:'2026-09-01 16:00:00', name:'Jane'},\r\n {id:3, start:'2026-09-01 19:00:00', end:'2026-09-01 22:00:00', name:'Bob'},\r\n {id:4, start:'2026-09-02 12:00:00', end:'2026-09-02 14:00:00', name:'Alice'},\r\n {id:5, start:'2026-09-02 15:00:00', end:'2026-09-02 16:00:00', name:'Charlie'},\r\n\r\n ],\r\n total:3000\r\n }\r\n }\r\n}\r\nconst objectList=new _src_index_js__WEBPACK_IMPORTED_MODULE_0__.ObjectsList(dataSource)\r\nobjectList.paramsInUrl=false;\r\nobjectList.paramsInLocalStorage=document.location;\r\nobjectList.columns=[\r\n {dataName:'id', name:'ID', sortName:'id'},\r\n {dataName:'name', name:'Name'},\r\n {dataName:'start', name:'Start', sortName: 'start'},\r\n {dataName:'end', name:'End', sortName: 'end'},\r\n]\r\nobjectList.generateActions=()=>[\r\n {title:'zz', href:'https://google.com'},\r\n {title:'aaa', href:'https://bing.com', main: true,},\r\n]\r\nobjectList.dateRowCallback=(row)=>new Date(row.start)\r\nobjectList.calendarRowCallback=(row)=>{\r\n const element = document.createElement('div');\r\n element.textContent = row.name;\r\n return element;\r\n}\r\nobjectList.style.height='500px';\r\nobjectList.generateExports=()=>[\r\n {name:'pdf', action:()=>{console.log('export pdf')}},\r\n {name:'csv', action:()=>{console.log('export csv')}},\r\n]\r\ndocument.body.appendChild(objectList);\r\nobjectList.readUrl()\r\nobjectList.refresh();\r\n\r\n\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./demo/demo.js?");
209
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _src_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../src/index.js */ \"./src/index.js\");\n/* harmony import */ var _src_style_objectsList_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/style/objectsList.scss */ \"./src/style/objectsList.scss\");\n\r\n\r\n\r\nconsole.log('aa');\r\nconst dataSource={\r\n async get(options){\r\n console.log('aaaaaa')\r\n await new Promise(resolve=>setTimeout(resolve, 1000))\r\n return {\r\n rows:[\r\n {id:1, start:'2026-09-01 12:00:00', end:'2026-09-01 14:00:00', name:'John'},\r\n {id:2, start:'2026-09-01 15:00:00', end:'2026-09-01 16:00:00', name:'Jane'},\r\n {id:3, start:'2026-09-01 19:00:00', end:'2026-09-01 22:00:00', name:'Bob'},\r\n {id:4, start:'2026-09-02 12:00:00', end:'2026-09-02 14:00:00', name:'Alice'},\r\n {id:5, start:'2026-09-02 15:00:00', end:'2026-09-02 16:00:00', name:'Charlie'},\r\n\r\n ],\r\n total:3000\r\n }\r\n }\r\n}\r\nconst objectList=new _src_index_js__WEBPACK_IMPORTED_MODULE_0__.ObjectsList(dataSource)\r\nobjectList.paramsInUrl=false;\r\nobjectList.paramsInLocalStorage=document.location;\r\nobjectList.columns=[\r\n {dataName:'id', name:'ID', sortName:'id'},\r\n {dataName:'name', name:'Name'},\r\n {dataName:'start', name:'Start', sortName: 'start'},\r\n {dataName:'end', name:'End', sortName: 'end'},\r\n]\r\nobjectList.generateActions=()=>[\r\n {title:'zz', href:'https://google.com'},\r\n {title:'aaa', href:'https://bing.com', main: true,},\r\n]\r\nobjectList.dateRowCallback=(row)=>new Date(row.start)\r\nobjectList.calendarRowCallback=(row)=>{\r\n const element = document.createElement('div');\r\n element.textContent = row.name;\r\n return element;\r\n}\r\nobjectList.style.height='500px';\r\nobjectList.generateExports=()=>[\r\n {name:'pdf', action:()=>{console.log('export pdf')}},\r\n {name:'csv', action:()=>{console.log('export csv')}},\r\n]\r\nobjectList.calendarDayActions=(day)=>[\r\n {title:'zz', href:'https://google.com'},\r\n {title:'aaa', href:'https://bing.com/'+day, main: true,},\r\n]\r\ndocument.body.appendChild(objectList);\r\nobjectList.readUrl()\r\nobjectList.refresh();\r\n\r\n\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./demo/demo.js?");
210
210
 
211
211
  /***/ }),
212
212
 
@@ -256,7 +256,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
256
256
  \*****************************/
257
257
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
258
258
 
259
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CalendarView: () => (/* binding */ CalendarView)\n/* harmony export */ });\n/* harmony import */ var _abstractView_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./abstractView.js */ \"./src/abstractView.js\");\n/* harmony import */ var fast_creator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! fast-creator */ \"./node_modules/fast-creator/dist/entry.js\");\n/* harmony import */ var _listView_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./listView.js */ \"./src/listView.js\");\n\r\n\r\n\r\n\r\nclass CalendarView extends _abstractView_js__WEBPACK_IMPORTED_MODULE_0__.AbstractView {\r\n constructor(objectsList) {\r\n super();\r\n this.objectsList = objectsList;\r\n this.init();\r\n window.dbgList = this;\r\n }\r\n\r\n init() {\r\n this.body = (0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)('.body.monthCalendarBody')\r\n const bodyContainer = (0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)('.bodyContainer')\r\n bodyContainer.append(this.body)\r\n this.append(bodyContainer)\r\n this.addEventListener('scroll', this.onScroll.bind(this));\r\n }\r\n\r\n calcMaxVisibleItems(height) {\r\n return Number.POSITIVE_INFINITY\r\n }\r\n\r\n loadData(data) {\r\n while(this.body.firstChild){\r\n this.body.removeChild(this.body.firstChild);\r\n }\r\n console.log('data', data)\r\n let startDay = new Date()\r\n if(this.objectsList.date){\r\n startDay = new Date(this.objectsList.date)\r\n }\r\n startDay.setDate(1);\r\n\r\n startDay.setDate(startDay.getDate() - startDay.getDay() + 1);\r\n for (let i = 0; i < 7 * 6; i++) {\r\n const day = new Date(startDay);\r\n day.setDate(startDay.getDate() + i);\r\n const dayElement = (0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)('.day', {\r\n data: {date: day.toISOString().substring(0, 10)},\r\n text: day.toISOString().substring(0, 10)\r\n })\r\n this.body.append(dayElement)\r\n for (let item of data.rows.filter(r => this.objectsList.dateRowCallback(r).toISOString().substring(0, 10) == day.toISOString().substring(0, 10))) {\r\n const itemElement = (0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)('.item')\r\n itemElement.append(this.objectsList.calendarRowCallback(item))\r\n dayElement.append(itemElement)\r\n itemElement.dataset.row = item.id;\r\n itemElement.oncontextmenu = this.contextMenu.bind(this, itemElement);\r\n itemElement.onclick = this.trOnClick.bind(this, item);\r\n itemElement.ondblclick = this.trOnDblClick.bind(this, item, itemElement);\r\n itemElement.onkeydown = this.trOnKeyDown.bind(this, item, itemElement);\r\n itemElement.ondragstart = this.trOnDragStart.bind(this, item, itemElement);\r\n }\r\n }\r\n }\r\n}\r\n\r\ncustomElements.define('calendar-view', CalendarView);\r\n\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./src/calendarView.js?");
259
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CalendarView: () => (/* binding */ CalendarView)\n/* harmony export */ });\n/* harmony import */ var _abstractView_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./abstractView.js */ \"./src/abstractView.js\");\n/* harmony import */ var fast_creator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! fast-creator */ \"./node_modules/fast-creator/dist/entry.js\");\n/* harmony import */ var _listView_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./listView.js */ \"./src/listView.js\");\n\r\n\r\n\r\n\r\nclass CalendarView extends _abstractView_js__WEBPACK_IMPORTED_MODULE_0__.AbstractView {\r\n constructor(objectsList) {\r\n super();\r\n this.objectsList = objectsList;\r\n this.init();\r\n window.dbgList = this;\r\n }\r\n\r\n init() {\r\n this.body = (0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)('.body.monthCalendarBody')\r\n const bodyContainer = (0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)('.bodyContainer')\r\n bodyContainer.append(this.body)\r\n this.append(bodyContainer)\r\n this.addEventListener('scroll', this.onScroll.bind(this));\r\n }\r\n\r\n calcMaxVisibleItems(height) {\r\n return Number.POSITIVE_INFINITY\r\n }\r\n\r\n loadData(data) {\r\n while (this.body.firstChild) {\r\n this.body.removeChild(this.body.firstChild);\r\n }\r\n console.log('data', data)\r\n let startDay = new Date()\r\n if (this.objectsList.date) {\r\n startDay = new Date(this.objectsList.date)\r\n }\r\n startDay.setDate(1);\r\n const logicalStartDate = new Date(startDay);\r\n\r\n startDay.setDate(startDay.getDate() - startDay.getDay() + 1);\r\n for (let i = 0; i < 7 * 6; i++) {\r\n const day = new Date(startDay);\r\n day.setDate(startDay.getDate() + i);\r\n const dayElement = (0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)('.day', {\r\n data: {date: day.toISOString().substring(0, 10)},\r\n text: day.toISOString().substring(0, 10)\r\n })\r\n dayElement.classList.toggle('outsideRange', day.getMonth() != logicalStartDate.getMonth());\r\n this.body.append(dayElement)\r\n for (let item of data.rows.filter(r => this.objectsList.dateRowCallback(r).toISOString().substring(0, 10) == day.toISOString().substring(0, 10))) {\r\n const itemElement = (0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)('.item')\r\n itemElement.append(this.objectsList.calendarRowCallback(item))\r\n dayElement.append(itemElement)\r\n itemElement.dataset.row = item.id;\r\n itemElement.oncontextmenu = this.contextMenu.bind(this, itemElement);\r\n itemElement.onclick = this.trOnClick.bind(this, item);\r\n itemElement.ondblclick = this.trOnDblClick.bind(this, item, itemElement);\r\n itemElement.onkeydown = this.trOnKeyDown.bind(this, item, itemElement);\r\n itemElement.ondragstart = this.trOnDragStart.bind(this, item, itemElement);\r\n }\r\n if (this.objectsList.calendarDayActions) {\r\n const calendarDayActionsWrapper= (0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)('.calendarDayActionsWrapper');\r\n dayElement.append(calendarDayActionsWrapper);\r\n let dayActions = this.objectsList.calendarDayActions(day);\r\n for (let action of dayActions) {\r\n let actionButton = (0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)(action.href ? 'a.button' : 'button', {\r\n title: action.name\r\n });\r\n calendarDayActionsWrapper.append((0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)(actionButton));\r\n actionButton.classList.add('action-' + (action.action ?? 'view'));\r\n\r\n if (action.href) {\r\n actionButton.href = action.href;\r\n }\r\n if (action.command) {\r\n actionButton.onclick = action.command;\r\n }\r\n if (action.icon) {\r\n actionButton.append((0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)('span', {classList: [action.icon]}));\r\n } else {\r\n actionButton.textContent = action.name;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\ncustomElements.define('calendar-view', CalendarView);\r\n\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./src/calendarView.js?");
260
260
 
261
261
  /***/ }),
262
262
 
@@ -296,7 +296,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
296
296
  \****************************/
297
297
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
298
298
 
299
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ObjectsList: () => (/* binding */ ObjectsList)\n/* harmony export */ });\n/* harmony import */ var _tableView_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tableView.js */ \"./src/tableView.js\");\n/* harmony import */ var _listView_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./listView.js */ \"./src/listView.js\");\n/* harmony import */ var _i18n_xml__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./i18n.xml */ \"./src/i18n.xml\");\n/* harmony import */ var _paginationButtons_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./paginationButtons.js */ \"./src/paginationButtons.js\");\n/* harmony import */ var _green_code_studio_context_menu_dist_index_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @green-code-studio/context-menu/dist/index.mjs */ \"./node_modules/@green-code-studio/context-menu/dist/index.mjs\");\n/* harmony import */ var _utils_concurencyLimiter_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/concurencyLimiter.js */ \"./src/utils/concurencyLimiter.js\");\n/* harmony import */ var _idsSet_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./idsSet.js */ \"./src/idsSet.js\");\n/* harmony import */ var _ConfigPopup_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ConfigPopup.js */ \"./src/ConfigPopup.js\");\n/* harmony import */ var fast_creator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! fast-creator */ \"./node_modules/fast-creator/dist/entry.js\");\n/* harmony import */ var _calendarView_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./calendarView.js */ \"./src/calendarView.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass ObjectsList extends HTMLElement {\r\n constructor(datasource, defaultView='tableView') {\r\n super();\r\n this.columns = [];\r\n this.columnsReordered = [];\r\n this.columnsReorderedChanged = false;\r\n this.hiddenColumns = new Set()\r\n this.columnFilters = new Map();\r\n this.generateActions = () => [];\r\n this.insideViewClass = defaultView === 'calendarView' ? _calendarView_js__WEBPACK_IMPORTED_MODULE_9__.CalendarView : _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView;\r\n this.icon = 'icon-document';\r\n this.loadConcurencyLimiter = new _utils_concurencyLimiter_js__WEBPACK_IMPORTED_MODULE_5__.ConcurencyLimiter();\r\n this.loadConcurencyLimiterTotal = new _utils_concurencyLimiter_js__WEBPACK_IMPORTED_MODULE_5__.ConcurencyLimiter();\r\n this.datasource = datasource;\r\n this.datasource.onchange = () => this.refresh();\r\n this.start = 0;\r\n this.limit = 10\r\n this.total = 0;\r\n this.selected = new _idsSet_js__WEBPACK_IMPORTED_MODULE_6__.IdsSet();\r\n this.selectedMain = null;\r\n this.dataById = new Map();\r\n this.initFoot();\r\n this.addEventListener('contextmenu', e => this.showGlobalContextMenu(e));\r\n this.resizeBinded = this.resize.bind(this);\r\n this.popstateBinded = this.readUrl.bind(this);\r\n this.readUrl()\r\n this.addEventListener('keydown', e => this.onkeydown(e));\r\n this.infiniteScrollEnabled = false;\r\n }\r\n\r\n connectedCallback() {\r\n addEventListener('resize', this.resizeBinded);\r\n addEventListener(\"popstate\", this.popstateBinded)\r\n if (this.paramsInLocalStorage) {\r\n this.applyParams(JSON.parse(localStorage['objectList_params_' + this.paramsInLocalStorage] ?? 'null'));\r\n }\r\n }\r\n\r\n disconnectedCallback() {\r\n removeEventListener('resize', this.resizeBinded);\r\n removeEventListener(\"popstate\", this.popstateBinded)\r\n }\r\n\r\n get columns() {\r\n return this._columns;\r\n }\r\n\r\n set columns(value) {\r\n this._columns = value;\r\n this.columnsReordered = value;\r\n this.columnsReorderedChanged = false;\r\n }\r\n\r\n get visibleColumns() {\r\n return this.columnsReordered.filter(x => !this.hiddenColumns.has(x.dataName ?? x.sortName))\r\n }\r\n\r\n refreshLimit() {\r\n this.limit = this.insideView.calcMaxVisibleItems(this.clientHeight - this.foot.clientHeight - 2);\r\n if (this.limit < 1) this.limit = 1;\r\n if (this.insideView instanceof _calendarView_js__WEBPACK_IMPORTED_MODULE_9__.CalendarView) {\r\n this.start = 0;\r\n this.limit = 1000000;\r\n } else if (this.infiniteScrollEnabled) {\r\n this.limit = Math.ceil(this.limit / 20) * 20 + 40;\r\n } else {\r\n this.start = Math.floor(Math.min(this.total, this.start) / this.limit) * this.limit;\r\n }\r\n }\r\n\r\n async refresh() {\r\n console.log('refresh')\r\n this.classList.toggle('infiniteScrollEnabled', this.infiniteScrollEnabled);\r\n\r\n if (!this.insideView || !(this.insideView instanceof this.insideViewClass))\r\n this.initInsideView();\r\n else if (this.insideView.refreshHeader) {\r\n this.insideView.params = this.insideViewParams\r\n this.insideView.refreshHeader()\r\n }\r\n\r\n this.refreshLimit();\r\n const refreshSymbol = Symbol();\r\n this.lastRefreshSymbol = refreshSymbol;\r\n this.lastRefreshSymbolTotal = refreshSymbol;\r\n this.pagination.style.display = this.insideView instanceof _calendarView_js__WEBPACK_IMPORTED_MODULE_9__.CalendarView ? 'none' : '';\r\n this.dateInput.style.display = this.insideView instanceof _calendarView_js__WEBPACK_IMPORTED_MODULE_9__.CalendarView ? '' : 'none';\r\n if (this.asyncTotal) {\r\n const promise1 = this.loadConcurencyLimiter.run(async () => {\r\n if (this.lastRefreshSymbol != refreshSymbol) return;\r\n\r\n const data = await this.datasource.getRows(this);\r\n\r\n if (this.lastRefreshSymbol != refreshSymbol) return;\r\n this.currentRows = data.rows;\r\n this.fillDataById(data.rows);\r\n this.insideView.loadData(data, this.start, this.limit, this.infiniteScrollEnabled);\r\n this.pagination.currentPage = Math.floor(this.start / this.limit);\r\n this.pagination.render();\r\n });\r\n\r\n const promise2 = this.loadConcurencyLimiter.run(async () => {\r\n if (this.lastRefreshSymbolTotal != refreshSymbol) return;\r\n let dataTotal = this.datasource.getTotal(this);\r\n const x = await dataTotal\r\n if (this.lastRefreshSymbolTotal != refreshSymbol) return;\r\n this.total = x.total;\r\n this.pagination.totalPages = Math.ceil(this.total / this.limit);\r\n this.pagination.render();\r\n });\r\n\r\n await promise1;\r\n await promise2;\r\n } else {\r\n await this.loadConcurencyLimiter.run(async () => {\r\n if (this.lastRefreshSymbol != refreshSymbol) return;\r\n\r\n let data = await this.datasource.get(this);\r\n if (this.lastRefreshSymbol != refreshSymbol) return;\r\n\r\n this.currentRows = data.rows;\r\n this.fillDataById(data.rows);\r\n this.total = data.total;\r\n this.insideView.loadData(data, this.start, this.limit, this.infiniteScrollEnabled);\r\n this.pagination.currentPage = Math.floor(this.start / this.limit);\r\n this.pagination.totalPages = Math.ceil(this.total / this.limit);\r\n this.pagination.render();\r\n });\r\n }\r\n\r\n\r\n while (this.filterShortContainer.firstChild) {\r\n this.filterShortContainer.firstChild.remove()\r\n }\r\n if (this.columnFilters.size) {\r\n this.filterShortContainer.append((0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('span', {text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.filtersCount') + ': ' + this.columnFilters.size}));\r\n const clearButton = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('button', {text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.clearFilters')});\r\n clearButton.onclick = () => {\r\n this.columnFilters.clear();\r\n this.refresh();\r\n }\r\n this.filterShortContainer.append(clearButton);\r\n }\r\n if (this.paramsInUrl) {\r\n this.setUrl();\r\n }\r\n if (this.paramsInLocalStorage) {\r\n this.setLocalStorage();\r\n }\r\n }\r\n\r\n setUrl() {\r\n const query = new URLSearchParams(document.location.search)\r\n const prev = Object.fromEntries([...query]);\r\n const next = new URLSearchParams(this.serializeParams(prev))\r\n console.log('dddddcccc')\r\n console.log(query)\r\n if (prev.toString() !== next.toString()) {\r\n const url = new URL(document.location);\r\n url.search = next.toString();\r\n history.pushState(null, '', url.toString());\r\n }\r\n }\r\n\r\n setLocalStorage() {\r\n const prev = JSON.parse(localStorage.getItem('objectList_params_' + this.paramsInLocalStorage));\r\n const next = this.serializeParams(prev);\r\n if (JSON.stringify(prev) !== JSON.stringify(next)) {\r\n localStorage.setItem('objectList_params_' + this.paramsInLocalStorage, JSON.stringify(next));\r\n }\r\n }\r\n\r\n serializeParams(old = {}) {\r\n old = old || {};\r\n let ret = {};\r\n let changed = false;\r\n var visibleColumns = this.visibleColumns.map(x => x.dataName ?? x.sortName).join();\r\n if (old.visibleColumns || this.hiddenColumns.size || this.columnsReorderedChanged) {\r\n ret.visibleColumns = visibleColumns;\r\n changed = true;\r\n\r\n }\r\n if (old.sort || this.sort?.col) {\r\n ret.sort = this.sort?.col;\r\n\r\n }\r\n if (old.sortDesc == 'true' || this.sort?.desc) {\r\n ret.sortDesc = this.sort?.desc ? 'true' : 'false';\r\n\r\n\r\n }\r\n if (old.columnFilters || this.columnFilters) {\r\n ret.columnFilters = JSON.stringify(Array.from(this.columnFilters.entries()));\r\n\r\n }\r\n\r\n if (old.insideView || this.insideViewName) {\r\n ret.insideView = this.insideViewName;\r\n }\r\n return ret;\r\n }\r\n\r\n get insideViewName() {\r\n if (this.insideViewClass == _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView) {\r\n if (this.insideViewParams?.wide)\r\n return 'tableWideView';\r\n else\r\n return 'tableView'\r\n } else {\r\n return 'listView'\r\n }\r\n }\r\n\r\n set insideViewName(value) {\r\n if (this.insideViewName == value) return;\r\n if (value == 'tableView') {\r\n this.insideViewClass = _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView\r\n this.insideViewParams = {wide: false}\r\n } else if (value == 'tableWideView') {\r\n this.insideViewClass = _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView\r\n this.insideViewParams = {wide: true}\r\n } else if (value == 'listView') {\r\n this.insideViewClass = _listView_js__WEBPACK_IMPORTED_MODULE_1__.ListView\r\n this.insideViewParams = {}\r\n } else if (value == 'calendarView') {\r\n this.insideViewClass = _calendarView_js__WEBPACK_IMPORTED_MODULE_9__.CalendarView\r\n this.insideViewParams = {}\r\n }\r\n }\r\n\r\n readUrl() {\r\n\r\n const query = new URLSearchParams(document.location.search)\r\n const params = Object.fromEntries([...query]);\r\n this.applyParams(params)\r\n }\r\n\r\n applyParams(params) {\r\n if (params?.visibleColumns) {\r\n const splitted = params.visibleColumns.split(',');\r\n this.hiddenColumns = new Set(this.columns.map(x => x.dataName ?? x.sortName));\r\n for (const name of splitted) {\r\n this.hiddenColumns.delete(name);\r\n }\r\n for (let i = splitted.length - 1; i > 0; i--) {\r\n const column = this.columnsReordered.find(x => (x.dataName ?? x.sortName) == splitted[i - 1]);\r\n const next = this.columnsReordered.find(x => (x.dataName ?? x.sortName) == splitted[i]);\r\n if (column) {\r\n this.columnsReordered.splice(this.columnsReordered.indexOf(column), 1);\r\n if (next)\r\n this.columnsReordered.splice(this.columnsReordered.indexOf(next), 0, column);\r\n else\r\n this.columnsReordered.push(column)\r\n this.columnsReorderedChanged = true;\r\n }\r\n }\r\n }\r\n if (params?.sort) {\r\n this.sort = {\r\n col: params.sort,\r\n desc: params.sortDesc === 'true'\r\n };\r\n }\r\n if (params?.columnFilters) {\r\n this.columnFilters = new Map(JSON.parse(params.columnFilters));\r\n }\r\n if (params?.insideView) {\r\n this.insideViewName = params.insideView;\r\n }\r\n }\r\n\r\n initInsideView() {\r\n if (this.insideView) {\r\n this.insideView.remove();\r\n }\r\n this.insideView = new this.insideViewClass(this, this.insideViewParams);\r\n this.insertBefore(this.insideView, this.foot);\r\n this.insideView.refresh = () => this.refresh();\r\n this.insideView.onPaginationChanged = (start, limit) => {\r\n if (this.start != start) {\r\n this.start = start;\r\n //this.limit=limit;\r\n this.refresh();\r\n }\r\n }\r\n }\r\n\r\n fillDataById(rows) {\r\n for (let row of rows) {\r\n this.dataById.set(parseInt(row.id), row);\r\n }\r\n }\r\n\r\n getSelectedData() {\r\n let data = Array.from(this.dataById).filter(([id, row]) => this.selected.has(id)).map(([id, row]) => row);\r\n if (data.length > 0) return data;\r\n else if (this.dataById[this.selectedMain])\r\n return [this.dataById[this.selectedMain]]\r\n else return [];\r\n }\r\n\r\n initFoot() {\r\n this.foot = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('.foot');\r\n this.append(this.foot);\r\n let menuButton = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('button.menuButton span.icon-settings');\r\n this.foot.append(menuButton)\r\n menuButton.onclick = e => this.showConfigPopup();\r\n this.pagination = new _paginationButtons_js__WEBPACK_IMPORTED_MODULE_3__.PaginationButtons();\r\n this.pagination.onpageclick = (page) => {\r\n this.start = page * this.limit;\r\n this.refresh();\r\n }\r\n this.foot.append(this.pagination);\r\n this.dateInput = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('input', {type: 'month', value: new Date().toISOString().substring(0, 7)});\r\n this.dateInput.onchange = date => {\r\n this.start = 0;\r\n this.date = this.dateInput.value;\r\n this.refresh();\r\n }\r\n this.foot.append(this.dateInput);\r\n this.filterShortContainer = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('.filterShortContainer');\r\n this.foot.append(this.filterShortContainer);\r\n this.searchForm = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('form', {className: 'search'});\r\n this.foot.append(this.searchForm);\r\n this.searchForm.onsubmit = e => e.preventDefault();\r\n const searchInput = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('input', {\r\n name: 'search',\r\n type: 'search',\r\n placeholder: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.search')\r\n });\r\n this.searchForm.append((0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)(searchInput));\r\n searchInput.oninput = e => {\r\n this.start = 0;\r\n this.refresh();\r\n }\r\n\r\n }\r\n\r\n get search() {\r\n if (!this.foot) return '';\r\n const searchForm = this.foot.querySelector('.search');\r\n if (!searchForm) return '';\r\n return searchForm.search.value;\r\n }\r\n\r\n showGlobalContextMenu(e) {\r\n let elements = [{\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.paginationMode'),\r\n icon: 'icon-pagination',\r\n onclick: () => {\r\n this.infiniteScrollEnabled = false;\r\n this.refresh();\r\n }\r\n }, {\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.scrollMode'),\r\n icon: 'icon-scroll',\r\n onclick: () => {\r\n this.infiniteScrollEnabled = true;\r\n this.refresh();\r\n }\r\n }, {\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.tableView'),\r\n icon: 'icon-table',\r\n onclick: () => {\r\n this.insideViewClass = _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView;\r\n this.refresh();\r\n }\r\n }, {\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.listView'),\r\n icon: 'icon-table',\r\n onclick: () => {\r\n this.insideViewClass = _listView_js__WEBPACK_IMPORTED_MODULE_1__.ListView;\r\n this.refresh();\r\n }\r\n }];\r\n if (this.allowTableEdit) {\r\n elements.push({\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.startMultiEdit'),\r\n icon: 'icon-edit',\r\n onclick: () => {\r\n this.insideViewClass = _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView;\r\n this.refresh();\r\n this.insideView.startMultiEdit();\r\n }\r\n });\r\n }\r\n _green_code_studio_context_menu_dist_index_mjs__WEBPACK_IMPORTED_MODULE_4__.ContextMenu.openContextMenu(e, elements);\r\n }\r\n\r\n resize() {\r\n let limit = this.limit;\r\n this.refreshLimit();\r\n if (limit != this.limit) {\r\n this.refresh();\r\n }\r\n }\r\n\r\n multiEditChanged(id, data, save = false) {\r\n this.datasource.multiEditChanged(id, data, save);\r\n }\r\n\r\n showConfigPopup() {\r\n if (this.querySelector('config-popup')) {\r\n this.querySelector('config-popup').remove()\r\n } else {\r\n const popup = new _ConfigPopup_js__WEBPACK_IMPORTED_MODULE_7__.ConfigPopup(this)\r\n this.append(popup)\r\n }\r\n }\r\n\r\n gotoUrl(url) {\r\n window.location.href = url;\r\n }\r\n\r\n onkeydown(e) {\r\n if (e.ctrlKey) {\r\n if (e.key == 'ArrowLeft' || e.key == 'ArrowRight') {\r\n let page = Math.floor(this.start / this.limit);\r\n page += (e.key == 'ArrowLeft' ? -1 : 1);\r\n if (page < 0) page = 0;\r\n else if (page > 0 && page > Math.ceil(this.total / this.limit) - 1) page = Math.ceil(this.total / this.limit) - 1;\r\n this.start = page * this.limit;\r\n this.refresh();\r\n }\r\n }\r\n }\r\n\r\n\r\n reorderColumns(column, next) {\r\n console.log('reorderColumns')\r\n if (column) {\r\n this.columnsReordered.splice(this.columnsReordered.indexOf(column), 1);\r\n if (next)\r\n this.columnsReordered.splice(this.columnsReordered.indexOf(next), 0, column);\r\n else\r\n this.columnsReordered.push(column)\r\n\r\n this.columnsReorderedChanged = true;\r\n if (this.insideView.setColumnsWidths) {\r\n this.insideView.setColumnsWidths()\r\n }\r\n }\r\n }\r\n}\r\n\r\ncustomElements\r\n .define(\r\n 'data-view'\r\n ,\r\n ObjectsList\r\n )\r\n;\r\n\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./src/objectsList.js?");
299
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ObjectsList: () => (/* binding */ ObjectsList)\n/* harmony export */ });\n/* harmony import */ var _tableView_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tableView.js */ \"./src/tableView.js\");\n/* harmony import */ var _listView_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./listView.js */ \"./src/listView.js\");\n/* harmony import */ var _i18n_xml__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./i18n.xml */ \"./src/i18n.xml\");\n/* harmony import */ var _paginationButtons_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./paginationButtons.js */ \"./src/paginationButtons.js\");\n/* harmony import */ var _green_code_studio_context_menu_dist_index_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @green-code-studio/context-menu/dist/index.mjs */ \"./node_modules/@green-code-studio/context-menu/dist/index.mjs\");\n/* harmony import */ var _utils_concurencyLimiter_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/concurencyLimiter.js */ \"./src/utils/concurencyLimiter.js\");\n/* harmony import */ var _idsSet_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./idsSet.js */ \"./src/idsSet.js\");\n/* harmony import */ var _ConfigPopup_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ConfigPopup.js */ \"./src/ConfigPopup.js\");\n/* harmony import */ var fast_creator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! fast-creator */ \"./node_modules/fast-creator/dist/entry.js\");\n/* harmony import */ var _calendarView_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./calendarView.js */ \"./src/calendarView.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass ObjectsList extends HTMLElement {\r\n constructor(datasource, defaultView='tableView') {\r\n super();\r\n this.columns = [];\r\n this.columnsReordered = [];\r\n this.columnsReorderedChanged = false;\r\n this.hiddenColumns = new Set()\r\n this.columnFilters = new Map();\r\n this.generateActions = () => [];\r\n this.insideViewClass = defaultView === 'calendarView' ? _calendarView_js__WEBPACK_IMPORTED_MODULE_9__.CalendarView : _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView;\r\n this.icon = 'icon-document';\r\n this.loadConcurencyLimiter = new _utils_concurencyLimiter_js__WEBPACK_IMPORTED_MODULE_5__.ConcurencyLimiter();\r\n this.loadConcurencyLimiterTotal = new _utils_concurencyLimiter_js__WEBPACK_IMPORTED_MODULE_5__.ConcurencyLimiter();\r\n this.datasource = datasource;\r\n this.datasource.onchange = () => this.refresh();\r\n this.start = 0;\r\n this.limit = 10\r\n this.total = 0;\r\n this.selected = new _idsSet_js__WEBPACK_IMPORTED_MODULE_6__.IdsSet();\r\n this.selectedMain = null;\r\n this.dataById = new Map();\r\n this.initFoot();\r\n this.addEventListener('contextmenu', e => this.showGlobalContextMenu(e));\r\n this.resizeBinded = this.resize.bind(this);\r\n this.popstateBinded = this.readUrl.bind(this);\r\n this.readUrl()\r\n this.addEventListener('keydown', e => this.onkeydown(e));\r\n this.infiniteScrollEnabled = false;\r\n }\r\n\r\n connectedCallback() {\r\n addEventListener('resize', this.resizeBinded);\r\n addEventListener(\"popstate\", this.popstateBinded)\r\n if (this.paramsInLocalStorage) {\r\n this.applyParams(JSON.parse(localStorage['objectList_params_' + this.paramsInLocalStorage] ?? 'null'));\r\n }\r\n }\r\n\r\n disconnectedCallback() {\r\n removeEventListener('resize', this.resizeBinded);\r\n removeEventListener(\"popstate\", this.popstateBinded)\r\n }\r\n\r\n get columns() {\r\n return this._columns;\r\n }\r\n\r\n set columns(value) {\r\n this._columns = value;\r\n this.columnsReordered = value;\r\n this.columnsReorderedChanged = false;\r\n }\r\n\r\n get visibleColumns() {\r\n return this.columnsReordered.filter(x => !this.hiddenColumns.has(x.dataName ?? x.sortName))\r\n }\r\n\r\n refreshLimit() {\r\n this.limit = this.insideView.calcMaxVisibleItems(this.clientHeight - this.foot.clientHeight - 2);\r\n if (this.limit < 1) this.limit = 1;\r\n if (this.insideView instanceof _calendarView_js__WEBPACK_IMPORTED_MODULE_9__.CalendarView) {\r\n this.start = 0;\r\n this.limit = 1000000;\r\n } else if (this.infiniteScrollEnabled) {\r\n this.limit = Math.ceil(this.limit / 20) * 20 + 40;\r\n } else {\r\n this.start = Math.floor(Math.min(this.total, this.start) / this.limit) * this.limit;\r\n }\r\n }\r\n\r\n async refresh() {\r\n console.log('refresh')\r\n this.classList.toggle('infiniteScrollEnabled', this.infiniteScrollEnabled);\r\n\r\n if (!this.insideView || !(this.insideView instanceof this.insideViewClass))\r\n this.initInsideView();\r\n else if (this.insideView.refreshHeader) {\r\n this.insideView.params = this.insideViewParams\r\n this.insideView.refreshHeader()\r\n }\r\n\r\n this.refreshLimit();\r\n const refreshSymbol = Symbol();\r\n this.lastRefreshSymbol = refreshSymbol;\r\n this.lastRefreshSymbolTotal = refreshSymbol;\r\n this.pagination.style.display = this.insideView instanceof _calendarView_js__WEBPACK_IMPORTED_MODULE_9__.CalendarView ? 'none' : '';\r\n this.dateInput.style.display = this.insideView instanceof _calendarView_js__WEBPACK_IMPORTED_MODULE_9__.CalendarView ? '' : 'none';\r\n if (this.asyncTotal) {\r\n const promise1 = this.loadConcurencyLimiter.run(async () => {\r\n if (this.lastRefreshSymbol != refreshSymbol) return;\r\n\r\n const data = await this.datasource.getRows(this);\r\n\r\n if (this.lastRefreshSymbol != refreshSymbol) return;\r\n this.currentRows = data.rows;\r\n this.fillDataById(data.rows);\r\n this.insideView.loadData(data, this.start, this.limit, this.infiniteScrollEnabled);\r\n this.pagination.currentPage = Math.floor(this.start / this.limit);\r\n this.pagination.render();\r\n });\r\n\r\n const promise2 = this.loadConcurencyLimiter.run(async () => {\r\n if (this.lastRefreshSymbolTotal != refreshSymbol) return;\r\n let dataTotal = this.datasource.getTotal(this);\r\n const x = await dataTotal\r\n if (this.lastRefreshSymbolTotal != refreshSymbol) return;\r\n this.total = x.total;\r\n this.pagination.totalPages = Math.ceil(this.total / this.limit);\r\n this.pagination.render();\r\n });\r\n\r\n await promise1;\r\n await promise2;\r\n } else {\r\n await this.loadConcurencyLimiter.run(async () => {\r\n if (this.lastRefreshSymbol != refreshSymbol) return;\r\n\r\n let data = await this.datasource.get(this);\r\n if (this.lastRefreshSymbol != refreshSymbol) return;\r\n\r\n this.currentRows = data.rows;\r\n this.fillDataById(data.rows);\r\n this.total = data.total;\r\n this.insideView.loadData(data, this.start, this.limit, this.infiniteScrollEnabled);\r\n this.pagination.currentPage = Math.floor(this.start / this.limit);\r\n this.pagination.totalPages = Math.ceil(this.total / this.limit);\r\n this.pagination.render();\r\n });\r\n }\r\n\r\n\r\n while (this.filterShortContainer.firstChild) {\r\n this.filterShortContainer.firstChild.remove()\r\n }\r\n if (this.columnFilters.size) {\r\n this.filterShortContainer.append((0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('span', {text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.filtersCount') + ': ' + this.columnFilters.size}));\r\n const clearButton = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('button', {text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.clearFilters')});\r\n clearButton.onclick = () => {\r\n this.columnFilters.clear();\r\n this.refresh();\r\n }\r\n this.filterShortContainer.append(clearButton);\r\n }\r\n if (this.paramsInUrl) {\r\n this.setUrl();\r\n }\r\n if (this.paramsInLocalStorage) {\r\n this.setLocalStorage();\r\n }\r\n }\r\n\r\n setUrl() {\r\n const query = new URLSearchParams(document.location.search)\r\n const prev = Object.fromEntries([...query]);\r\n const next = new URLSearchParams(this.serializeParams(prev))\r\n console.log('dddddcccc')\r\n console.log(query)\r\n if (prev.toString() !== next.toString()) {\r\n const url = new URL(document.location);\r\n url.search = next.toString();\r\n history.pushState(null, '', url.toString());\r\n }\r\n }\r\n\r\n setLocalStorage() {\r\n const prev = JSON.parse(localStorage.getItem('objectList_params_' + this.paramsInLocalStorage));\r\n const next = this.serializeParams(prev);\r\n if (JSON.stringify(prev) !== JSON.stringify(next)) {\r\n localStorage.setItem('objectList_params_' + this.paramsInLocalStorage, JSON.stringify(next));\r\n }\r\n }\r\n\r\n serializeParams(old = {}) {\r\n old = old || {};\r\n let ret = {};\r\n let changed = false;\r\n var visibleColumns = this.visibleColumns.map(x => x.dataName ?? x.sortName).join();\r\n if (old.visibleColumns || this.hiddenColumns.size || this.columnsReorderedChanged) {\r\n ret.visibleColumns = visibleColumns;\r\n changed = true;\r\n\r\n }\r\n if (old.sort || this.sort?.col) {\r\n ret.sort = this.sort?.col;\r\n\r\n }\r\n if (old.sortDesc == 'true' || this.sort?.desc) {\r\n ret.sortDesc = this.sort?.desc ? 'true' : 'false';\r\n\r\n\r\n }\r\n if (old.columnFilters || this.columnFilters) {\r\n ret.columnFilters = JSON.stringify(Array.from(this.columnFilters.entries()));\r\n\r\n }\r\n\r\n if (old.insideView || this.insideViewName) {\r\n ret.insideView = this.insideViewName;\r\n }\r\n const currentDate = new Date().toISOString().substring(0, 7);\r\n if (old.date || this.date != currentDate) {\r\n ret.date = this.date;\r\n }\r\n return ret;\r\n }\r\n\r\n get insideViewName() {\r\n if (this.insideViewClass == _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView) {\r\n if (this.insideViewParams?.wide)\r\n return 'tableWideView';\r\n else\r\n return 'tableView'\r\n } else {\r\n return 'listView'\r\n }\r\n }\r\n\r\n set insideViewName(value) {\r\n if (this.insideViewName == value) return;\r\n if (value == 'tableView') {\r\n this.insideViewClass = _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView\r\n this.insideViewParams = {wide: false}\r\n } else if (value == 'tableWideView') {\r\n this.insideViewClass = _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView\r\n this.insideViewParams = {wide: true}\r\n } else if (value == 'listView') {\r\n this.insideViewClass = _listView_js__WEBPACK_IMPORTED_MODULE_1__.ListView\r\n this.insideViewParams = {}\r\n } else if (value == 'calendarView') {\r\n this.insideViewClass = _calendarView_js__WEBPACK_IMPORTED_MODULE_9__.CalendarView\r\n this.insideViewParams = {}\r\n }\r\n }\r\n\r\n readUrl() {\r\n\r\n const query = new URLSearchParams(document.location.search)\r\n const params = Object.fromEntries([...query]);\r\n this.applyParams(params)\r\n }\r\n\r\n applyParams(params) {\r\n if (params?.visibleColumns) {\r\n const splitted = params.visibleColumns.split(',');\r\n this.hiddenColumns = new Set(this.columns.map(x => x.dataName ?? x.sortName));\r\n for (const name of splitted) {\r\n this.hiddenColumns.delete(name);\r\n }\r\n for (let i = splitted.length - 1; i > 0; i--) {\r\n const column = this.columnsReordered.find(x => (x.dataName ?? x.sortName) == splitted[i - 1]);\r\n const next = this.columnsReordered.find(x => (x.dataName ?? x.sortName) == splitted[i]);\r\n if (column) {\r\n this.columnsReordered.splice(this.columnsReordered.indexOf(column), 1);\r\n if (next)\r\n this.columnsReordered.splice(this.columnsReordered.indexOf(next), 0, column);\r\n else\r\n this.columnsReordered.push(column)\r\n this.columnsReorderedChanged = true;\r\n }\r\n }\r\n }\r\n if (params?.sort) {\r\n this.sort = {\r\n col: params.sort,\r\n desc: params.sortDesc === 'true'\r\n };\r\n }\r\n if (params?.columnFilters) {\r\n this.columnFilters = new Map(JSON.parse(params.columnFilters));\r\n }\r\n if (params?.insideView) {\r\n this.insideViewName = params.insideView;\r\n }\r\n if (params?.date) {\r\n this.date = params.date;\r\n }\r\n }\r\n\r\n initInsideView() {\r\n if (this.insideView) {\r\n this.insideView.remove();\r\n }\r\n this.insideView = new this.insideViewClass(this, this.insideViewParams);\r\n this.insertBefore(this.insideView, this.foot);\r\n this.insideView.refresh = () => this.refresh();\r\n this.insideView.onPaginationChanged = (start, limit) => {\r\n if (this.start != start) {\r\n this.start = start;\r\n //this.limit=limit;\r\n this.refresh();\r\n }\r\n }\r\n }\r\n\r\n fillDataById(rows) {\r\n for (let row of rows) {\r\n this.dataById.set(parseInt(row.id), row);\r\n }\r\n }\r\n\r\n getSelectedData() {\r\n let data = Array.from(this.dataById).filter(([id, row]) => this.selected.has(id)).map(([id, row]) => row);\r\n if (data.length > 0) return data;\r\n else if (this.dataById[this.selectedMain])\r\n return [this.dataById[this.selectedMain]]\r\n else return [];\r\n }\r\n\r\n initFoot() {\r\n this.foot = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('.foot');\r\n this.append(this.foot);\r\n let menuButton = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('button.menuButton span.icon-settings');\r\n this.foot.append(menuButton)\r\n menuButton.onclick = e => this.showConfigPopup();\r\n this.pagination = new _paginationButtons_js__WEBPACK_IMPORTED_MODULE_3__.PaginationButtons();\r\n this.pagination.onpageclick = (page) => {\r\n this.start = page * this.limit;\r\n this.refresh();\r\n }\r\n this.foot.append(this.pagination);\r\n this.dateInput = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('input', {type: 'month', value: new Date().toISOString().substring(0, 7)});\r\n this.dateInput.onchange = date => {\r\n this.start = 0;\r\n this.date = this.dateInput.value;\r\n this.refresh();\r\n }\r\n this.foot.append(this.dateInput);\r\n this.filterShortContainer = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('.filterShortContainer');\r\n this.foot.append(this.filterShortContainer);\r\n this.searchForm = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('form', {className: 'search'});\r\n this.foot.append(this.searchForm);\r\n this.searchForm.onsubmit = e => e.preventDefault();\r\n const searchInput = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('input', {\r\n name: 'search',\r\n type: 'search',\r\n placeholder: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.search')\r\n });\r\n this.searchForm.append((0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)(searchInput));\r\n searchInput.oninput = e => {\r\n this.start = 0;\r\n this.refresh();\r\n }\r\n\r\n }\r\n\r\n get search() {\r\n if (!this.foot) return '';\r\n const searchForm = this.foot.querySelector('.search');\r\n if (!searchForm) return '';\r\n return searchForm.search.value;\r\n }\r\n\r\n showGlobalContextMenu(e) {\r\n let elements = [{\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.paginationMode'),\r\n icon: 'icon-pagination',\r\n onclick: () => {\r\n this.infiniteScrollEnabled = false;\r\n this.refresh();\r\n }\r\n }, {\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.scrollMode'),\r\n icon: 'icon-scroll',\r\n onclick: () => {\r\n this.infiniteScrollEnabled = true;\r\n this.refresh();\r\n }\r\n }, {\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.tableView'),\r\n icon: 'icon-table',\r\n onclick: () => {\r\n this.insideViewClass = _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView;\r\n this.refresh();\r\n }\r\n }, {\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.listView'),\r\n icon: 'icon-table',\r\n onclick: () => {\r\n this.insideViewClass = _listView_js__WEBPACK_IMPORTED_MODULE_1__.ListView;\r\n this.refresh();\r\n }\r\n }];\r\n if (this.allowTableEdit) {\r\n elements.push({\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.startMultiEdit'),\r\n icon: 'icon-edit',\r\n onclick: () => {\r\n this.insideViewClass = _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView;\r\n this.refresh();\r\n this.insideView.startMultiEdit();\r\n }\r\n });\r\n }\r\n _green_code_studio_context_menu_dist_index_mjs__WEBPACK_IMPORTED_MODULE_4__.ContextMenu.openContextMenu(e, elements);\r\n }\r\n\r\n resize() {\r\n let limit = this.limit;\r\n this.refreshLimit();\r\n if (limit != this.limit) {\r\n this.refresh();\r\n }\r\n }\r\n\r\n multiEditChanged(id, data, save = false) {\r\n this.datasource.multiEditChanged(id, data, save);\r\n }\r\n\r\n showConfigPopup() {\r\n if (this.querySelector('config-popup')) {\r\n this.querySelector('config-popup').remove()\r\n } else {\r\n const popup = new _ConfigPopup_js__WEBPACK_IMPORTED_MODULE_7__.ConfigPopup(this)\r\n this.append(popup)\r\n }\r\n }\r\n\r\n gotoUrl(url) {\r\n window.location.href = url;\r\n }\r\n\r\n onkeydown(e) {\r\n if (e.ctrlKey) {\r\n if (e.key == 'ArrowLeft' || e.key == 'ArrowRight') {\r\n let page = Math.floor(this.start / this.limit);\r\n page += (e.key == 'ArrowLeft' ? -1 : 1);\r\n if (page < 0) page = 0;\r\n else if (page > 0 && page > Math.ceil(this.total / this.limit) - 1) page = Math.ceil(this.total / this.limit) - 1;\r\n this.start = page * this.limit;\r\n this.refresh();\r\n }\r\n }\r\n }\r\n\r\n\r\n reorderColumns(column, next) {\r\n console.log('reorderColumns')\r\n if (column) {\r\n this.columnsReordered.splice(this.columnsReordered.indexOf(column), 1);\r\n if (next)\r\n this.columnsReordered.splice(this.columnsReordered.indexOf(next), 0, column);\r\n else\r\n this.columnsReordered.push(column)\r\n\r\n this.columnsReorderedChanged = true;\r\n if (this.insideView.setColumnsWidths) {\r\n this.insideView.setColumnsWidths()\r\n }\r\n }\r\n }\r\n}\r\n\r\ncustomElements\r\n .define(\r\n 'data-view'\r\n ,\r\n ObjectsList\r\n )\r\n;\r\n\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./src/objectsList.js?");
300
300
 
301
301
  /***/ }),
302
302
 
package/dist/index.mjs CHANGED
@@ -144,7 +144,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
144
144
  \*****************************/
145
145
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
146
146
 
147
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CalendarView: () => (/* binding */ CalendarView)\n/* harmony export */ });\n/* harmony import */ var _abstractView_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./abstractView.js */ \"./src/abstractView.js\");\n/* harmony import */ var fast_creator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! fast-creator */ \"./node_modules/fast-creator/dist/entry.js\");\n/* harmony import */ var _listView_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./listView.js */ \"./src/listView.js\");\n\r\n\r\n\r\n\r\nclass CalendarView extends _abstractView_js__WEBPACK_IMPORTED_MODULE_0__.AbstractView {\r\n constructor(objectsList) {\r\n super();\r\n this.objectsList = objectsList;\r\n this.init();\r\n window.dbgList = this;\r\n }\r\n\r\n init() {\r\n this.body = (0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)('.body.monthCalendarBody')\r\n const bodyContainer = (0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)('.bodyContainer')\r\n bodyContainer.append(this.body)\r\n this.append(bodyContainer)\r\n this.addEventListener('scroll', this.onScroll.bind(this));\r\n }\r\n\r\n calcMaxVisibleItems(height) {\r\n return Number.POSITIVE_INFINITY\r\n }\r\n\r\n loadData(data) {\r\n while (this.body.firstChild) {\r\n this.body.removeChild(this.body.firstChild);\r\n }\r\n console.log('data', data)\r\n let startDay = new Date()\r\n if (this.objectsList.date) {\r\n startDay = new Date(this.objectsList.date)\r\n }\r\n startDay.setDate(1);\r\n\r\n startDay.setDate(startDay.getDate() - startDay.getDay() + 1);\r\n for (let i = 0; i < 7 * 6; i++) {\r\n const day = new Date(startDay);\r\n day.setDate(startDay.getDate() + i);\r\n const dayElement = (0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)('.day', {\r\n data: {date: day.toISOString().substring(0, 10)},\r\n text: day.toISOString().substring(0, 10)\r\n })\r\n dayElement.classList.toggle('outsideRange', day.getMonth() != startDay.getMonth());\r\n this.body.append(dayElement)\r\n for (let item of data.rows.filter(r => this.objectsList.dateRowCallback(r).toISOString().substring(0, 10) == day.toISOString().substring(0, 10))) {\r\n const itemElement = (0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)('.item')\r\n itemElement.append(this.objectsList.calendarRowCallback(item))\r\n dayElement.append(itemElement)\r\n itemElement.dataset.row = item.id;\r\n itemElement.oncontextmenu = this.contextMenu.bind(this, itemElement);\r\n itemElement.onclick = this.trOnClick.bind(this, item);\r\n itemElement.ondblclick = this.trOnDblClick.bind(this, item, itemElement);\r\n itemElement.onkeydown = this.trOnKeyDown.bind(this, item, itemElement);\r\n itemElement.ondragstart = this.trOnDragStart.bind(this, item, itemElement);\r\n }\r\n if (this.objectsList.calendarDayActions) {\r\n const calendarDayActionsWrapper= (0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)('.calendarDayActionsWrapper');\r\n dayElement.append(calendarDayActionsWrapper);\r\n let dayActions = this.objectsList.calendarDayActions(day);\r\n for (let action of dayActions) {\r\n let actionButton = (0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)(action.href ? 'a.button' : 'button', {\r\n title: action.name\r\n });\r\n calendarDayActionsWrapper.append((0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)(actionButton));\r\n actionButton.classList.add('action-' + (action.action ?? 'view'));\r\n\r\n if (action.href) {\r\n actionButton.href = action.href;\r\n }\r\n if (action.command) {\r\n actionButton.onclick = action.command;\r\n }\r\n if (action.icon) {\r\n actionButton.append((0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)('span', {classList: [action.icon]}));\r\n } else {\r\n actionButton.textContent = action.name;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\ncustomElements.define('calendar-view', CalendarView);\r\n\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./src/calendarView.js?");
147
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CalendarView: () => (/* binding */ CalendarView)\n/* harmony export */ });\n/* harmony import */ var _abstractView_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./abstractView.js */ \"./src/abstractView.js\");\n/* harmony import */ var fast_creator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! fast-creator */ \"./node_modules/fast-creator/dist/entry.js\");\n/* harmony import */ var _listView_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./listView.js */ \"./src/listView.js\");\n\r\n\r\n\r\n\r\nclass CalendarView extends _abstractView_js__WEBPACK_IMPORTED_MODULE_0__.AbstractView {\r\n constructor(objectsList) {\r\n super();\r\n this.objectsList = objectsList;\r\n this.init();\r\n window.dbgList = this;\r\n }\r\n\r\n init() {\r\n this.body = (0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)('.body.monthCalendarBody')\r\n const bodyContainer = (0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)('.bodyContainer')\r\n bodyContainer.append(this.body)\r\n this.append(bodyContainer)\r\n this.addEventListener('scroll', this.onScroll.bind(this));\r\n }\r\n\r\n calcMaxVisibleItems(height) {\r\n return Number.POSITIVE_INFINITY\r\n }\r\n\r\n loadData(data) {\r\n while (this.body.firstChild) {\r\n this.body.removeChild(this.body.firstChild);\r\n }\r\n console.log('data', data)\r\n let startDay = new Date()\r\n if (this.objectsList.date) {\r\n startDay = new Date(this.objectsList.date)\r\n }\r\n startDay.setDate(1);\r\n const logicalStartDate = new Date(startDay);\r\n\r\n startDay.setDate(startDay.getDate() - startDay.getDay() + 1);\r\n for (let i = 0; i < 7 * 6; i++) {\r\n const day = new Date(startDay);\r\n day.setDate(startDay.getDate() + i);\r\n const dayElement = (0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)('.day', {\r\n data: {date: day.toISOString().substring(0, 10)},\r\n text: day.toISOString().substring(0, 10)\r\n })\r\n dayElement.classList.toggle('outsideRange', day.getMonth() != logicalStartDate.getMonth());\r\n this.body.append(dayElement)\r\n for (let item of data.rows.filter(r => this.objectsList.dateRowCallback(r).toISOString().substring(0, 10) == day.toISOString().substring(0, 10))) {\r\n const itemElement = (0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)('.item')\r\n itemElement.append(this.objectsList.calendarRowCallback(item))\r\n dayElement.append(itemElement)\r\n itemElement.dataset.row = item.id;\r\n itemElement.oncontextmenu = this.contextMenu.bind(this, itemElement);\r\n itemElement.onclick = this.trOnClick.bind(this, item);\r\n itemElement.ondblclick = this.trOnDblClick.bind(this, item, itemElement);\r\n itemElement.onkeydown = this.trOnKeyDown.bind(this, item, itemElement);\r\n itemElement.ondragstart = this.trOnDragStart.bind(this, item, itemElement);\r\n }\r\n if (this.objectsList.calendarDayActions) {\r\n const calendarDayActionsWrapper= (0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)('.calendarDayActionsWrapper');\r\n dayElement.append(calendarDayActionsWrapper);\r\n let dayActions = this.objectsList.calendarDayActions(day);\r\n for (let action of dayActions) {\r\n let actionButton = (0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)(action.href ? 'a.button' : 'button', {\r\n title: action.name\r\n });\r\n calendarDayActionsWrapper.append((0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)(actionButton));\r\n actionButton.classList.add('action-' + (action.action ?? 'view'));\r\n\r\n if (action.href) {\r\n actionButton.href = action.href;\r\n }\r\n if (action.command) {\r\n actionButton.onclick = action.command;\r\n }\r\n if (action.icon) {\r\n actionButton.append((0,fast_creator__WEBPACK_IMPORTED_MODULE_1__.create)('span', {classList: [action.icon]}));\r\n } else {\r\n actionButton.textContent = action.name;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\ncustomElements.define('calendar-view', CalendarView);\r\n\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./src/calendarView.js?");
148
148
 
149
149
  /***/ }),
150
150
 
@@ -184,7 +184,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
184
184
  \****************************/
185
185
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
186
186
 
187
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ObjectsList: () => (/* binding */ ObjectsList)\n/* harmony export */ });\n/* harmony import */ var _tableView_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tableView.js */ \"./src/tableView.js\");\n/* harmony import */ var _listView_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./listView.js */ \"./src/listView.js\");\n/* harmony import */ var _i18n_xml__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./i18n.xml */ \"./src/i18n.xml\");\n/* harmony import */ var _paginationButtons_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./paginationButtons.js */ \"./src/paginationButtons.js\");\n/* harmony import */ var _green_code_studio_context_menu_dist_index_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @green-code-studio/context-menu/dist/index.mjs */ \"./node_modules/@green-code-studio/context-menu/dist/index.mjs\");\n/* harmony import */ var _utils_concurencyLimiter_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/concurencyLimiter.js */ \"./src/utils/concurencyLimiter.js\");\n/* harmony import */ var _idsSet_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./idsSet.js */ \"./src/idsSet.js\");\n/* harmony import */ var _ConfigPopup_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ConfigPopup.js */ \"./src/ConfigPopup.js\");\n/* harmony import */ var fast_creator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! fast-creator */ \"./node_modules/fast-creator/dist/entry.js\");\n/* harmony import */ var _calendarView_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./calendarView.js */ \"./src/calendarView.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass ObjectsList extends HTMLElement {\r\n constructor(datasource, defaultView='tableView') {\r\n super();\r\n this.columns = [];\r\n this.columnsReordered = [];\r\n this.columnsReorderedChanged = false;\r\n this.hiddenColumns = new Set()\r\n this.columnFilters = new Map();\r\n this.generateActions = () => [];\r\n this.insideViewClass = defaultView === 'calendarView' ? _calendarView_js__WEBPACK_IMPORTED_MODULE_9__.CalendarView : _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView;\r\n this.icon = 'icon-document';\r\n this.loadConcurencyLimiter = new _utils_concurencyLimiter_js__WEBPACK_IMPORTED_MODULE_5__.ConcurencyLimiter();\r\n this.loadConcurencyLimiterTotal = new _utils_concurencyLimiter_js__WEBPACK_IMPORTED_MODULE_5__.ConcurencyLimiter();\r\n this.datasource = datasource;\r\n this.datasource.onchange = () => this.refresh();\r\n this.start = 0;\r\n this.limit = 10\r\n this.total = 0;\r\n this.selected = new _idsSet_js__WEBPACK_IMPORTED_MODULE_6__.IdsSet();\r\n this.selectedMain = null;\r\n this.dataById = new Map();\r\n this.initFoot();\r\n this.addEventListener('contextmenu', e => this.showGlobalContextMenu(e));\r\n this.resizeBinded = this.resize.bind(this);\r\n this.popstateBinded = this.readUrl.bind(this);\r\n this.readUrl()\r\n this.addEventListener('keydown', e => this.onkeydown(e));\r\n this.infiniteScrollEnabled = false;\r\n }\r\n\r\n connectedCallback() {\r\n addEventListener('resize', this.resizeBinded);\r\n addEventListener(\"popstate\", this.popstateBinded)\r\n if (this.paramsInLocalStorage) {\r\n this.applyParams(JSON.parse(localStorage['objectList_params_' + this.paramsInLocalStorage] ?? 'null'));\r\n }\r\n }\r\n\r\n disconnectedCallback() {\r\n removeEventListener('resize', this.resizeBinded);\r\n removeEventListener(\"popstate\", this.popstateBinded)\r\n }\r\n\r\n get columns() {\r\n return this._columns;\r\n }\r\n\r\n set columns(value) {\r\n this._columns = value;\r\n this.columnsReordered = value;\r\n this.columnsReorderedChanged = false;\r\n }\r\n\r\n get visibleColumns() {\r\n return this.columnsReordered.filter(x => !this.hiddenColumns.has(x.dataName ?? x.sortName))\r\n }\r\n\r\n refreshLimit() {\r\n this.limit = this.insideView.calcMaxVisibleItems(this.clientHeight - this.foot.clientHeight - 2);\r\n if (this.limit < 1) this.limit = 1;\r\n if (this.insideView instanceof _calendarView_js__WEBPACK_IMPORTED_MODULE_9__.CalendarView) {\r\n this.start = 0;\r\n this.limit = 1000000;\r\n } else if (this.infiniteScrollEnabled) {\r\n this.limit = Math.ceil(this.limit / 20) * 20 + 40;\r\n } else {\r\n this.start = Math.floor(Math.min(this.total, this.start) / this.limit) * this.limit;\r\n }\r\n }\r\n\r\n async refresh() {\r\n console.log('refresh')\r\n this.classList.toggle('infiniteScrollEnabled', this.infiniteScrollEnabled);\r\n\r\n if (!this.insideView || !(this.insideView instanceof this.insideViewClass))\r\n this.initInsideView();\r\n else if (this.insideView.refreshHeader) {\r\n this.insideView.params = this.insideViewParams\r\n this.insideView.refreshHeader()\r\n }\r\n\r\n this.refreshLimit();\r\n const refreshSymbol = Symbol();\r\n this.lastRefreshSymbol = refreshSymbol;\r\n this.lastRefreshSymbolTotal = refreshSymbol;\r\n this.pagination.style.display = this.insideView instanceof _calendarView_js__WEBPACK_IMPORTED_MODULE_9__.CalendarView ? 'none' : '';\r\n this.dateInput.style.display = this.insideView instanceof _calendarView_js__WEBPACK_IMPORTED_MODULE_9__.CalendarView ? '' : 'none';\r\n if (this.asyncTotal) {\r\n const promise1 = this.loadConcurencyLimiter.run(async () => {\r\n if (this.lastRefreshSymbol != refreshSymbol) return;\r\n\r\n const data = await this.datasource.getRows(this);\r\n\r\n if (this.lastRefreshSymbol != refreshSymbol) return;\r\n this.currentRows = data.rows;\r\n this.fillDataById(data.rows);\r\n this.insideView.loadData(data, this.start, this.limit, this.infiniteScrollEnabled);\r\n this.pagination.currentPage = Math.floor(this.start / this.limit);\r\n this.pagination.render();\r\n });\r\n\r\n const promise2 = this.loadConcurencyLimiter.run(async () => {\r\n if (this.lastRefreshSymbolTotal != refreshSymbol) return;\r\n let dataTotal = this.datasource.getTotal(this);\r\n const x = await dataTotal\r\n if (this.lastRefreshSymbolTotal != refreshSymbol) return;\r\n this.total = x.total;\r\n this.pagination.totalPages = Math.ceil(this.total / this.limit);\r\n this.pagination.render();\r\n });\r\n\r\n await promise1;\r\n await promise2;\r\n } else {\r\n await this.loadConcurencyLimiter.run(async () => {\r\n if (this.lastRefreshSymbol != refreshSymbol) return;\r\n\r\n let data = await this.datasource.get(this);\r\n if (this.lastRefreshSymbol != refreshSymbol) return;\r\n\r\n this.currentRows = data.rows;\r\n this.fillDataById(data.rows);\r\n this.total = data.total;\r\n this.insideView.loadData(data, this.start, this.limit, this.infiniteScrollEnabled);\r\n this.pagination.currentPage = Math.floor(this.start / this.limit);\r\n this.pagination.totalPages = Math.ceil(this.total / this.limit);\r\n this.pagination.render();\r\n });\r\n }\r\n\r\n\r\n while (this.filterShortContainer.firstChild) {\r\n this.filterShortContainer.firstChild.remove()\r\n }\r\n if (this.columnFilters.size) {\r\n this.filterShortContainer.append((0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('span', {text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.filtersCount') + ': ' + this.columnFilters.size}));\r\n const clearButton = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('button', {text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.clearFilters')});\r\n clearButton.onclick = () => {\r\n this.columnFilters.clear();\r\n this.refresh();\r\n }\r\n this.filterShortContainer.append(clearButton);\r\n }\r\n if (this.paramsInUrl) {\r\n this.setUrl();\r\n }\r\n if (this.paramsInLocalStorage) {\r\n this.setLocalStorage();\r\n }\r\n }\r\n\r\n setUrl() {\r\n const query = new URLSearchParams(document.location.search)\r\n const prev = Object.fromEntries([...query]);\r\n const next = new URLSearchParams(this.serializeParams(prev))\r\n console.log('dddddcccc')\r\n console.log(query)\r\n if (prev.toString() !== next.toString()) {\r\n const url = new URL(document.location);\r\n url.search = next.toString();\r\n history.pushState(null, '', url.toString());\r\n }\r\n }\r\n\r\n setLocalStorage() {\r\n const prev = JSON.parse(localStorage.getItem('objectList_params_' + this.paramsInLocalStorage));\r\n const next = this.serializeParams(prev);\r\n if (JSON.stringify(prev) !== JSON.stringify(next)) {\r\n localStorage.setItem('objectList_params_' + this.paramsInLocalStorage, JSON.stringify(next));\r\n }\r\n }\r\n\r\n serializeParams(old = {}) {\r\n old = old || {};\r\n let ret = {};\r\n let changed = false;\r\n var visibleColumns = this.visibleColumns.map(x => x.dataName ?? x.sortName).join();\r\n if (old.visibleColumns || this.hiddenColumns.size || this.columnsReorderedChanged) {\r\n ret.visibleColumns = visibleColumns;\r\n changed = true;\r\n\r\n }\r\n if (old.sort || this.sort?.col) {\r\n ret.sort = this.sort?.col;\r\n\r\n }\r\n if (old.sortDesc == 'true' || this.sort?.desc) {\r\n ret.sortDesc = this.sort?.desc ? 'true' : 'false';\r\n\r\n\r\n }\r\n if (old.columnFilters || this.columnFilters) {\r\n ret.columnFilters = JSON.stringify(Array.from(this.columnFilters.entries()));\r\n\r\n }\r\n\r\n if (old.insideView || this.insideViewName) {\r\n ret.insideView = this.insideViewName;\r\n }\r\n return ret;\r\n }\r\n\r\n get insideViewName() {\r\n if (this.insideViewClass == _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView) {\r\n if (this.insideViewParams?.wide)\r\n return 'tableWideView';\r\n else\r\n return 'tableView'\r\n } else {\r\n return 'listView'\r\n }\r\n }\r\n\r\n set insideViewName(value) {\r\n if (this.insideViewName == value) return;\r\n if (value == 'tableView') {\r\n this.insideViewClass = _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView\r\n this.insideViewParams = {wide: false}\r\n } else if (value == 'tableWideView') {\r\n this.insideViewClass = _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView\r\n this.insideViewParams = {wide: true}\r\n } else if (value == 'listView') {\r\n this.insideViewClass = _listView_js__WEBPACK_IMPORTED_MODULE_1__.ListView\r\n this.insideViewParams = {}\r\n } else if (value == 'calendarView') {\r\n this.insideViewClass = _calendarView_js__WEBPACK_IMPORTED_MODULE_9__.CalendarView\r\n this.insideViewParams = {}\r\n }\r\n }\r\n\r\n readUrl() {\r\n\r\n const query = new URLSearchParams(document.location.search)\r\n const params = Object.fromEntries([...query]);\r\n this.applyParams(params)\r\n }\r\n\r\n applyParams(params) {\r\n if (params?.visibleColumns) {\r\n const splitted = params.visibleColumns.split(',');\r\n this.hiddenColumns = new Set(this.columns.map(x => x.dataName ?? x.sortName));\r\n for (const name of splitted) {\r\n this.hiddenColumns.delete(name);\r\n }\r\n for (let i = splitted.length - 1; i > 0; i--) {\r\n const column = this.columnsReordered.find(x => (x.dataName ?? x.sortName) == splitted[i - 1]);\r\n const next = this.columnsReordered.find(x => (x.dataName ?? x.sortName) == splitted[i]);\r\n if (column) {\r\n this.columnsReordered.splice(this.columnsReordered.indexOf(column), 1);\r\n if (next)\r\n this.columnsReordered.splice(this.columnsReordered.indexOf(next), 0, column);\r\n else\r\n this.columnsReordered.push(column)\r\n this.columnsReorderedChanged = true;\r\n }\r\n }\r\n }\r\n if (params?.sort) {\r\n this.sort = {\r\n col: params.sort,\r\n desc: params.sortDesc === 'true'\r\n };\r\n }\r\n if (params?.columnFilters) {\r\n this.columnFilters = new Map(JSON.parse(params.columnFilters));\r\n }\r\n if (params?.insideView) {\r\n this.insideViewName = params.insideView;\r\n }\r\n }\r\n\r\n initInsideView() {\r\n if (this.insideView) {\r\n this.insideView.remove();\r\n }\r\n this.insideView = new this.insideViewClass(this, this.insideViewParams);\r\n this.insertBefore(this.insideView, this.foot);\r\n this.insideView.refresh = () => this.refresh();\r\n this.insideView.onPaginationChanged = (start, limit) => {\r\n if (this.start != start) {\r\n this.start = start;\r\n //this.limit=limit;\r\n this.refresh();\r\n }\r\n }\r\n }\r\n\r\n fillDataById(rows) {\r\n for (let row of rows) {\r\n this.dataById.set(parseInt(row.id), row);\r\n }\r\n }\r\n\r\n getSelectedData() {\r\n let data = Array.from(this.dataById).filter(([id, row]) => this.selected.has(id)).map(([id, row]) => row);\r\n if (data.length > 0) return data;\r\n else if (this.dataById[this.selectedMain])\r\n return [this.dataById[this.selectedMain]]\r\n else return [];\r\n }\r\n\r\n initFoot() {\r\n this.foot = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('.foot');\r\n this.append(this.foot);\r\n let menuButton = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('button.menuButton span.icon-settings');\r\n this.foot.append(menuButton)\r\n menuButton.onclick = e => this.showConfigPopup();\r\n this.pagination = new _paginationButtons_js__WEBPACK_IMPORTED_MODULE_3__.PaginationButtons();\r\n this.pagination.onpageclick = (page) => {\r\n this.start = page * this.limit;\r\n this.refresh();\r\n }\r\n this.foot.append(this.pagination);\r\n this.dateInput = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('input', {type: 'month', value: new Date().toISOString().substring(0, 7)});\r\n this.dateInput.onchange = date => {\r\n this.start = 0;\r\n this.date = this.dateInput.value;\r\n this.refresh();\r\n }\r\n this.foot.append(this.dateInput);\r\n this.filterShortContainer = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('.filterShortContainer');\r\n this.foot.append(this.filterShortContainer);\r\n this.searchForm = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('form', {className: 'search'});\r\n this.foot.append(this.searchForm);\r\n this.searchForm.onsubmit = e => e.preventDefault();\r\n const searchInput = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('input', {\r\n name: 'search',\r\n type: 'search',\r\n placeholder: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.search')\r\n });\r\n this.searchForm.append((0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)(searchInput));\r\n searchInput.oninput = e => {\r\n this.start = 0;\r\n this.refresh();\r\n }\r\n\r\n }\r\n\r\n get search() {\r\n if (!this.foot) return '';\r\n const searchForm = this.foot.querySelector('.search');\r\n if (!searchForm) return '';\r\n return searchForm.search.value;\r\n }\r\n\r\n showGlobalContextMenu(e) {\r\n let elements = [{\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.paginationMode'),\r\n icon: 'icon-pagination',\r\n onclick: () => {\r\n this.infiniteScrollEnabled = false;\r\n this.refresh();\r\n }\r\n }, {\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.scrollMode'),\r\n icon: 'icon-scroll',\r\n onclick: () => {\r\n this.infiniteScrollEnabled = true;\r\n this.refresh();\r\n }\r\n }, {\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.tableView'),\r\n icon: 'icon-table',\r\n onclick: () => {\r\n this.insideViewClass = _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView;\r\n this.refresh();\r\n }\r\n }, {\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.listView'),\r\n icon: 'icon-table',\r\n onclick: () => {\r\n this.insideViewClass = _listView_js__WEBPACK_IMPORTED_MODULE_1__.ListView;\r\n this.refresh();\r\n }\r\n }];\r\n if (this.allowTableEdit) {\r\n elements.push({\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.startMultiEdit'),\r\n icon: 'icon-edit',\r\n onclick: () => {\r\n this.insideViewClass = _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView;\r\n this.refresh();\r\n this.insideView.startMultiEdit();\r\n }\r\n });\r\n }\r\n _green_code_studio_context_menu_dist_index_mjs__WEBPACK_IMPORTED_MODULE_4__.ContextMenu.openContextMenu(e, elements);\r\n }\r\n\r\n resize() {\r\n let limit = this.limit;\r\n this.refreshLimit();\r\n if (limit != this.limit) {\r\n this.refresh();\r\n }\r\n }\r\n\r\n multiEditChanged(id, data, save = false) {\r\n this.datasource.multiEditChanged(id, data, save);\r\n }\r\n\r\n showConfigPopup() {\r\n if (this.querySelector('config-popup')) {\r\n this.querySelector('config-popup').remove()\r\n } else {\r\n const popup = new _ConfigPopup_js__WEBPACK_IMPORTED_MODULE_7__.ConfigPopup(this)\r\n this.append(popup)\r\n }\r\n }\r\n\r\n gotoUrl(url) {\r\n window.location.href = url;\r\n }\r\n\r\n onkeydown(e) {\r\n if (e.ctrlKey) {\r\n if (e.key == 'ArrowLeft' || e.key == 'ArrowRight') {\r\n let page = Math.floor(this.start / this.limit);\r\n page += (e.key == 'ArrowLeft' ? -1 : 1);\r\n if (page < 0) page = 0;\r\n else if (page > 0 && page > Math.ceil(this.total / this.limit) - 1) page = Math.ceil(this.total / this.limit) - 1;\r\n this.start = page * this.limit;\r\n this.refresh();\r\n }\r\n }\r\n }\r\n\r\n\r\n reorderColumns(column, next) {\r\n console.log('reorderColumns')\r\n if (column) {\r\n this.columnsReordered.splice(this.columnsReordered.indexOf(column), 1);\r\n if (next)\r\n this.columnsReordered.splice(this.columnsReordered.indexOf(next), 0, column);\r\n else\r\n this.columnsReordered.push(column)\r\n\r\n this.columnsReorderedChanged = true;\r\n if (this.insideView.setColumnsWidths) {\r\n this.insideView.setColumnsWidths()\r\n }\r\n }\r\n }\r\n}\r\n\r\ncustomElements\r\n .define(\r\n 'data-view'\r\n ,\r\n ObjectsList\r\n )\r\n;\r\n\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./src/objectsList.js?");
187
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ObjectsList: () => (/* binding */ ObjectsList)\n/* harmony export */ });\n/* harmony import */ var _tableView_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tableView.js */ \"./src/tableView.js\");\n/* harmony import */ var _listView_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./listView.js */ \"./src/listView.js\");\n/* harmony import */ var _i18n_xml__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./i18n.xml */ \"./src/i18n.xml\");\n/* harmony import */ var _paginationButtons_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./paginationButtons.js */ \"./src/paginationButtons.js\");\n/* harmony import */ var _green_code_studio_context_menu_dist_index_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @green-code-studio/context-menu/dist/index.mjs */ \"./node_modules/@green-code-studio/context-menu/dist/index.mjs\");\n/* harmony import */ var _utils_concurencyLimiter_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/concurencyLimiter.js */ \"./src/utils/concurencyLimiter.js\");\n/* harmony import */ var _idsSet_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./idsSet.js */ \"./src/idsSet.js\");\n/* harmony import */ var _ConfigPopup_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ConfigPopup.js */ \"./src/ConfigPopup.js\");\n/* harmony import */ var fast_creator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! fast-creator */ \"./node_modules/fast-creator/dist/entry.js\");\n/* harmony import */ var _calendarView_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./calendarView.js */ \"./src/calendarView.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass ObjectsList extends HTMLElement {\r\n constructor(datasource, defaultView='tableView') {\r\n super();\r\n this.columns = [];\r\n this.columnsReordered = [];\r\n this.columnsReorderedChanged = false;\r\n this.hiddenColumns = new Set()\r\n this.columnFilters = new Map();\r\n this.generateActions = () => [];\r\n this.insideViewClass = defaultView === 'calendarView' ? _calendarView_js__WEBPACK_IMPORTED_MODULE_9__.CalendarView : _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView;\r\n this.icon = 'icon-document';\r\n this.loadConcurencyLimiter = new _utils_concurencyLimiter_js__WEBPACK_IMPORTED_MODULE_5__.ConcurencyLimiter();\r\n this.loadConcurencyLimiterTotal = new _utils_concurencyLimiter_js__WEBPACK_IMPORTED_MODULE_5__.ConcurencyLimiter();\r\n this.datasource = datasource;\r\n this.datasource.onchange = () => this.refresh();\r\n this.start = 0;\r\n this.limit = 10\r\n this.total = 0;\r\n this.selected = new _idsSet_js__WEBPACK_IMPORTED_MODULE_6__.IdsSet();\r\n this.selectedMain = null;\r\n this.dataById = new Map();\r\n this.initFoot();\r\n this.addEventListener('contextmenu', e => this.showGlobalContextMenu(e));\r\n this.resizeBinded = this.resize.bind(this);\r\n this.popstateBinded = this.readUrl.bind(this);\r\n this.readUrl()\r\n this.addEventListener('keydown', e => this.onkeydown(e));\r\n this.infiniteScrollEnabled = false;\r\n }\r\n\r\n connectedCallback() {\r\n addEventListener('resize', this.resizeBinded);\r\n addEventListener(\"popstate\", this.popstateBinded)\r\n if (this.paramsInLocalStorage) {\r\n this.applyParams(JSON.parse(localStorage['objectList_params_' + this.paramsInLocalStorage] ?? 'null'));\r\n }\r\n }\r\n\r\n disconnectedCallback() {\r\n removeEventListener('resize', this.resizeBinded);\r\n removeEventListener(\"popstate\", this.popstateBinded)\r\n }\r\n\r\n get columns() {\r\n return this._columns;\r\n }\r\n\r\n set columns(value) {\r\n this._columns = value;\r\n this.columnsReordered = value;\r\n this.columnsReorderedChanged = false;\r\n }\r\n\r\n get visibleColumns() {\r\n return this.columnsReordered.filter(x => !this.hiddenColumns.has(x.dataName ?? x.sortName))\r\n }\r\n\r\n refreshLimit() {\r\n this.limit = this.insideView.calcMaxVisibleItems(this.clientHeight - this.foot.clientHeight - 2);\r\n if (this.limit < 1) this.limit = 1;\r\n if (this.insideView instanceof _calendarView_js__WEBPACK_IMPORTED_MODULE_9__.CalendarView) {\r\n this.start = 0;\r\n this.limit = 1000000;\r\n } else if (this.infiniteScrollEnabled) {\r\n this.limit = Math.ceil(this.limit / 20) * 20 + 40;\r\n } else {\r\n this.start = Math.floor(Math.min(this.total, this.start) / this.limit) * this.limit;\r\n }\r\n }\r\n\r\n async refresh() {\r\n console.log('refresh')\r\n this.classList.toggle('infiniteScrollEnabled', this.infiniteScrollEnabled);\r\n\r\n if (!this.insideView || !(this.insideView instanceof this.insideViewClass))\r\n this.initInsideView();\r\n else if (this.insideView.refreshHeader) {\r\n this.insideView.params = this.insideViewParams\r\n this.insideView.refreshHeader()\r\n }\r\n\r\n this.refreshLimit();\r\n const refreshSymbol = Symbol();\r\n this.lastRefreshSymbol = refreshSymbol;\r\n this.lastRefreshSymbolTotal = refreshSymbol;\r\n this.pagination.style.display = this.insideView instanceof _calendarView_js__WEBPACK_IMPORTED_MODULE_9__.CalendarView ? 'none' : '';\r\n this.dateInput.style.display = this.insideView instanceof _calendarView_js__WEBPACK_IMPORTED_MODULE_9__.CalendarView ? '' : 'none';\r\n if (this.asyncTotal) {\r\n const promise1 = this.loadConcurencyLimiter.run(async () => {\r\n if (this.lastRefreshSymbol != refreshSymbol) return;\r\n\r\n const data = await this.datasource.getRows(this);\r\n\r\n if (this.lastRefreshSymbol != refreshSymbol) return;\r\n this.currentRows = data.rows;\r\n this.fillDataById(data.rows);\r\n this.insideView.loadData(data, this.start, this.limit, this.infiniteScrollEnabled);\r\n this.pagination.currentPage = Math.floor(this.start / this.limit);\r\n this.pagination.render();\r\n });\r\n\r\n const promise2 = this.loadConcurencyLimiter.run(async () => {\r\n if (this.lastRefreshSymbolTotal != refreshSymbol) return;\r\n let dataTotal = this.datasource.getTotal(this);\r\n const x = await dataTotal\r\n if (this.lastRefreshSymbolTotal != refreshSymbol) return;\r\n this.total = x.total;\r\n this.pagination.totalPages = Math.ceil(this.total / this.limit);\r\n this.pagination.render();\r\n });\r\n\r\n await promise1;\r\n await promise2;\r\n } else {\r\n await this.loadConcurencyLimiter.run(async () => {\r\n if (this.lastRefreshSymbol != refreshSymbol) return;\r\n\r\n let data = await this.datasource.get(this);\r\n if (this.lastRefreshSymbol != refreshSymbol) return;\r\n\r\n this.currentRows = data.rows;\r\n this.fillDataById(data.rows);\r\n this.total = data.total;\r\n this.insideView.loadData(data, this.start, this.limit, this.infiniteScrollEnabled);\r\n this.pagination.currentPage = Math.floor(this.start / this.limit);\r\n this.pagination.totalPages = Math.ceil(this.total / this.limit);\r\n this.pagination.render();\r\n });\r\n }\r\n\r\n\r\n while (this.filterShortContainer.firstChild) {\r\n this.filterShortContainer.firstChild.remove()\r\n }\r\n if (this.columnFilters.size) {\r\n this.filterShortContainer.append((0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('span', {text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.filtersCount') + ': ' + this.columnFilters.size}));\r\n const clearButton = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('button', {text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.clearFilters')});\r\n clearButton.onclick = () => {\r\n this.columnFilters.clear();\r\n this.refresh();\r\n }\r\n this.filterShortContainer.append(clearButton);\r\n }\r\n if (this.paramsInUrl) {\r\n this.setUrl();\r\n }\r\n if (this.paramsInLocalStorage) {\r\n this.setLocalStorage();\r\n }\r\n }\r\n\r\n setUrl() {\r\n const query = new URLSearchParams(document.location.search)\r\n const prev = Object.fromEntries([...query]);\r\n const next = new URLSearchParams(this.serializeParams(prev))\r\n console.log('dddddcccc')\r\n console.log(query)\r\n if (prev.toString() !== next.toString()) {\r\n const url = new URL(document.location);\r\n url.search = next.toString();\r\n history.pushState(null, '', url.toString());\r\n }\r\n }\r\n\r\n setLocalStorage() {\r\n const prev = JSON.parse(localStorage.getItem('objectList_params_' + this.paramsInLocalStorage));\r\n const next = this.serializeParams(prev);\r\n if (JSON.stringify(prev) !== JSON.stringify(next)) {\r\n localStorage.setItem('objectList_params_' + this.paramsInLocalStorage, JSON.stringify(next));\r\n }\r\n }\r\n\r\n serializeParams(old = {}) {\r\n old = old || {};\r\n let ret = {};\r\n let changed = false;\r\n var visibleColumns = this.visibleColumns.map(x => x.dataName ?? x.sortName).join();\r\n if (old.visibleColumns || this.hiddenColumns.size || this.columnsReorderedChanged) {\r\n ret.visibleColumns = visibleColumns;\r\n changed = true;\r\n\r\n }\r\n if (old.sort || this.sort?.col) {\r\n ret.sort = this.sort?.col;\r\n\r\n }\r\n if (old.sortDesc == 'true' || this.sort?.desc) {\r\n ret.sortDesc = this.sort?.desc ? 'true' : 'false';\r\n\r\n\r\n }\r\n if (old.columnFilters || this.columnFilters) {\r\n ret.columnFilters = JSON.stringify(Array.from(this.columnFilters.entries()));\r\n\r\n }\r\n\r\n if (old.insideView || this.insideViewName) {\r\n ret.insideView = this.insideViewName;\r\n }\r\n const currentDate = new Date().toISOString().substring(0, 7);\r\n if (old.date || this.date != currentDate) {\r\n ret.date = this.date;\r\n }\r\n return ret;\r\n }\r\n\r\n get insideViewName() {\r\n if (this.insideViewClass == _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView) {\r\n if (this.insideViewParams?.wide)\r\n return 'tableWideView';\r\n else\r\n return 'tableView'\r\n } else {\r\n return 'listView'\r\n }\r\n }\r\n\r\n set insideViewName(value) {\r\n if (this.insideViewName == value) return;\r\n if (value == 'tableView') {\r\n this.insideViewClass = _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView\r\n this.insideViewParams = {wide: false}\r\n } else if (value == 'tableWideView') {\r\n this.insideViewClass = _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView\r\n this.insideViewParams = {wide: true}\r\n } else if (value == 'listView') {\r\n this.insideViewClass = _listView_js__WEBPACK_IMPORTED_MODULE_1__.ListView\r\n this.insideViewParams = {}\r\n } else if (value == 'calendarView') {\r\n this.insideViewClass = _calendarView_js__WEBPACK_IMPORTED_MODULE_9__.CalendarView\r\n this.insideViewParams = {}\r\n }\r\n }\r\n\r\n readUrl() {\r\n\r\n const query = new URLSearchParams(document.location.search)\r\n const params = Object.fromEntries([...query]);\r\n this.applyParams(params)\r\n }\r\n\r\n applyParams(params) {\r\n if (params?.visibleColumns) {\r\n const splitted = params.visibleColumns.split(',');\r\n this.hiddenColumns = new Set(this.columns.map(x => x.dataName ?? x.sortName));\r\n for (const name of splitted) {\r\n this.hiddenColumns.delete(name);\r\n }\r\n for (let i = splitted.length - 1; i > 0; i--) {\r\n const column = this.columnsReordered.find(x => (x.dataName ?? x.sortName) == splitted[i - 1]);\r\n const next = this.columnsReordered.find(x => (x.dataName ?? x.sortName) == splitted[i]);\r\n if (column) {\r\n this.columnsReordered.splice(this.columnsReordered.indexOf(column), 1);\r\n if (next)\r\n this.columnsReordered.splice(this.columnsReordered.indexOf(next), 0, column);\r\n else\r\n this.columnsReordered.push(column)\r\n this.columnsReorderedChanged = true;\r\n }\r\n }\r\n }\r\n if (params?.sort) {\r\n this.sort = {\r\n col: params.sort,\r\n desc: params.sortDesc === 'true'\r\n };\r\n }\r\n if (params?.columnFilters) {\r\n this.columnFilters = new Map(JSON.parse(params.columnFilters));\r\n }\r\n if (params?.insideView) {\r\n this.insideViewName = params.insideView;\r\n }\r\n if (params?.date) {\r\n this.date = params.date;\r\n }\r\n }\r\n\r\n initInsideView() {\r\n if (this.insideView) {\r\n this.insideView.remove();\r\n }\r\n this.insideView = new this.insideViewClass(this, this.insideViewParams);\r\n this.insertBefore(this.insideView, this.foot);\r\n this.insideView.refresh = () => this.refresh();\r\n this.insideView.onPaginationChanged = (start, limit) => {\r\n if (this.start != start) {\r\n this.start = start;\r\n //this.limit=limit;\r\n this.refresh();\r\n }\r\n }\r\n }\r\n\r\n fillDataById(rows) {\r\n for (let row of rows) {\r\n this.dataById.set(parseInt(row.id), row);\r\n }\r\n }\r\n\r\n getSelectedData() {\r\n let data = Array.from(this.dataById).filter(([id, row]) => this.selected.has(id)).map(([id, row]) => row);\r\n if (data.length > 0) return data;\r\n else if (this.dataById[this.selectedMain])\r\n return [this.dataById[this.selectedMain]]\r\n else return [];\r\n }\r\n\r\n initFoot() {\r\n this.foot = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('.foot');\r\n this.append(this.foot);\r\n let menuButton = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('button.menuButton span.icon-settings');\r\n this.foot.append(menuButton)\r\n menuButton.onclick = e => this.showConfigPopup();\r\n this.pagination = new _paginationButtons_js__WEBPACK_IMPORTED_MODULE_3__.PaginationButtons();\r\n this.pagination.onpageclick = (page) => {\r\n this.start = page * this.limit;\r\n this.refresh();\r\n }\r\n this.foot.append(this.pagination);\r\n this.dateInput = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('input', {type: 'month', value: new Date().toISOString().substring(0, 7)});\r\n this.dateInput.onchange = date => {\r\n this.start = 0;\r\n this.date = this.dateInput.value;\r\n this.refresh();\r\n }\r\n this.foot.append(this.dateInput);\r\n this.filterShortContainer = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('.filterShortContainer');\r\n this.foot.append(this.filterShortContainer);\r\n this.searchForm = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('form', {className: 'search'});\r\n this.foot.append(this.searchForm);\r\n this.searchForm.onsubmit = e => e.preventDefault();\r\n const searchInput = (0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)('input', {\r\n name: 'search',\r\n type: 'search',\r\n placeholder: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.search')\r\n });\r\n this.searchForm.append((0,fast_creator__WEBPACK_IMPORTED_MODULE_8__.create)(searchInput));\r\n searchInput.oninput = e => {\r\n this.start = 0;\r\n this.refresh();\r\n }\r\n\r\n }\r\n\r\n get search() {\r\n if (!this.foot) return '';\r\n const searchForm = this.foot.querySelector('.search');\r\n if (!searchForm) return '';\r\n return searchForm.search.value;\r\n }\r\n\r\n showGlobalContextMenu(e) {\r\n let elements = [{\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.paginationMode'),\r\n icon: 'icon-pagination',\r\n onclick: () => {\r\n this.infiniteScrollEnabled = false;\r\n this.refresh();\r\n }\r\n }, {\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.scrollMode'),\r\n icon: 'icon-scroll',\r\n onclick: () => {\r\n this.infiniteScrollEnabled = true;\r\n this.refresh();\r\n }\r\n }, {\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.tableView'),\r\n icon: 'icon-table',\r\n onclick: () => {\r\n this.insideViewClass = _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView;\r\n this.refresh();\r\n }\r\n }, {\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.listView'),\r\n icon: 'icon-table',\r\n onclick: () => {\r\n this.insideViewClass = _listView_js__WEBPACK_IMPORTED_MODULE_1__.ListView;\r\n this.refresh();\r\n }\r\n }];\r\n if (this.allowTableEdit) {\r\n elements.push({\r\n text: (0,_i18n_xml__WEBPACK_IMPORTED_MODULE_2__.t)('objectList.startMultiEdit'),\r\n icon: 'icon-edit',\r\n onclick: () => {\r\n this.insideViewClass = _tableView_js__WEBPACK_IMPORTED_MODULE_0__.TableView;\r\n this.refresh();\r\n this.insideView.startMultiEdit();\r\n }\r\n });\r\n }\r\n _green_code_studio_context_menu_dist_index_mjs__WEBPACK_IMPORTED_MODULE_4__.ContextMenu.openContextMenu(e, elements);\r\n }\r\n\r\n resize() {\r\n let limit = this.limit;\r\n this.refreshLimit();\r\n if (limit != this.limit) {\r\n this.refresh();\r\n }\r\n }\r\n\r\n multiEditChanged(id, data, save = false) {\r\n this.datasource.multiEditChanged(id, data, save);\r\n }\r\n\r\n showConfigPopup() {\r\n if (this.querySelector('config-popup')) {\r\n this.querySelector('config-popup').remove()\r\n } else {\r\n const popup = new _ConfigPopup_js__WEBPACK_IMPORTED_MODULE_7__.ConfigPopup(this)\r\n this.append(popup)\r\n }\r\n }\r\n\r\n gotoUrl(url) {\r\n window.location.href = url;\r\n }\r\n\r\n onkeydown(e) {\r\n if (e.ctrlKey) {\r\n if (e.key == 'ArrowLeft' || e.key == 'ArrowRight') {\r\n let page = Math.floor(this.start / this.limit);\r\n page += (e.key == 'ArrowLeft' ? -1 : 1);\r\n if (page < 0) page = 0;\r\n else if (page > 0 && page > Math.ceil(this.total / this.limit) - 1) page = Math.ceil(this.total / this.limit) - 1;\r\n this.start = page * this.limit;\r\n this.refresh();\r\n }\r\n }\r\n }\r\n\r\n\r\n reorderColumns(column, next) {\r\n console.log('reorderColumns')\r\n if (column) {\r\n this.columnsReordered.splice(this.columnsReordered.indexOf(column), 1);\r\n if (next)\r\n this.columnsReordered.splice(this.columnsReordered.indexOf(next), 0, column);\r\n else\r\n this.columnsReordered.push(column)\r\n\r\n this.columnsReorderedChanged = true;\r\n if (this.insideView.setColumnsWidths) {\r\n this.insideView.setColumnsWidths()\r\n }\r\n }\r\n }\r\n}\r\n\r\ncustomElements\r\n .define(\r\n 'data-view'\r\n ,\r\n ObjectsList\r\n )\r\n;\r\n\n\n//# sourceURL=webpack://@green-code-studio/objects-list/./src/objectsList.js?");
188
188
 
189
189
  /***/ }),
190
190
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@green-code-studio/objects-list",
3
- "version": "1.12.1",
3
+ "version": "1.12.3",
4
4
  "main": "src/index.js",
5
5
  "author": "Mateusz Krawczyk",
6
6
  "license": "MIT",
@@ -32,6 +32,7 @@ export class CalendarView extends AbstractView {
32
32
  startDay = new Date(this.objectsList.date)
33
33
  }
34
34
  startDay.setDate(1);
35
+ const logicalStartDate = new Date(startDay);
35
36
 
36
37
  startDay.setDate(startDay.getDate() - startDay.getDay() + 1);
37
38
  for (let i = 0; i < 7 * 6; i++) {
@@ -41,7 +42,7 @@ export class CalendarView extends AbstractView {
41
42
  data: {date: day.toISOString().substring(0, 10)},
42
43
  text: day.toISOString().substring(0, 10)
43
44
  })
44
- dayElement.classList.toggle('outsideRange', day.getMonth() != startDay.getMonth());
45
+ dayElement.classList.toggle('outsideRange', day.getMonth() != logicalStartDate.getMonth());
45
46
  this.body.append(dayElement)
46
47
  for (let item of data.rows.filter(r => this.objectsList.dateRowCallback(r).toISOString().substring(0, 10) == day.toISOString().substring(0, 10))) {
47
48
  const itemElement = create('.item')
@@ -208,6 +208,10 @@ export class ObjectsList extends HTMLElement {
208
208
  if (old.insideView || this.insideViewName) {
209
209
  ret.insideView = this.insideViewName;
210
210
  }
211
+ const currentDate = new Date().toISOString().substring(0, 7);
212
+ if (old.date || this.date != currentDate) {
213
+ ret.date = this.date;
214
+ }
211
215
  return ret;
212
216
  }
213
217
 
@@ -278,6 +282,9 @@ export class ObjectsList extends HTMLElement {
278
282
  if (params?.insideView) {
279
283
  this.insideViewName = params.insideView;
280
284
  }
285
+ if (params?.date) {
286
+ this.date = params.date;
287
+ }
281
288
  }
282
289
 
283
290
  initInsideView() {