@galadrim/galadmin 0.0.47 → 0.0.54

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.
Files changed (24) hide show
  1. package/dist/tsconfig.tsbuildinfo +1 -1
  2. package/dist/types/config.d.ts +3 -1
  3. package/dist/utils/dbManager.js +1 -0
  4. package/dist/utils/dbManager.js.map +1 -1
  5. package/package.json +1 -1
  6. package/src/front/build/asset-manifest.json +7 -7
  7. package/src/front/build/index.html +1 -1
  8. package/src/front/build/static/js/{2.510c122a.chunk.js → 2.a36e796c.chunk.js} +3 -3
  9. package/src/front/build/static/js/{2.510c122a.chunk.js.LICENSE.txt → 2.a36e796c.chunk.js.LICENSE.txt} +0 -0
  10. package/src/front/build/static/js/{2.510c122a.chunk.js.map → 2.a36e796c.chunk.js.map} +1 -1
  11. package/src/front/build/static/js/{main.7ced8aa7.chunk.js → main.435f24e1.chunk.js} +2 -2
  12. package/src/front/build/static/js/main.435f24e1.chunk.js.map +1 -0
  13. package/src/front/node_modules/.cache/.eslintcache +1 -1
  14. package/src/front/node_modules/.cache/babel-loader/5c2cc169da1cbf30356cdeadda534169.json +1 -0
  15. package/src/front/node_modules/.cache/babel-loader/6d29194e9975f70d074bf162e23886ed.json +1 -0
  16. package/src/front/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/76/89/e60c29e9d09fe2bfe4d64ee8814e0169d8a76a3fa08b32dee15d5ab454dfddd51c87de10c6b935c3b89ddd758a8b9105ba4ebd16a2e14cad9face454f5ce +1 -0
  17. package/src/front/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/80/14/f89b5000136bcab7e841402511e7e2bcbfb08f6605926578ba9a1929f3dd609aa2f82e957a405687e483efe592b680f55e33b414aa640a8f39a59e57b535 +1 -0
  18. package/src/front/node_modules/.cache/terser-webpack-plugin/index-v5/3b/6d/4bfed5b8d4522c713b88981d22cf3a01c8070de081205f08d72bde2b624d +2 -0
  19. package/src/front/node_modules/.cache/terser-webpack-plugin/index-v5/a9/2b/f75db8fae988b6420aaee662e604df0969612b2f29af99f9ad3a53ae521b +2 -0
  20. package/src/front/src/components/panels/GalleryPanel.js +2 -2
  21. package/src/front/src/components/panels/TablePanel.js +4 -1
  22. package/src/types/config.ts +6 -4
  23. package/src/utils/dbManager.ts +2 -1
  24. package/src/front/build/static/js/main.7ced8aa7.chunk.js.map +0 -1
@@ -1,2 +1,2 @@
1
- (this["webpackJsonpgaladmin-front"]=this["webpackJsonpgaladmin-front"]||[]).push([[0],{15:function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_exports__.a=function(expression,data){try{var varString="";for(var key in data)varString+="var "+key+" = "+("string"===typeof data[key]?"'"+data[key].replace(/'/g,"\\'").replace(/\n/g,"<br>").replace(/\r/g,"")+"'":"object"===typeof data[key]?JSON.stringify(data[key]):data[key])+";";return eval(varString+expression)}catch(e){return console.log(varString+expression),console.error(e),"Error"}}},49:function(e,t,n){},50:function(e,t,n){},7:function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return ConfigContext})),__webpack_require__.d(__webpack_exports__,"b",(function(){return ConfigProvider}));var _home_runner_work_galadmin_galadmin_src_front_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),react__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1),react__WEBPACK_IMPORTED_MODULE_1___default=__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__),axios__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(3),axios__WEBPACK_IMPORTED_MODULE_2___default=__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_2__),react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(0),react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3___default=__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__),ConfigContext=Object(react__WEBPACK_IMPORTED_MODULE_1__.createContext)(null),ConfigProvider=function ConfigProvider(props){var _useState=Object(react__WEBPACK_IMPORTED_MODULE_1__.useState)(null),_useState2=Object(_home_runner_work_galadmin_galadmin_src_front_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__.a)(_useState,2),config=_useState2[0],setConfig=_useState2[1];return Object(react__WEBPACK_IMPORTED_MODULE_1__.useEffect)((function(){axios__WEBPACK_IMPORTED_MODULE_2___default.a.get("/config").then((function(response){var _config=eval("("+response.data.config+")");if(setConfig(_config),_config.googleMapsKey){var script=document.createElement("script");return script.src="https://maps.googleapis.com/maps/api/js?key="+_config.googleMapsKey+"&libraries=places,autocomplete",document.body.appendChild(script),function(){document.body.removeChild(script)}}}))}),[]),config?Object(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ConfigContext.Provider,{value:config,children:props.children}):null}},75:function(e,t,n){"use strict";n.r(t);var c=n(1),r=n.n(c),a=n(39),i=n.n(a),l=(n(49),n(2)),s=n(8),o=n(6),u=(n(50),n(7)),d=n(0),j=function(e){var t=e.view;return Object(d.jsxs)(d.Fragment,{children:[Object(d.jsx)("div",{class:"sidebarIcon",children:Object(d.jsx)("i",{class:"fas fa-".concat(t.icon||"square")})}),Object(d.jsx)("div",{class:"sidebarLabel",children:t.label})]})},b=function(){var e=Object(o.g)(),t=Object(c.useContext)(u.a),n=Object(o.f)();return Object(d.jsxs)("div",{class:"sidebar",children:[t.logo?Object(d.jsx)("img",{src:t.logo,class:"logo"}):null,Object(d.jsx)("div",{class:"sidebarTitle",children:t.name}),Object(d.jsx)("div",{class:"sidebarSubtitle",children:"Back-office"}),t.views.filter((function(e){return!e.hidden})).map((function(t,c){if("link"===t.type)return Object(d.jsx)("a",{href:t.src,children:Object(d.jsx)("div",{class:"sidebarItem",children:Object(d.jsx)("div",{children:Object(d.jsx)(j,{view:t})})})},c);if("iframe"===t.type){var r=e.pathname==="/iframe/".concat(c);return Object(d.jsx)(s.b,{to:"/iframe/".concat(c),children:Object(d.jsx)("div",{class:"sidebarItem ".concat(r?"active":""),children:Object(d.jsx)("div",{children:Object(d.jsx)(j,{view:t})})})},c)}if("custom"===t.type){var a=e.pathname==="/customView/".concat(c);return Object(d.jsx)(s.b,{to:"/customView/".concat(c),children:Object(d.jsx)("div",{class:"sidebarItem ".concat(a?"active":""),children:Object(d.jsx)("div",{children:Object(d.jsx)(j,{view:t})})})},c)}if("table"===t.type){var i=e.pathname.startsWith("/records/".concat(c))||e.pathname==="/createRecord/".concat(c)||e.pathname.startsWith("/record/".concat(c))||e.pathname.startsWith("/editRecord/".concat(c));return Object(d.jsx)("div",{onClick:function(){return n.push("/records/".concat(c))},children:Object(d.jsxs)("div",{class:"sidebarItem ".concat(i?"active":""),children:[Object(d.jsxs)("div",{children:[Object(d.jsx)("div",{class:"notificationWrapper"}),Object(d.jsx)(j,{view:t})]}),t.subviews?Object(d.jsxs)(d.Fragment,{children:[Object(d.jsx)("div",{class:"subviewsSeparator"}),t.subviews.map((function(t,r){var a=e.pathname=="/records/".concat(c,"/").concat(r);return Object(d.jsx)("div",{onClick:function(e){n.push("/records/".concat(c,"/").concat(r)),e.stopPropagation()},children:Object(d.jsxs)("div",{"data-subview-index":r,class:a?"active":"",children:[Object(d.jsx)("div",{class:"notificationWrapperForSubview"}),t.label]})})}))]}):null]},c)})}})),t.hideBranding?null:Object(d.jsxs)("div",{class:"sidebarBranding",children:["Made with ",Object(d.jsx)("i",{class:"fas fa-heart"})," by Galadrim"]})]})},f=n(16),v=n(5),O=n.n(v),p=n(10),h=n(23),x=n(3),m=n.n(x),_=n(4),g=function(e){var t=e.column,n=e.onChange,r=e.initialData,a=Object(c.useRef)(null);return Object(c.useEffect)((function(){return a.current&&(window.$(a.current).spectrum({preferredFormat:"hex",showInput:!0,chooseText:"OK",cancelText:"Annuler",color:null===r||void 0===r?void 0:r[t.name]}),window.$(a.current).on("change.spectrum",(function(e,c){n(Object(_.a)({},t.name,c.toHexString()))}))),function(){return window.$(a.current).off()}}),[a.current]),Object(d.jsx)("input",{ref:a,type:"text",onChange:function(e){return n(Object(_.a)({},t.name,e.target.value))}})};window.Quill.prototype.getHTML=function(){return this.container.querySelector(".ql-editor").innerHTML};var w=function(e){var t=e.column,n=e.onChange,r=e.initialData,a=Object(c.useRef)(null);return Object(c.useEffect)((function(){if(a.current&&!a.current.editor){var e=new window.Quill(a.current,{theme:"snow",modules:{toolbar:[[{header:[1,2,3,!1]}],["bold","italic","underline","link"],["image"],[{align:[]}],[{list:"ordered"},{list:"bullet"}],["clean"]]}});if(null===r||void 0===r?void 0:r[t.contentField])try{e.setContents(JSON.parse(null===r||void 0===r?void 0:r[t.contentField]))}catch(c){}return e.on("text-change",(function(){var c;n((c={},Object(_.a)(c,t.htmlField,e.getHTML()),Object(_.a)(c,t.contentField,JSON.stringify(e.getContents())),c))})),a.current.editor=e,e.off()}}),[a.current]),Object(d.jsx)("div",{class:"quillContainer",children:Object(d.jsx)("div",{class:"quill",ref:a,style:t.height?{height:t.height}:null})})},y=function(e){var t=e.column,n=e.onChange,r=e.initialData,a=e.withTime,i=Object(c.useRef)(null);return Object(c.useEffect)((function(){if(i.current){var e=window.$(i.current).datepicker({language:"fr",autoClose:!0,onSelect:function(e,c){n(Object(_.a)({},t.name,window.moment(c).format(a?null:"YYYY-MM-DD")))}});(null===r||void 0===r?void 0:r[t.name])&&e.data("datepicker").selectDate(new Date(null===r||void 0===r?void 0:r[t.name]))}}),[i.current]),Object(d.jsx)("div",{children:Object(d.jsx)("input",{type:"text",ref:i,"data-timepicker":a?"true":"false"})})},C=function(e){var t=e.column,n=e.onChange,r=e.initialData,a=Object(c.useRef)(null);return Object(c.useEffect)((function(){if(a.current&&window.google){var e=new window.google.maps.places.Autocomplete(a.current,t.componentRestrictions?{componentRestrictions:t.componentRestrictions}:{});e.addListener("place_changed",(function(){var c=e.getPlace();if(0!==c.length&&c.geometry){var r={latitudeField:function(e){return e.geometry.location.lat()},longitudeField:function(e){return e.geometry.location.lng()},addressField:function(e){return e.formatted_address},streetNumberField:function(e){var t;return null===(t=e.address_components.find((function(e){return"street_number"===e.type})))||void 0===t?void 0:t.long_name},routeField:function(e){var t;return null===(t=e.address_components.find((function(e){return"route"===e.type})))||void 0===t?void 0:t.long_name},localityField:function(e){var t;return null===(t=e.address_components.find((function(e){return"locality"===e.type})))||void 0===t?void 0:t.long_name},administrativeAreaLevel2Field:function(e){var t;return null===(t=e.address_components.find((function(e){return"administrative_area_level_2"===e.type})))||void 0===t?void 0:t.long_name},administrativeAreaLevel1Field:function(e){var t;return null===(t=e.address_components.find((function(e){return"administrative_area_level_1"===e.type})))||void 0===t?void 0:t.long_name},countryField:function(e){var t;return null===(t=e.address_components.find((function(e){return"country"===e.type})))||void 0===t?void 0:t.long_name},postalCodeField:function(e){var t;return null===(t=e.address_components.find((function(e){return"postal_code"===e.type})))||void 0===t?void 0:t.long_name}},i={};for(var l in r)t[l]&&(i[t[l]]=r[l](c));a.current.value=c.formatted_address,n(i)}}))}}),[a.current]),Object(c.useEffect)((function(){var e,t=function(){a.current&&(a.current.value="")};return null===a||void 0===a||null===(e=a.current)||void 0===e||e.addEventListener("focusout",t),function(){var e;return null===a||void 0===a||null===(e=a.current)||void 0===e?void 0:e.removeEventListener("focusout",t)}}),[a.current]),Object(d.jsx)("div",{children:Object(d.jsx)("input",{type:"text",placeholder:"",ref:a,defaultValue:null===r||void 0===r?void 0:r[t.name]})})},I=function(e){var t=e.column,n=e.onChange,r=e.initialData,a=Object(c.useRef)(null),i=Object(c.useState)(!1),s=Object(l.a)(i,2),o=s[0],u=s[1],j=Object(c.useState)(null===r||void 0===r?void 0:r[t.name]),b=Object(l.a)(j,2),f=b[0],v=b[1],h=function(){var e=Object(p.a)(O.a.mark((function e(){var c,r,i;return O.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return c=new FormData(a.current),u(!0),e.next=4,m()({method:"post",url:"/uploadFile?subdirectory=".concat(t.subdirectory,"&publicPath=").concat(t.publicPath,"&s3Config=").concat(encodeURI(JSON.stringify(t.s3Config))),data:c,headers:{"Content-Type":"multipart/form-data"}});case 4:r=e.sent,i=Object(_.a)({},t.name,r.data.path),t.aspectRatioField&&(i[t.aspectRatioField]=r.data.aspectRatio),t.originalNameField&&(i[t.originalNameField]=r.data.originalFilename),n(i),u(!1),v(r.data.path);case 11:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),x=Math.random().toString();return Object(d.jsx)("div",{class:"fileInputContainer",children:Object(d.jsxs)("label",{htmlFor:x,children:[Object(d.jsx)("form",{ref:a,children:Object(d.jsx)("input",{type:"file",id:x,style:{display:"none"},name:"file",onChange:h})}),Object(d.jsxs)("div",{class:"fileInputContent ".concat(f?"":"clickToSelectFile"),children:[o?Object(d.jsx)("i",{class:"fa fa-circle-notch fa-spin"}):null,o||f?null:Object(d.jsx)("div",{children:"Cliquez pour s\xe9lectionner un fichier"}),!o&&f?Object(d.jsxs)("div",{class:"nonImageFileOutput",children:[Object(d.jsx)("span",{children:"Fichier t\xe9l\xe9charg\xe9"}),Object(d.jsx)("div",{class:"deleteFile",onClick:function(e){v(null);var c=Object(_.a)({},t.name,null);t.aspectRatioField&&(c[t.aspectRatioField]=null),t.originalNameField&&(c[t.originalNameField]=null),n(c),e.preventDefault()},children:Object(d.jsx)("i",{class:"fal fa-trash-alt"})})]}):null]})]})})},k=function(e){var t=e.column,n=e.onChange,r=e.initialData,a=Object(c.useState)(null),i=Object(l.a)(a,2),s=i[0],u=i[1],j=Object(o.h)().viewIndex;return Object(c.useEffect)((function(){m.a.post("/foreignSelectRecords",{viewIndex:j,columnId:t.__id__}).then((function(e){var c;u(e.data),n(Object(_.a)({},t.name,(null===r||void 0===r?void 0:r[t.name])||(t.optional?"NULL":null===(c=e.data[0])||void 0===c?void 0:c.value)))}))}),[]),null===s?Object(d.jsx)("i",{class:"fa fa-circle-notch fa-spin",style:{color:"#536579"}}):Object(d.jsxs)("select",{onChange:function(e){return n(Object(_.a)({},t.name,e.target.value))},defaultValue:null===r||void 0===r?void 0:r[t.name],children:[t.optional?Object(d.jsx)("option",{value:"NULL",children:"-"}):null,s.map((function(e){return Object(d.jsx)("option",{value:e.value,children:e.label},e.value)}))]})},E=function(e){var t,n=e.column,r=e.onChange,a=e.initialData,i=Object(c.useState)([]),s=Object(l.a)(i,2),u=s[0],j=s[1],b=Object(o.h)().viewIndex,f=Object(c.useState)(""),v=Object(l.a)(f,2),O=v[0],p=v[1],h=Object(c.useRef)(null),x=Object(c.useRef)(!1);Object(c.useEffect)((function(){m.a.post("/foreignSelectRecords",{viewIndex:b,columnId:n.__id__,query:O}).then((function(e){j(e.data)}))}),[O]),Object(c.useEffect)((function(){var e,t=function(){h.current&&!x.current&&(h.current.value="")};return null===h||void 0===h||null===(e=h.current)||void 0===e||e.addEventListener("focusout",t),function(){var e;return null===h||void 0===h||null===(e=h.current)||void 0===e?void 0:e.removeEventListener("focusout",t)}}),[h.current]);var g=Math.random();return null===u?Object(d.jsx)("i",{class:"fa fa-circle-notch fa-spin",style:{color:"#536579"}}):Object(d.jsxs)("div",{children:[Object(d.jsx)("input",{type:"text",list:g,ref:h,onChange:function(e){var t,c,a=null!==(t=null===(c=u.find((function(t){return t.label===e.target.value})))||void 0===c?void 0:c.value)&&void 0!==t?t:null;x.current=!!a,p(e.target.value),r(Object(_.a)({},n.name,a))},defaultValue:null===(t=u.find((function(e){return e.value===(null===a||void 0===a?void 0:a[n.name])})))||void 0===t?void 0:t.label}),Object(d.jsxs)("datalist",{id:g,children:[n.optional?Object(d.jsx)("option",{value:"NULL",children:"-"}):null,u.map((function(e){return Object(d.jsx)("option",{value:e.label,children:e.label},e.value)}))]})]})},D=function(e){var t=e.column,n=e.onChange,c=e.initialData,r=t.dataType;return["int","double","float","decimal"].includes(r)?Object(d.jsx)("input",{type:"number",onChange:function(e){return n(Object(_.a)({},t.name,e.target.value))},defaultValue:null===c||void 0===c?void 0:c[t.name]}):"tinyint"===r?Object(d.jsxs)("select",{onChange:function(e){return n(Object(_.a)({},t.name,e.target.value))},defaultValue:null===c||void 0===c?void 0:c[t.name],children:[t.optional?Object(d.jsx)("option",{value:"NULL",children:"-"}):null,Object(d.jsx)("option",{value:"0",children:"Non"}),Object(d.jsx)("option",{value:"1",children:"Oui"})]}):"select"===r&&Array.isArray(t.options)?Object(d.jsxs)("select",{onChange:function(e){return n(Object(_.a)({},t.name,e.target.value))},defaultValue:null===c||void 0===c?void 0:c[t.name],children:[t.optional?Object(d.jsx)("option",{value:"NULL",children:"-"}):null,t.options.map((function(e){return Object(d.jsx)("option",{value:e,children:e},e)}))]}):"select"===r?Object(d.jsxs)("select",{onChange:function(e){return n(Object(_.a)({},t.name,e.target.value))},defaultValue:null===c||void 0===c?void 0:c[t.name],children:[t.optional?Object(d.jsx)("option",{value:"NULL",children:"-"}):null,Object.keys(t.options).map((function(e){return Object(d.jsx)("option",{value:e,children:t.options[e]},e)}))]}):"datalist"===r?Object(d.jsx)(E,{column:t,onChange:n,initialData:c}):"foreign"===r?Object(d.jsx)(k,{column:t,onChange:n,initialData:c}):"address"===r?Object(d.jsx)(C,{column:t,onChange:n,initialData:c}):"color"===r?Object(d.jsx)(g,{column:t,onChange:n,initialData:c}):"file"===r?Object(d.jsx)(I,{column:t,onChange:n,initialData:c}):"datetime"===r?Object(d.jsx)(y,{column:t,onChange:n,initialData:c,withTime:!0}):"date"===r?Object(d.jsx)(y,{column:t,onChange:n,initialData:c,withTime:!1}):"textarea"===r?Object(d.jsx)("textarea",{onChange:function(e){return n(Object(_.a)({},t.name,e.target.value))},defaultValue:null===c||void 0===c?void 0:c[t.name]}):"richText"===r?Object(d.jsx)(w,{column:t,onChange:n,initialData:c}):Object(d.jsx)("input",{type:"text",onChange:function(e){return n(Object(_.a)({},t.name,e.target.value))},defaultValue:null===c||void 0===c?void 0:c[t.name]})},S=function(e){var t=e.text,n=Object(c.useState)(!1),r=Object(l.a)(n,2),a=r[0],i=r[1];return Object(d.jsxs)("div",{class:"labelTooltipContainer",onMouseLeave:function(){return i(!1)},children:[Object(d.jsx)("div",{class:"labelTooltipIcon",onMouseEnter:function(){return i(!0)},children:Object(d.jsx)("i",{class:"fa fa-question-circle"})}),a?Object(d.jsx)("div",{class:"tooltip",children:t}):null]})},M=function(){var e,t=Object(c.useContext)(u.a),n=Object(o.h)(),r=n.viewIndex,a=n.panelIndex,i=n.recordId,s=Object(o.f)(),j=t.views[r],b=a?j.recordViewPanels[a]:null,v=b?b.createConfig.columns:j.columns.filter((function(e){return e.dataType&&(!0===e.canEditOnCreation||!1!==e.canEdit)&&!e.hidden})),x={},_=Object(h.a)(v);try{for(_.s();!(e=_.n()).done;){var g=e.value;"tinyint"===g.dataType?x[g.name]=g.optional?"NULL":"0":"select"===g.dataType&&Array.isArray(g.options)?x[g.name]=g.options[0]:"select"===g.dataType&&(x[g.name]=Object.keys(g.options)[0]),g.defaultValue&&(x[g.name]=g.defaultValue)}}catch(M){_.e(M)}finally{_.f()}var w=Object(c.useRef)(x),y=Object(c.useState)(!1),C=Object(l.a)(y,2),I=C[0],k=C[1],E=function(){var e=Object(p.a)(O.a.mark((function e(){var t;return O.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:for(t in j.createFilters)w.current[t]=j.createFilters[t];return k(!0),e.prev=2,e.next=5,m.a.post("/createRecord",{viewIndex:r,panelIndex:a,recordId:i,data:w.current});case 5:k(!1),s.push("/records/".concat(r)),e.next=13;break;case 9:e.prev=9,e.t0=e.catch(2),e.t0.response.responseText&&window.swal({title:"Erreur",text:e.t0.response.responseText,dangerMode:!0}),k(!1);case 13:case"end":return e.stop()}}),e,null,[[2,9]])})));return function(){return e.apply(this,arguments)}}();return Object(d.jsxs)("div",{class:"view",children:[Object(d.jsx)("div",{class:"viewHeader",children:Object(d.jsx)("div",{class:"viewTitle",children:b?b.createConfig.label:"Cr\xe9er ".concat(j.aNewSingular)})}),Object(d.jsxs)("div",{class:"paddedView",children:[Object(d.jsx)("div",{class:"form",children:v.map((function(e,t){return Object(d.jsxs)("div",{class:"formElement",children:[Object(d.jsxs)("div",{class:"formLabel",children:[e.label,e.labelTooltip?Object(d.jsx)(S,{text:e.labelTooltip}):null]}),Object(d.jsx)("div",{class:"formInput",children:Object(d.jsx)(D,{column:e,onChange:function(e){w.current=Object(f.a)(Object(f.a)({},w.current),e)}})})]},t)}))}),Object(d.jsx)("div",{class:"button greenButton ".concat(I?"loading":""),onClick:E,children:I?"Sauvegarde en cours...":"Cr\xe9er"}),Object(d.jsx)("div",{class:"button",onClick:function(){return s.goBack()},children:"Annuler"})]})]})},T=function(){var e=Object(c.useContext)(u.a),t=Object(o.h)(),n=t.viewIndex,r=t.recordId,a=Object(o.f)(),i=e.views[n],s=Object(c.useState)(null),j=Object(l.a)(s,2),b=j[0],v=j[1],h=i.columns.filter((function(e){return e.dataType&&!1!==e.canEdit&&!e.hidden})),x=Object(c.useRef)({}),_=Object(c.useState)(!1),g=Object(l.a)(_,2),w=g[0],y=g[1];Object(c.useEffect)((function(){m.a.get("/record",{params:{viewIndex:n,recordId:r}}).then((function(e){x.current={},v(e.data)}))}),[n,r]);var C=function(){var e=Object(p.a)(O.a.mark((function e(){return O.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return y(!0),e.prev=1,e.next=4,m.a.post("/updateRecord",{viewIndex:n,primaryValue:r,data:x.current});case 4:y(!1),a.push("/record/".concat(n,"/").concat(r)),e.next=12;break;case 8:e.prev=8,e.t0=e.catch(1),e.t0.response.responseText&&window.swal({title:"Erreur",text:e.t0.response.responseText,dangerMode:!0}),y(!1);case 12:case"end":return e.stop()}}),e,null,[[1,8]])})));return function(){return e.apply(this,arguments)}}();return Object(d.jsxs)("div",{class:"view",children:[Object(d.jsx)("div",{class:"viewHeader",children:Object(d.jsx)("div",{class:"viewTitle",children:i.label})}),Object(d.jsx)("div",{class:"paddedView",children:b?Object(d.jsxs)(d.Fragment,{children:[Object(d.jsx)("div",{class:"form",children:h.map((function(e,t){return Object(d.jsxs)("div",{class:"formElement",children:[Object(d.jsxs)("div",{class:"formLabel",children:[e.label,e.labelTooltip?Object(d.jsx)(S,{text:e.labelTooltip}):null]}),Object(d.jsx)("div",{class:"formInput",children:Object(d.jsx)(D,{column:e,initialData:b,onChange:function(e){x.current=Object(f.a)(Object(f.a)({},x.current),e)}})})]},t)}))}),Object(d.jsx)("div",{class:"button greenButton ".concat(w?"loading":""),onClick:C,children:w?"Sauvegarde en cours...":"Sauvegarder"}),Object(d.jsx)("div",{class:"button",onClick:function(){return a.goBack()},children:"Annuler"})]}):null})]})},P=n(28),A=function(e){var t=e.view,n=e.viewIndex,r=e.subviewIndex,a=e.currentFilters,i=e.orderBy,s=e.isDesc,o=e.query,u=Object(c.useState)(!1),j=Object(l.a)(u,2),b=j[0],f=j[1];return Object(d.jsx)("div",{class:"downloadButton",onClick:function(){f(!0),m.a.post("/recordsExport",{viewIndex:n,subviewIndex:r,filters:a.map((function(e){return e.query})),orderBy:i,isDesc:s,query:o}).then((function(e){f(!1),window.download(e.data.content,t.label+".csv")}))},children:Object(d.jsx)("i",{class:"fa ".concat(b?"fa-spin fa-circle-notch":"fa-cloud-download")})})};function L(e){var t,n,r=Object(c.useRef)(null);return t=r,n=e.onOutsideClick,Object(c.useEffect)((function(){function e(e){t.current&&!t.current.contains(e.target)&&n()}return document.addEventListener("mousedown",e),function(){document.removeEventListener("mousedown",e)}}),[t]),Object(d.jsx)("div",{ref:r,children:e.children})}var R=function(e){var t=e.view,n=e.refreshData,r=e.onAddFilter,a=Object(c.useState)(!1),i=Object(l.a)(a,2),s=i[0],o=i[1],u=Object(c.useState)(null),j=Object(l.a)(u,2),b=j[0],f=j[1],v=Object(c.useState)("contains"),O=Object(l.a)(v,2),p=O[0],h=O[1],x=Object(c.useState)(null),m=Object(l.a)(x,2),_=m[0],g=m[1];return Object(d.jsx)(L,{onOutsideClick:function(){return o(!1)},children:Object(d.jsxs)("div",{class:"button openFilterPopup",onClick:function(){return o(!s)},children:[Object(d.jsx)("i",{class:"fas fa-filter"})," Ajouter un filtre",s?Object(d.jsxs)("div",{class:"addFilterPopup",onClick:function(e){return e.stopPropagation()},children:[Object(d.jsx)("div",{class:"filterLabel",children:"Champ"}),Object(d.jsxs)("select",{onChange:function(e){return f(e.target.value)},children:[Object(d.jsx)("option",{value:"",children:"S\xe9lectionnez un champ"}),t.columns.filter((function(e){return(e.searchableName||e.name)&&"foreign"!==e.dataType&&"datalist"!==e.dataType})).map((function(e){var t=e.searchableName||e.name;return Object(d.jsx)("option",{value:t,children:e.label},t)}))]}),Object(d.jsx)("div",{class:"filterLabel",children:"Op\xe9rateur"}),Object(d.jsxs)("select",{onChange:function(e){return h(e.target.value)},children:[Object(d.jsx)("option",{value:"contains",children:"contient"}),Object(d.jsx)("option",{value:"notContains",children:"ne contient pas"}),Object(d.jsx)("option",{value:"startsWith",children:"commence par"}),Object(d.jsx)("option",{value:"endsWith",children:"finit par"}),Object(d.jsx)("option",{value:"is",children:"est"}),Object(d.jsx)("option",{value:"isNot",children:"n'est pas"}),Object(d.jsx)("option",{value:"largerThan",children:"est sup\xe9rieur \xe0"}),Object(d.jsx)("option",{value:"smallerThan",children:"est inf\xe9rieur \xe0"})]}),Object(d.jsx)("div",{class:"filterLabel",children:"Valeur"}),Object(d.jsx)("input",{onChange:function(e){return g(e.target.value)}}),Object(d.jsx)("div",{class:"button greenButton",onClick:function(){if(b&&_){var e,c=null===(e=t.columns.find((function(e){return(e.searchableName||e.name)===b})))||void 0===e?void 0:e.label;"contains"===p?r({label:c+" contient "+_,query:b+" LIKE '%"+_+"%'"}):"notContains"===p?r({label:c+" ne contient pas "+_,query:b+" NOT LIKE '%"+_+"%'"}):"is"===p?r({label:c+" est "+_,query:b+" = '"+_+"'"}):"isNot"===p?r({label:c+" n'est pas "+_,query:b+" != '"+_+"'"}):"startsWith"===p?r({label:c+" commence par "+_,query:b+" LIKE '"+_+"%'"}):"endsWith"===p?r({label:c+" finit par "+_,query:b+" LIKE '%"+_+"'"}):"largerThan"===p?r({label:c+" sup\xe9rieur \xe0 "+_,query:b+" >= "+_}):"smallerThan"===p&&r({label:c+" inf\xe9rieur \xe0 "+_,query:b+" <= "+_}),f(null),g(null),o(!1),n()}},children:"Ajouter"})]}):null]})})},B=function(e){var t,n,r=e.viewIndex,a=e.selectedRecordIds,i=e.refreshData,s=Object(c.useContext)(u.a),o=s.views[r],j=Object(c.useState)(!1),b=Object(l.a)(j,2),f=b[0],v=b[1];return!s.hideMultiselect&&(!1!==o.canDelete||(null===(t=o.customActions)||void 0===t?void 0:t.length)>0)?Object(d.jsx)(L,{onOutsideClick:function(){return v(!1)},children:Object(d.jsxs)("div",{class:"actionButtonsContainer",children:[Object(d.jsx)("div",{class:"button openBulkActionsButton",onClick:function(){return v(!f)},children:"Actions"}),f?Object(d.jsxs)("div",{class:"bulkActions",children:[null===(n=o.customActions)||void 0===n?void 0:n.map((function(e,t){return Object(d.jsx)("div",{class:"action recordAction",onClick:(n=t,function(){v(!1),m.a.post("customAction",{viewIndex:r,actionIndex:n,selectedRecordIds:a}).then((function(){i()})).catch((function(){window.swal({title:"Erreur",text:"L'action a \xe9chou\xe9",dangerMode:!0})}))}),children:e.label});var n})),!1!==o.canDelete?Object(d.jsx)("div",{class:"action recordAction red",onClick:function(){window.swal({title:"\xcates-vous s\xfbr ?",text:"Une fois la suppression confirm\xe9e, il ne sera pas possible de revenir en arri\xe8re.",buttons:["Annuler","Oui"],dangerMode:!0}).then((function(e){e&&m.a.post("deleteRecords",{viewIndex:r,primaryValues:a}).then((function(){i()})).catch((function(){window.swal({title:"Erreur",text:"Suppression impossible",dangerMode:!0})}))}))},children:"Supprimer"}):null]}):null]})}):null},F=n(15),q=function(e,t,n){if(e.showAsPicture){var c=e.baseUrl+t[e.pathField];return t[e.pathField]?Object(d.jsx)("a",{href:c,target:"_blank",children:Object(d.jsx)("img",{src:"https://res.cloudinary.com/forest2/image/fetch/".concat(n?"w_60,h_30":"w_300,h_150",",c_fit/").concat(c)})}):null}if(e.formatValue)return Object(d.jsx)("div",{dangerouslySetInnerHTML:{__html:t["__formatValue-".concat(e.__id__,"__")]}});if(e.formattedValue)return Object(d.jsx)("div",{children:Object(F.a)(e.formattedValue,t)});if(e.action){if(e.actionDisplayCondition)if(!Object(F.a)(e.actionDisplayCondition,t))return"";var r=JSON.parse(JSON.stringify(e.data));for(var a in r)r[a]=Object(F.a)(r[a],t);return Object(d.jsx)("div",{class:"actionButton","data-route":'" + column.route + "',"data-data":'" + JSON.stringify(data) + "',children:e.action})}return"tinyint"===e.dataType?Object(d.jsx)("div",{children:1===t[e.name]?"Oui":"Non"}):"color"===e.dataType?Object(d.jsx)("div",{class:"colorPreview",style:{backgroundColor:t[e.name]}}):"richText"===e.dataType?Object(d.jsx)("div",{dangerouslySetInnerHTML:{__html:t[e.htmlField]}}):Object(d.jsx)("div",{children:t[e.name]})},V=function(){var e,t,n=Object(o.h)(),r=n.viewIndex,a=n.subviewIndex,i=Object(o.f)(),j=Object(c.useState)(1),b=Object(l.a)(j,2),f=b[0],v=b[1],O=Object(c.useState)([]),p=Object(l.a)(O,2),h=p[0],x=p[1],_=Object(c.useState)(null),g=Object(l.a)(_,2),w=g[0],y=g[1],C=Object(c.useState)(null),I=Object(l.a)(C,2),k=I[0],E=I[1],D=Object(c.useState)(null),S=Object(l.a)(D,2),M=S[0],T=S[1],L=Object(c.useState)([]),F=Object(l.a)(L,2),V=F[0],N=F[1],U=Object(c.useState)(null),W=Object(l.a)(U,2),K=W[0],H=W[1],J=Object(c.useContext)(u.a),Q=J.views[r],z=null===(e=Q.columns)||void 0===e?void 0:e.filter((function(e){return!e.hideInTable&&!e.hidden}));function Y(){H(null),m.a.post("/records",{viewIndex:r,subviewIndex:a,page:f,filters:h.map((function(e){return e.query})),orderBy:w,isDesc:k,query:M}).then((function(e){H(e.data)}))}return Object(c.useEffect)((function(){v(1),T(null),y(null),E(null),V.length>0&&N([]),h.length>0&&x([])}),[r]),Object(c.useEffect)((function(){Y()}),[r,a,f,M,h,w,k]),Object(d.jsxs)("div",{class:"view",children:[Object(d.jsxs)("div",{class:"scrollable",children:[Object(d.jsxs)("div",{class:"viewHeader",children:[Object(d.jsx)("div",{class:"viewTitle",children:Q.label}),Object(d.jsxs)("div",{class:"viewHeaderActions",children:[Object(d.jsxs)("div",{class:"searchBarContainer",children:[Object(d.jsx)("input",{type:"text",placeholder:"Rechercher",class:"searchBar",onChange:function(e){return T(e.target.value)}}),Object(d.jsx)("div",{class:"searchBarIcon",children:Object(d.jsx)("i",{class:"fa fa-search"})})]}),Object(d.jsx)(B,{viewIndex:r,selectedRecordIds:V,refreshData:Y}),Object(d.jsx)(R,{view:Q,refreshData:Y,onAddFilter:function(e){return x([].concat(Object(P.a)(h),[e]))}}),Object(d.jsx)(A,{view:Q,viewIndex:r,subviewIndex:a,currentFilters:h,orderBy:w,isDesc:k,query:M}),Q.canCreate?Object(d.jsx)(s.b,{to:"/createRecord/".concat(r),children:Object(d.jsx)("div",{class:"plusButton",children:Object(d.jsx)("i",{class:"fa fa-plus"})})}):null]})]}),h.length>0?Object(d.jsx)("div",{class:"filtersContainer",children:h.map((function(e,t){return Object(d.jsxs)("div",{class:"filterItem",children:[Object(d.jsx)("div",{class:"filterItemLabel",children:e.label}),Object(d.jsx)("div",{class:"filterRemove",onClick:function(){x(h.filter((function(t){return t.query!==e.query})))},children:Object(d.jsx)("i",{class:"fa fa-times"})})]},t)}))}):null,Object(d.jsxs)("table",{class:"table",children:[Object(d.jsx)("thead",{children:Object(d.jsxs)("tr",{children:[J.hideMultiselect?null:Object(d.jsx)("th",{}),z.map((function(e,t){var n="foreign"===e.dataType||"datalist"===e.dataType?e.formattedValue:e.sortName||e.name;return Object(d.jsxs)("th",{class:n?"sortable":"",onClick:function(){n&&(y(n),E(w===n&&!k))},children:[e.label,n?Object(d.jsx)("div",{class:"columnSortIcon",children:Object(d.jsx)("i",{class:"fas fa-sort".concat(!0===k&&n===w?"-down":!1===k&&n===w?"-up":"")})}):null]},t)}))]})}),Object(d.jsxs)("tbody",{children:[K?null:Array.from({length:10}).map((function(e,t){return Object(d.jsx)("tr",{class:"record",children:Array.from({length:z.length+(J.hideMultiselect?0:1)}).map((function(e,t){return Object(d.jsx)("td",{children:" "},t)}))},t)})),null===K||void 0===K||null===(t=K.records)||void 0===t?void 0:t.map((function(e){var t=e[Q.primaryId];return Object(d.jsxs)("tr",{class:"record ".concat(Q.notClickable?"nonClickableRow":""),onClick:function(e){"A"!=e.target.tagName?Q.notClickable||i.push("/record/".concat(r,"/").concat(t)):e.stopPropagation()},children:[J.hideMultiselect?null:Object(d.jsx)("td",{class:"checkboxParent",onClick:function(e){N(V.includes(t)?V.filter((function(e){return e!==t})):[].concat(Object(P.a)(V),[t])),e.stopPropagation()},children:Object(d.jsx)("div",{class:"checkbox ".concat(V.includes(t)?"checked":"")})}),z.map((function(t,n){return Object(d.jsx)("td",{children:q(t,e,!0)},n)}))]},t)}))]})]})]}),Object(d.jsxs)("div",{class:"tableFooter",children:[Object(d.jsxs)("div",{class:"tableCounter",children:[(null===K||void 0===K?void 0:K.count)||"-"," ",Q.label]}),Object(d.jsxs)("div",{class:"paginator",children:[Object(d.jsx)("div",{class:"paginatorLeft",onClick:function(){return v(Math.max(1,f-1))},children:Object(d.jsx)("i",{class:"fas fa-caret-left"})}),Object(d.jsxs)("div",{class:"paginatorNumber",children:[f," / ",K?Math.ceil(K.count/(Q.limit||10)):"-"]}),Object(d.jsx)("div",{class:"paginatorRight",onClick:function(){return v(Math.min(f+1,Math.ceil(K.count/(Q.limit||10))))},children:Object(d.jsx)("i",{class:"fas fa-caret-right"})})]})]})]})},N=function(e){var t,n,r=e.viewIndex,a=e.record,i=Object(c.useContext)(u.a).views[r],s=Object(c.useState)(!1),j=Object(l.a)(s,2),b=j[0],f=j[1],v=Object(o.f)(),h=function(){var e=Object(p.a)(O.a.mark((function e(){return O.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,window.swal({title:"\xcates-vous s\xfbr ?",text:"Une fois la suppression confirm\xe9e, il ne sera pas possible de revenir en arri\xe8re.",buttons:["Annuler","Oui"],dangerMode:!0});case 2:if(!e.sent){e.next=14;break}return i.deleteCallback&&m.a.post(i.deleteCallback,{id:a[i.primaryId],data:a}),e.prev=5,e.next=8,m.a.post("/deleteRecord",{viewIndex:r,primaryValue:a[i.primaryId]});case 8:v.push("/records/".concat(r)),e.next=14;break;case 11:e.prev=11,e.t0=e.catch(5),window.swal({title:"Erreur",text:"Suppression impossible",dangerMode:!0});case 14:case"end":return e.stop()}}),e,null,[[5,11]])})));return function(){return e.apply(this,arguments)}}();return!0===i.canDuplicate||!1!==i.canDelete||(null===(t=i.customActions)||void 0===t?void 0:t.length)>0?Object(d.jsx)(L,{onOutsideClick:function(){return f(!1)},children:Object(d.jsxs)("div",{class:"actionButtonsContainer",children:[Object(d.jsx)("div",{class:"button openActionsButton",onClick:function(){return f(!b)},children:"Actions"}),b?Object(d.jsxs)("div",{class:"actions",children:[null===(n=i.customActions)||void 0===n?void 0:n.map((function(e,t){return Object(d.jsx)("div",{class:"action recordAction",onClick:(n=t,function(){f(!1),m.a.post("customAction",{viewIndex:r,actionIndex:n,selectedRecordIds:[a[i.primaryId]]}).then((function(){v.push("/records/".concat(r))})).catch((function(){window.swal({title:"Erreur",text:"L'action a \xe9chou\xe9",dangerMode:!0})}))}),children:e.label});var n})),!0===i.canDuplicate?Object(d.jsx)("div",{class:"action recordAction duplicateRecord",children:"Dupliquer"}):null,!1!==i.canDelete?Object(d.jsx)("div",{class:"action recordAction red",onClick:h,children:"Supprimer"}):null]}):null]})}):null},U=function(){var e=Object(o.f)();return Object(d.jsx)("div",{class:"button backButton",onClick:function(){return e.goBack()},children:"Retour"})},W=function(e){var t=e.record,n=e.panel;return Object(d.jsx)("div",{class:"downloadPanelButton",onClick:function(){m.a.get("/customQuery",{params:{query:n.query||Object(F.a)(n.formattedQuery,t),primaryValue:2630}}).then((function(e){var t=e.data,c=[];c.push(Object.keys(t[0]).filter((function(e){return e!==n.primaryId})).join(","));var r,a=Object(h.a)(t);try{var i=function(){var e=r.value;c.push(Object.keys(e).filter((function(e){return e!==n.primaryId})).map((function(t){return n.formattedValues&&t in n.formattedValues?Object(F.a)(n.formattedValues[t],e):e[t]})).join(","))};for(a.s();!(r=a.n()).done;)i()}catch(l){a.e(l)}finally{a.f()}window.download(c.join("\r\n"),n.label+".csv")}))},children:Object(d.jsx)("i",{class:"fa fa-cloud-download"})})},K=function(e){var t=e.panel,n=e.record,r=e.view,a=Object(c.useState)(null),i=Object(l.a)(a,2),s=i[0],u=i[1],j=Object(o.f)(),b=Object(o.h)().viewIndex;Object(c.useEffect)((function(){f()}),[]);var f=function(){m.a.get("/customQuery",{params:{query:t.query||Object(F.a)(t.formattedQuery,n),primaryValue:n[r.primaryId]}}).then((function(e){u(e.data)}))},v=function(){var e=Object(p.a)(O.a.mark((function e(n){return O.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,window.swal({title:"\xcates-vous s\xfbr ?",text:"Une fois la suppression confirm\xe9e, il ne sera pas possible de revenir en arri\xe8re.",buttons:["Annuler","Oui"],dangerMode:!0});case 2:if(!e.sent){e.next=13;break}return e.prev=4,e.next=7,m.a.post("/deleteRecordFromPanel",{viewIndex:b,panelId:t.__id__,primaryValue:n[t.primaryId]});case 7:f(),e.next=13;break;case 10:e.prev=10,e.t0=e.catch(4),window.swal({title:"Erreur",text:"Suppression impossible",dangerMode:!0});case 13:case"end":return e.stop()}}),e,null,[[4,10]])})));return function(t){return e.apply(this,arguments)}}();return Object(d.jsx)("div",{children:(null===s||void 0===s?void 0:s.length)>0?Object(d.jsxs)("table",{class:"table panelTable ".concat(t.folded?"folded":""),children:[Object(d.jsx)("thead",{children:Object(d.jsxs)("tr",{children:[Object.keys(s[0]).filter((function(e){return e!==t.primaryId})).map((function(e){return Object(d.jsx)("th",{children:e},e)})),t.canDelete?Object(d.jsx)("th",{}):null]})}),Object(d.jsx)("tbody",{children:s.map((function(e){return Object(d.jsxs)("tr",{class:"record ".concat(t.canShow?"":"nonClickableRow"),onClick:function(){t.canShow&&j.push("/record/".concat(b,"/").concat(e[t.primaryId]))},children:[Object.keys(e).filter((function(e){return e!==t.primaryId})).map((function(n){return Object(d.jsx)("td",{children:Object(d.jsx)("div",{dangerouslySetInnerHTML:{__html:t.formattedValues&&n in t.formattedValues?Object(F.a)(t.formattedValues[n],e):e[n]}})},n)})),t.canDelete?Object(d.jsx)("td",{class:"deleteIconCell",children:Object(d.jsx)("div",{class:"deleteIcon",onClick:function(){return v(e)},children:Object(d.jsx)("i",{class:"fa fa-minus"})})}):null]})}))})]}):0===(null===s||void 0===s?void 0:s.length)?Object(d.jsx)("div",{class:"noData panelTable ".concat(t.folded?"folded":""),children:"Aucune donn\xe9e"}):null})},H=function(e){var t=e.panel,n=Object(c.useState)(null),r=Object(l.a)(n,2),a=r[0],i=r[1];return Object(c.useEffect)((function(){m.a.get("/customQuery",{params:{query:t.query,primaryValue:2630}}).then((function(e){i(e.data)}))}),[t.query]),Object(d.jsx)("div",{children:(null===a||void 0===a?void 0:a.length)>0?Object(d.jsx)("div",{class:"gallery",children:a.map((function(e){return Object(d.jsxs)("div",{class:"galleryPicture",children:[t.canDelete?Object(d.jsx)("div",{class:"deleteIcon",children:Object(d.jsx)("i",{class:"fa fa-minus"})}):null,Object(d.jsx)("a",{href:t.baseUrl+e.Path,target:"_blank",children:Object(d.jsx)("img",{src:"https://res.cloudinary.com/forest2/image/fetch/w_150,h_150,c_fill/"+t.baseUrl+e.Path,onerror:"this.style.height = 0"})})]},e.Path)}))}):0===(null===a||void 0===a?void 0:a.length)?Object(d.jsx)("div",{class:"noData panelTable ".concat(t.folded?"folded":""),children:"Aucune donn\xe9e"}):null})},J=function(e){var t=e.panel,n=e.record,r=e.view,a=Object(c.useRef)();Object(c.useEffect)((function(){window.google&&n&&(t.query?m.a.get("/customQuery",{query:t.query,primaryValue:n[r.primaryId]}).then((function(e){var n,c=null===e||void 0===e||null===(n=e.data)||void 0===n?void 0:n[0];c&&i(c.Lat,c.Lng,t.zoom||12)})):i(n[t.latitudeField],n[t.longitudeField],t.zoom||12))}),[n,window.google]);var i=function(e,t,n){var c=new window.google.maps.Map(a.current,{zoom:n,center:{lat:e,lng:t}});new window.google.maps.Marker({position:{lat:e,lng:t},map:c})};return Object(d.jsx)("div",{class:"map",ref:a})},Q=function(){var e,t=Object(c.useContext)(u.a),n=Object(o.h)(),r=n.viewIndex,a=n.recordId,i=Object(c.useState)(null),j=Object(l.a)(i,2),b=j[0],f=j[1],v=t.views[r],O=null===(e=v.columns)||void 0===e?void 0:e.filter((function(e){return!e.hideInTable&&!e.hidden}));return Object(c.useEffect)((function(){m.a.get("/record",{params:{viewIndex:r,recordId:a}}).then((function(e){f(e.data)}))}),[r,a]),Object(d.jsxs)("div",{class:"view backgroundBlue",children:[Object(d.jsxs)("div",{class:"viewHeader",children:[Object(d.jsx)("div",{class:"viewTitle",children:v.label}),Object(d.jsxs)("div",{class:"viewHeaderActions",children:[Object(d.jsx)("div",{class:"button adjacentButton prevButton",children:"\u25c4"}),Object(d.jsx)("div",{class:"button adjacentButton nextButton",children:"\u25ba"}),Object(d.jsx)(U,{}),Object(d.jsx)(N,{viewIndex:r,record:b}),!1!==v.canEdit?Object(d.jsx)(s.b,{to:"/editRecord/".concat(r,"/").concat(a),children:Object(d.jsx)("div",{class:"button greenButton recordAction",children:"Modifier"})}):null]})]}),Object(d.jsx)("div",{class:"paddedView",children:Object(d.jsxs)("div",{class:"showContainer",children:[Object(d.jsxs)("div",{class:"panel detailsPanel",children:[Object(d.jsx)("div",{class:"panelTitle",children:"D\xe9tails"}),b?O.map((function(e,t){return Object(d.jsxs)("div",{class:"showRecordField",children:[Object(d.jsx)("div",{class:"formLabel",children:e.label}),Object(d.jsx)("div",{class:"formValue",children:q(e,b,!1)||"-"})]},t)})):null]}),v.recordViewPanels&&b?Object(d.jsx)("div",{class:"recordViewPanels",children:v.recordViewPanels.map((function(e,t){return Object(d.jsxs)("div",{class:"panel",children:[Object(d.jsxs)("div",{class:"panelHeader",children:[Object(d.jsx)("div",{class:"viewTitle",children:e.label}),Object(d.jsxs)("div",{class:"viewHeaderActions",children:[e.folded?Object(d.jsx)("div",{class:"button smallButton unfoldPanel",children:"Afficher"}):null,e.canCreate?Object(d.jsx)(s.b,{to:"/createRecord/".concat(r,"/").concat(t,"/").concat(a),children:Object(d.jsx)("div",{class:"plusButton",children:Object(d.jsx)("i",{class:"fa fa-plus"})})}):null,e.canDownload&&"table"===e.type?Object(d.jsx)(W,{record:b,panel:e}):null]})]}),"table"===e.type?Object(d.jsx)(K,{record:b,panel:e,view:v}):null,"gallery"===e.type?Object(d.jsx)(H,{panel:e}):null,"map"===e.type?Object(d.jsx)(J,{record:b,panel:e,view:v}):null]},t)}))}):null]})})]})},z=n.p+"static/media/logo.e407b9ca.png",Y=function(e){var t=e.setIsAuthenticated,n=Object(c.useState)(""),r=Object(l.a)(n,2),a=r[0],i=r[1],s=Object(c.useState)(""),o=Object(l.a)(s,2),u=o[0],j=o[1],b=function(){var e=Object(p.a)(O.a.mark((function e(){return O.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,m.a.post("/login",{username:a,password:u});case 2:e.sent.data.success&&t(!0);case 4:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();return Object(d.jsx)("div",{class:"loginPanelBackground",children:Object(d.jsxs)("div",{class:"loginPanel",children:[Object(d.jsx)("div",{class:"loginLogoContainer",children:Object(d.jsx)("img",{class:"loginLogo",src:z})}),Object(d.jsx)("label",{children:"Nom d'utilisateur"}),Object(d.jsx)("input",{type:"text",name:"username",onChange:function(e){return i(e.target.value)}}),Object(d.jsx)("label",{children:"Mot de passe"}),Object(d.jsx)("input",{type:"password",name:"password",onChange:function(e){return j(e.target.value)}}),Object(d.jsx)("button",{class:"button greenButton fullWidth",onClick:b,children:"Se connecter"})]})})},$=function(){var e=Object(c.useContext)(u.a),t=Object(o.h)().viewIndex,n=e.views[t];return Object(d.jsx)("div",{class:"view",children:Object(d.jsx)("iframe",{src:n.src})})},G=n(44),X=n(40),Z=["componentPath","children"],ee={react:function(){return{exports:r.a}},axios:function(){return{exports:m.a}},"styled-components":function(){return{exports:X.a}}};function te(e,t,n){var c=Object.create(n);return function n(r){if(r in c||t!==r){if(!(r in c))throw"Module '".concat(r,"' not found")}else{var a={exports:{}};c[r]=function(){return a},Function("require, exports, module",e)(n,a.exports,a)}return c[r]().exports}(t)}function ne(e){return ce.apply(this,arguments)}function ce(){return(ce=Object(p.a)(O.a.mark((function e(t){var n,c;return O.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,m.a.get("/customComponent",{params:{componentPath:t}});case 3:return n=e.sent,c=n.data,e.abrupt("return",{default:te(c,"__moduleName__",ee)});case 8:return e.prev=8,e.t0=e.catch(0),console.error(e.t0),e.abrupt("return",{default:function(){return Object(d.jsx)("div",{children:"Erreur de rendu"})}});case 12:case"end":return e.stop()}}),e,null,[[0,8]])})))).apply(this,arguments)}var re=function(e){var t=e.componentPath,n=e.children,a=Object(G.a)(e,Z),i=Object(c.useMemo)((function(){return r.a.lazy(Object(p.a)(O.a.mark((function e(){return O.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",ne(t));case 1:case"end":return e.stop()}}),e)}))))}),[t]);return Object(d.jsx)(c.Suspense,{fallback:null,children:Object(d.jsx)(i,Object(f.a)(Object(f.a)({},a),{},{children:n}))})},ae=r.a.memo(re),ie=function(){var e=Object(c.useContext)(u.a),t=Object(o.h)().viewIndex,n=e.views[t].componentPath;return Object(d.jsx)(ae,{componentPath:n})};m.a.defaults.withCredentials=!0,m.a.defaults.baseURL="/_HOMEPAGE_/api";var le=function(){var e=Object(c.useState)(null),t=Object(l.a)(e,2),n=t[0],r=t[1];return Object(c.useEffect)((function(){m.a.get("/isAuthenticated").then((function(e){r(e.data.isAuthenticated)}))}),[]),Object(d.jsx)("div",{id:"body",children:!0===n?Object(d.jsx)(u.b,{children:Object(d.jsxs)(s.a,{basename:"/_HOMEPAGE_",children:[Object(d.jsx)(b,{}),Object(d.jsxs)(o.c,{children:[Object(d.jsx)(o.a,{path:"/records/:viewIndex/:subviewIndex?",children:Object(d.jsx)(V,{})}),Object(d.jsx)(o.a,{path:"/record/:viewIndex/:recordId",children:Object(d.jsx)(Q,{})}),Object(d.jsx)(o.a,{path:"/editRecord/:viewIndex/:recordId",children:Object(d.jsx)(T,{})}),Object(d.jsx)(o.a,{path:"/createRecord/:viewIndex/:panelIndex?/:recordId?",children:Object(d.jsx)(M,{})}),Object(d.jsx)(o.a,{path:"/iframe/:viewIndex",children:Object(d.jsx)($,{})}),Object(d.jsx)(o.a,{path:"/customView/:viewIndex",children:Object(d.jsx)(ie,{})})]})]})}):!1===n?Object(d.jsx)(Y,{setIsAuthenticated:r}):Object(d.jsx)("div",{class:"appLoading",children:Object(d.jsx)("i",{class:"fa fa-circle-notch fa-spin"})})})};i.a.render(Object(d.jsx)(r.a.StrictMode,{children:Object(d.jsx)(le,{})}),document.getElementById("root"))}},[[75,1,2]]]);
2
- //# sourceMappingURL=main.7ced8aa7.chunk.js.map
1
+ (this["webpackJsonpgaladmin-front"]=this["webpackJsonpgaladmin-front"]||[]).push([[0],{15:function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_exports__.a=function(expression,data){try{var varString="";for(var key in data)varString+="var "+key+" = "+("string"===typeof data[key]?"'"+data[key].replace(/'/g,"\\'").replace(/\n/g,"<br>").replace(/\r/g,"")+"'":"object"===typeof data[key]?JSON.stringify(data[key]):data[key])+";";return eval(varString+expression)}catch(e){return console.log(varString+expression),console.error(e),"Error"}}},49:function(e,t,n){},50:function(e,t,n){},6:function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return ConfigContext})),__webpack_require__.d(__webpack_exports__,"b",(function(){return ConfigProvider}));var _home_runner_work_galadmin_galadmin_src_front_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),react__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1),react__WEBPACK_IMPORTED_MODULE_1___default=__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__),axios__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(3),axios__WEBPACK_IMPORTED_MODULE_2___default=__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_2__),react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(0),react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3___default=__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__),ConfigContext=Object(react__WEBPACK_IMPORTED_MODULE_1__.createContext)(null),ConfigProvider=function ConfigProvider(props){var _useState=Object(react__WEBPACK_IMPORTED_MODULE_1__.useState)(null),_useState2=Object(_home_runner_work_galadmin_galadmin_src_front_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__.a)(_useState,2),config=_useState2[0],setConfig=_useState2[1];return Object(react__WEBPACK_IMPORTED_MODULE_1__.useEffect)((function(){axios__WEBPACK_IMPORTED_MODULE_2___default.a.get("/config").then((function(response){var _config=eval("("+response.data.config+")");if(setConfig(_config),_config.googleMapsKey){var script=document.createElement("script");return script.src="https://maps.googleapis.com/maps/api/js?key="+_config.googleMapsKey+"&libraries=places,autocomplete",document.body.appendChild(script),function(){document.body.removeChild(script)}}}))}),[]),config?Object(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ConfigContext.Provider,{value:config,children:props.children}):null}},75:function(e,t,n){"use strict";n.r(t);var c=n(1),a=n.n(c),r=n(39),i=n.n(r),l=(n(49),n(2)),s=n(8),o=n(7),u=(n(50),n(6)),d=n(0),j=function(e){var t=e.view;return Object(d.jsxs)(d.Fragment,{children:[Object(d.jsx)("div",{class:"sidebarIcon",children:Object(d.jsx)("i",{class:"fas fa-".concat(t.icon||"square")})}),Object(d.jsx)("div",{class:"sidebarLabel",children:t.label})]})},b=function(){var e=Object(o.g)(),t=Object(c.useContext)(u.a),n=Object(o.f)();return Object(d.jsxs)("div",{class:"sidebar",children:[t.logo?Object(d.jsx)("img",{src:t.logo,class:"logo"}):null,Object(d.jsx)("div",{class:"sidebarTitle",children:t.name}),Object(d.jsx)("div",{class:"sidebarSubtitle",children:"Back-office"}),t.views.filter((function(e){return!e.hidden})).map((function(t,c){if("link"===t.type)return Object(d.jsx)("a",{href:t.src,children:Object(d.jsx)("div",{class:"sidebarItem",children:Object(d.jsx)("div",{children:Object(d.jsx)(j,{view:t})})})},c);if("iframe"===t.type){var a=e.pathname==="/iframe/".concat(c);return Object(d.jsx)(s.b,{to:"/iframe/".concat(c),children:Object(d.jsx)("div",{class:"sidebarItem ".concat(a?"active":""),children:Object(d.jsx)("div",{children:Object(d.jsx)(j,{view:t})})})},c)}if("custom"===t.type){var r=e.pathname==="/customView/".concat(c);return Object(d.jsx)(s.b,{to:"/customView/".concat(c),children:Object(d.jsx)("div",{class:"sidebarItem ".concat(r?"active":""),children:Object(d.jsx)("div",{children:Object(d.jsx)(j,{view:t})})})},c)}if("table"===t.type){var i=e.pathname.startsWith("/records/".concat(c))||e.pathname==="/createRecord/".concat(c)||e.pathname.startsWith("/record/".concat(c))||e.pathname.startsWith("/editRecord/".concat(c));return Object(d.jsx)("div",{onClick:function(){return n.push("/records/".concat(c))},children:Object(d.jsxs)("div",{class:"sidebarItem ".concat(i?"active":""),children:[Object(d.jsxs)("div",{children:[Object(d.jsx)("div",{class:"notificationWrapper"}),Object(d.jsx)(j,{view:t})]}),t.subviews?Object(d.jsxs)(d.Fragment,{children:[Object(d.jsx)("div",{class:"subviewsSeparator"}),t.subviews.map((function(t,a){var r=e.pathname=="/records/".concat(c,"/").concat(a);return Object(d.jsx)("div",{onClick:function(e){n.push("/records/".concat(c,"/").concat(a)),e.stopPropagation()},children:Object(d.jsxs)("div",{"data-subview-index":a,class:r?"active":"",children:[Object(d.jsx)("div",{class:"notificationWrapperForSubview"}),t.label]})})}))]}):null]},c)})}})),t.hideBranding?null:Object(d.jsxs)("div",{class:"sidebarBranding",children:["Made with ",Object(d.jsx)("i",{class:"fas fa-heart"})," by Galadrim"]})]})},f=n(16),v=n(5),O=n.n(v),p=n(10),h=n(23),x=n(3),m=n.n(x),_=n(4),g=function(e){var t=e.column,n=e.onChange,a=e.initialData,r=Object(c.useRef)(null);return Object(c.useEffect)((function(){return r.current&&(window.$(r.current).spectrum({preferredFormat:"hex",showInput:!0,chooseText:"OK",cancelText:"Annuler",color:null===a||void 0===a?void 0:a[t.name]}),window.$(r.current).on("change.spectrum",(function(e,c){n(Object(_.a)({},t.name,c.toHexString()))}))),function(){return window.$(r.current).off()}}),[r.current]),Object(d.jsx)("input",{ref:r,type:"text",onChange:function(e){return n(Object(_.a)({},t.name,e.target.value))}})};window.Quill.prototype.getHTML=function(){return this.container.querySelector(".ql-editor").innerHTML};var w=function(e){var t=e.column,n=e.onChange,a=e.initialData,r=Object(c.useRef)(null);return Object(c.useEffect)((function(){if(r.current&&!r.current.editor){var e=new window.Quill(r.current,{theme:"snow",modules:{toolbar:[[{header:[1,2,3,!1]}],["bold","italic","underline","link"],["image"],[{align:[]}],[{list:"ordered"},{list:"bullet"}],["clean"]]}});if(null===a||void 0===a?void 0:a[t.contentField])try{e.setContents(JSON.parse(null===a||void 0===a?void 0:a[t.contentField]))}catch(c){}return e.on("text-change",(function(){var c;n((c={},Object(_.a)(c,t.htmlField,e.getHTML()),Object(_.a)(c,t.contentField,JSON.stringify(e.getContents())),c))})),r.current.editor=e,e.off()}}),[r.current]),Object(d.jsx)("div",{class:"quillContainer",children:Object(d.jsx)("div",{class:"quill",ref:r,style:t.height?{height:t.height}:null})})},y=function(e){var t=e.column,n=e.onChange,a=e.initialData,r=e.withTime,i=Object(c.useRef)(null);return Object(c.useEffect)((function(){if(i.current){var e=window.$(i.current).datepicker({language:"fr",autoClose:!0,onSelect:function(e,c){n(Object(_.a)({},t.name,window.moment(c).format(r?null:"YYYY-MM-DD")))}});(null===a||void 0===a?void 0:a[t.name])&&e.data("datepicker").selectDate(new Date(null===a||void 0===a?void 0:a[t.name]))}}),[i.current]),Object(d.jsx)("div",{children:Object(d.jsx)("input",{type:"text",ref:i,"data-timepicker":r?"true":"false"})})},C=function(e){var t=e.column,n=e.onChange,a=e.initialData,r=Object(c.useRef)(null);return Object(c.useEffect)((function(){if(r.current&&window.google){var e=new window.google.maps.places.Autocomplete(r.current,t.componentRestrictions?{componentRestrictions:t.componentRestrictions}:{});e.addListener("place_changed",(function(){var c=e.getPlace();if(0!==c.length&&c.geometry){var a={latitudeField:function(e){return e.geometry.location.lat()},longitudeField:function(e){return e.geometry.location.lng()},addressField:function(e){return e.formatted_address},streetNumberField:function(e){var t;return null===(t=e.address_components.find((function(e){return"street_number"===e.type})))||void 0===t?void 0:t.long_name},routeField:function(e){var t;return null===(t=e.address_components.find((function(e){return"route"===e.type})))||void 0===t?void 0:t.long_name},localityField:function(e){var t;return null===(t=e.address_components.find((function(e){return"locality"===e.type})))||void 0===t?void 0:t.long_name},administrativeAreaLevel2Field:function(e){var t;return null===(t=e.address_components.find((function(e){return"administrative_area_level_2"===e.type})))||void 0===t?void 0:t.long_name},administrativeAreaLevel1Field:function(e){var t;return null===(t=e.address_components.find((function(e){return"administrative_area_level_1"===e.type})))||void 0===t?void 0:t.long_name},countryField:function(e){var t;return null===(t=e.address_components.find((function(e){return"country"===e.type})))||void 0===t?void 0:t.long_name},postalCodeField:function(e){var t;return null===(t=e.address_components.find((function(e){return"postal_code"===e.type})))||void 0===t?void 0:t.long_name}},i={};for(var l in a)t[l]&&(i[t[l]]=a[l](c));r.current.value=c.formatted_address,n(i)}}))}}),[r.current]),Object(c.useEffect)((function(){var e,t=function(){r.current&&(r.current.value="")};return null===r||void 0===r||null===(e=r.current)||void 0===e||e.addEventListener("focusout",t),function(){var e;return null===r||void 0===r||null===(e=r.current)||void 0===e?void 0:e.removeEventListener("focusout",t)}}),[r.current]),Object(d.jsx)("div",{children:Object(d.jsx)("input",{type:"text",placeholder:"",ref:r,defaultValue:null===a||void 0===a?void 0:a[t.name]})})},I=function(e){var t=e.column,n=e.onChange,a=e.initialData,r=Object(c.useRef)(null),i=Object(c.useState)(!1),s=Object(l.a)(i,2),o=s[0],u=s[1],j=Object(c.useState)(null===a||void 0===a?void 0:a[t.name]),b=Object(l.a)(j,2),f=b[0],v=b[1],h=function(){var e=Object(p.a)(O.a.mark((function e(){var c,a,i;return O.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return c=new FormData(r.current),u(!0),e.next=4,m()({method:"post",url:"/uploadFile?subdirectory=".concat(t.subdirectory,"&publicPath=").concat(t.publicPath,"&s3Config=").concat(encodeURI(JSON.stringify(t.s3Config))),data:c,headers:{"Content-Type":"multipart/form-data"}});case 4:a=e.sent,i=Object(_.a)({},t.name,a.data.path),t.aspectRatioField&&(i[t.aspectRatioField]=a.data.aspectRatio),t.originalNameField&&(i[t.originalNameField]=a.data.originalFilename),n(i),u(!1),v(a.data.path);case 11:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),x=Math.random().toString();return Object(d.jsx)("div",{class:"fileInputContainer",children:Object(d.jsxs)("label",{htmlFor:x,children:[Object(d.jsx)("form",{ref:r,children:Object(d.jsx)("input",{type:"file",id:x,style:{display:"none"},name:"file",onChange:h})}),Object(d.jsxs)("div",{class:"fileInputContent ".concat(f?"":"clickToSelectFile"),children:[o?Object(d.jsx)("i",{class:"fa fa-circle-notch fa-spin"}):null,o||f?null:Object(d.jsx)("div",{children:"Cliquez pour s\xe9lectionner un fichier"}),!o&&f?Object(d.jsxs)("div",{class:"nonImageFileOutput",children:[Object(d.jsx)("span",{children:"Fichier t\xe9l\xe9charg\xe9"}),Object(d.jsx)("div",{class:"deleteFile",onClick:function(e){v(null);var c=Object(_.a)({},t.name,null);t.aspectRatioField&&(c[t.aspectRatioField]=null),t.originalNameField&&(c[t.originalNameField]=null),n(c),e.preventDefault()},children:Object(d.jsx)("i",{class:"fal fa-trash-alt"})})]}):null]})]})})},k=function(e){var t=e.column,n=e.onChange,a=e.initialData,r=Object(c.useState)(null),i=Object(l.a)(r,2),s=i[0],u=i[1],j=Object(o.h)().viewIndex;return Object(c.useEffect)((function(){m.a.post("/foreignSelectRecords",{viewIndex:j,columnId:t.__id__}).then((function(e){var c;u(e.data),n(Object(_.a)({},t.name,(null===a||void 0===a?void 0:a[t.name])||(t.optional?"NULL":null===(c=e.data[0])||void 0===c?void 0:c.value)))}))}),[]),null===s?Object(d.jsx)("i",{class:"fa fa-circle-notch fa-spin",style:{color:"#536579"}}):Object(d.jsxs)("select",{onChange:function(e){return n(Object(_.a)({},t.name,e.target.value))},defaultValue:null===a||void 0===a?void 0:a[t.name],children:[t.optional?Object(d.jsx)("option",{value:"NULL",children:"-"}):null,s.map((function(e){return Object(d.jsx)("option",{value:e.value,children:e.label},e.value)}))]})},E=function(e){var t,n=e.column,a=e.onChange,r=e.initialData,i=Object(c.useState)([]),s=Object(l.a)(i,2),u=s[0],j=s[1],b=Object(o.h)().viewIndex,f=Object(c.useState)(""),v=Object(l.a)(f,2),O=v[0],p=v[1],h=Object(c.useRef)(null),x=Object(c.useRef)(!1);Object(c.useEffect)((function(){m.a.post("/foreignSelectRecords",{viewIndex:b,columnId:n.__id__,query:O}).then((function(e){j(e.data)}))}),[O]),Object(c.useEffect)((function(){var e,t=function(){h.current&&!x.current&&(h.current.value="")};return null===h||void 0===h||null===(e=h.current)||void 0===e||e.addEventListener("focusout",t),function(){var e;return null===h||void 0===h||null===(e=h.current)||void 0===e?void 0:e.removeEventListener("focusout",t)}}),[h.current]);var g=Math.random();return null===u?Object(d.jsx)("i",{class:"fa fa-circle-notch fa-spin",style:{color:"#536579"}}):Object(d.jsxs)("div",{children:[Object(d.jsx)("input",{type:"text",list:g,ref:h,onChange:function(e){var t,c,r=null!==(t=null===(c=u.find((function(t){return t.label===e.target.value})))||void 0===c?void 0:c.value)&&void 0!==t?t:null;x.current=!!r,p(e.target.value),a(Object(_.a)({},n.name,r))},defaultValue:null===(t=u.find((function(e){return e.value===(null===r||void 0===r?void 0:r[n.name])})))||void 0===t?void 0:t.label}),Object(d.jsxs)("datalist",{id:g,children:[n.optional?Object(d.jsx)("option",{value:"NULL",children:"-"}):null,u.map((function(e){return Object(d.jsx)("option",{value:e.label,children:e.label},e.value)}))]})]})},D=function(e){var t=e.column,n=e.onChange,c=e.initialData,a=t.dataType;return["int","double","float","decimal"].includes(a)?Object(d.jsx)("input",{type:"number",onChange:function(e){return n(Object(_.a)({},t.name,e.target.value))},defaultValue:null===c||void 0===c?void 0:c[t.name]}):"tinyint"===a?Object(d.jsxs)("select",{onChange:function(e){return n(Object(_.a)({},t.name,e.target.value))},defaultValue:null===c||void 0===c?void 0:c[t.name],children:[t.optional?Object(d.jsx)("option",{value:"NULL",children:"-"}):null,Object(d.jsx)("option",{value:"0",children:"Non"}),Object(d.jsx)("option",{value:"1",children:"Oui"})]}):"select"===a&&Array.isArray(t.options)?Object(d.jsxs)("select",{onChange:function(e){return n(Object(_.a)({},t.name,e.target.value))},defaultValue:null===c||void 0===c?void 0:c[t.name],children:[t.optional?Object(d.jsx)("option",{value:"NULL",children:"-"}):null,t.options.map((function(e){return Object(d.jsx)("option",{value:e,children:e},e)}))]}):"select"===a?Object(d.jsxs)("select",{onChange:function(e){return n(Object(_.a)({},t.name,e.target.value))},defaultValue:null===c||void 0===c?void 0:c[t.name],children:[t.optional?Object(d.jsx)("option",{value:"NULL",children:"-"}):null,Object.keys(t.options).map((function(e){return Object(d.jsx)("option",{value:e,children:t.options[e]},e)}))]}):"datalist"===a?Object(d.jsx)(E,{column:t,onChange:n,initialData:c}):"foreign"===a?Object(d.jsx)(k,{column:t,onChange:n,initialData:c}):"address"===a?Object(d.jsx)(C,{column:t,onChange:n,initialData:c}):"color"===a?Object(d.jsx)(g,{column:t,onChange:n,initialData:c}):"file"===a?Object(d.jsx)(I,{column:t,onChange:n,initialData:c}):"datetime"===a?Object(d.jsx)(y,{column:t,onChange:n,initialData:c,withTime:!0}):"date"===a?Object(d.jsx)(y,{column:t,onChange:n,initialData:c,withTime:!1}):"textarea"===a?Object(d.jsx)("textarea",{onChange:function(e){return n(Object(_.a)({},t.name,e.target.value))},defaultValue:null===c||void 0===c?void 0:c[t.name]}):"richText"===a?Object(d.jsx)(w,{column:t,onChange:n,initialData:c}):Object(d.jsx)("input",{type:"text",onChange:function(e){return n(Object(_.a)({},t.name,e.target.value))},defaultValue:null===c||void 0===c?void 0:c[t.name]})},S=function(e){var t=e.text,n=Object(c.useState)(!1),a=Object(l.a)(n,2),r=a[0],i=a[1];return Object(d.jsxs)("div",{class:"labelTooltipContainer",onMouseLeave:function(){return i(!1)},children:[Object(d.jsx)("div",{class:"labelTooltipIcon",onMouseEnter:function(){return i(!0)},children:Object(d.jsx)("i",{class:"fa fa-question-circle"})}),r?Object(d.jsx)("div",{class:"tooltip",children:t}):null]})},M=function(){var e,t=Object(c.useContext)(u.a),n=Object(o.h)(),a=n.viewIndex,r=n.panelIndex,i=n.recordId,s=Object(o.f)(),j=t.views[a],b=r?j.recordViewPanels[r]:null,v=b?b.createConfig.columns:j.columns.filter((function(e){return e.dataType&&(!0===e.canEditOnCreation||!1!==e.canEdit)&&!e.hidden})),x={},_=Object(h.a)(v);try{for(_.s();!(e=_.n()).done;){var g=e.value;"tinyint"===g.dataType?x[g.name]=g.optional?"NULL":"0":"select"===g.dataType&&Array.isArray(g.options)?x[g.name]=g.options[0]:"select"===g.dataType&&(x[g.name]=Object.keys(g.options)[0]),g.defaultValue&&(x[g.name]=g.defaultValue)}}catch(M){_.e(M)}finally{_.f()}var w=Object(c.useRef)(x),y=Object(c.useState)(!1),C=Object(l.a)(y,2),I=C[0],k=C[1],E=function(){var e=Object(p.a)(O.a.mark((function e(){var t;return O.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:for(t in j.createFilters)w.current[t]=j.createFilters[t];return k(!0),e.prev=2,e.next=5,m.a.post("/createRecord",{viewIndex:a,panelIndex:r,recordId:i,data:w.current});case 5:k(!1),s.push("/records/".concat(a)),e.next=13;break;case 9:e.prev=9,e.t0=e.catch(2),e.t0.response.responseText&&window.swal({title:"Erreur",text:e.t0.response.responseText,dangerMode:!0}),k(!1);case 13:case"end":return e.stop()}}),e,null,[[2,9]])})));return function(){return e.apply(this,arguments)}}();return Object(d.jsxs)("div",{class:"view",children:[Object(d.jsx)("div",{class:"viewHeader",children:Object(d.jsx)("div",{class:"viewTitle",children:b?b.createConfig.label:"Cr\xe9er ".concat(j.aNewSingular)})}),Object(d.jsxs)("div",{class:"paddedView",children:[Object(d.jsx)("div",{class:"form",children:v.map((function(e,t){return Object(d.jsxs)("div",{class:"formElement",children:[Object(d.jsxs)("div",{class:"formLabel",children:[e.label,e.labelTooltip?Object(d.jsx)(S,{text:e.labelTooltip}):null]}),Object(d.jsx)("div",{class:"formInput",children:Object(d.jsx)(D,{column:e,onChange:function(e){w.current=Object(f.a)(Object(f.a)({},w.current),e)}})})]},t)}))}),Object(d.jsx)("div",{class:"button greenButton ".concat(I?"loading":""),onClick:E,children:I?"Sauvegarde en cours...":"Cr\xe9er"}),Object(d.jsx)("div",{class:"button",onClick:function(){return s.goBack()},children:"Annuler"})]})]})},T=function(){var e=Object(c.useContext)(u.a),t=Object(o.h)(),n=t.viewIndex,a=t.recordId,r=Object(o.f)(),i=e.views[n],s=Object(c.useState)(null),j=Object(l.a)(s,2),b=j[0],v=j[1],h=i.columns.filter((function(e){return e.dataType&&!1!==e.canEdit&&!e.hidden})),x=Object(c.useRef)({}),_=Object(c.useState)(!1),g=Object(l.a)(_,2),w=g[0],y=g[1];Object(c.useEffect)((function(){m.a.get("/record",{params:{viewIndex:n,recordId:a}}).then((function(e){x.current={},v(e.data)}))}),[n,a]);var C=function(){var e=Object(p.a)(O.a.mark((function e(){return O.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return y(!0),e.prev=1,e.next=4,m.a.post("/updateRecord",{viewIndex:n,primaryValue:a,data:x.current});case 4:y(!1),r.push("/record/".concat(n,"/").concat(a)),e.next=12;break;case 8:e.prev=8,e.t0=e.catch(1),e.t0.response.responseText&&window.swal({title:"Erreur",text:e.t0.response.responseText,dangerMode:!0}),y(!1);case 12:case"end":return e.stop()}}),e,null,[[1,8]])})));return function(){return e.apply(this,arguments)}}();return Object(d.jsxs)("div",{class:"view",children:[Object(d.jsx)("div",{class:"viewHeader",children:Object(d.jsx)("div",{class:"viewTitle",children:i.label})}),Object(d.jsx)("div",{class:"paddedView",children:b?Object(d.jsxs)(d.Fragment,{children:[Object(d.jsx)("div",{class:"form",children:h.map((function(e,t){return Object(d.jsxs)("div",{class:"formElement",children:[Object(d.jsxs)("div",{class:"formLabel",children:[e.label,e.labelTooltip?Object(d.jsx)(S,{text:e.labelTooltip}):null]}),Object(d.jsx)("div",{class:"formInput",children:Object(d.jsx)(D,{column:e,initialData:b,onChange:function(e){x.current=Object(f.a)(Object(f.a)({},x.current),e)}})})]},t)}))}),Object(d.jsx)("div",{class:"button greenButton ".concat(w?"loading":""),onClick:C,children:w?"Sauvegarde en cours...":"Sauvegarder"}),Object(d.jsx)("div",{class:"button",onClick:function(){return r.goBack()},children:"Annuler"})]}):null})]})},P=n(28),A=function(e){var t=e.view,n=e.viewIndex,a=e.subviewIndex,r=e.currentFilters,i=e.orderBy,s=e.isDesc,o=e.query,u=Object(c.useState)(!1),j=Object(l.a)(u,2),b=j[0],f=j[1];return Object(d.jsx)("div",{class:"downloadButton",onClick:function(){f(!0),m.a.post("/recordsExport",{viewIndex:n,subviewIndex:a,filters:r.map((function(e){return e.query})),orderBy:i,isDesc:s,query:o}).then((function(e){f(!1),window.download(e.data.content,t.label+".csv")}))},children:Object(d.jsx)("i",{class:"fa ".concat(b?"fa-spin fa-circle-notch":"fa-cloud-download")})})};function L(e){var t,n,a=Object(c.useRef)(null);return t=a,n=e.onOutsideClick,Object(c.useEffect)((function(){function e(e){t.current&&!t.current.contains(e.target)&&n()}return document.addEventListener("mousedown",e),function(){document.removeEventListener("mousedown",e)}}),[t]),Object(d.jsx)("div",{ref:a,children:e.children})}var R=function(e){var t=e.view,n=e.refreshData,a=e.onAddFilter,r=Object(c.useState)(!1),i=Object(l.a)(r,2),s=i[0],o=i[1],u=Object(c.useState)(null),j=Object(l.a)(u,2),b=j[0],f=j[1],v=Object(c.useState)("contains"),O=Object(l.a)(v,2),p=O[0],h=O[1],x=Object(c.useState)(null),m=Object(l.a)(x,2),_=m[0],g=m[1];return Object(d.jsx)(L,{onOutsideClick:function(){return o(!1)},children:Object(d.jsxs)("div",{class:"button openFilterPopup",onClick:function(){return o(!s)},children:[Object(d.jsx)("i",{class:"fas fa-filter"})," Ajouter un filtre",s?Object(d.jsxs)("div",{class:"addFilterPopup",onClick:function(e){return e.stopPropagation()},children:[Object(d.jsx)("div",{class:"filterLabel",children:"Champ"}),Object(d.jsxs)("select",{onChange:function(e){return f(e.target.value)},children:[Object(d.jsx)("option",{value:"",children:"S\xe9lectionnez un champ"}),t.columns.filter((function(e){return(e.searchableName||e.name)&&"foreign"!==e.dataType&&"datalist"!==e.dataType})).map((function(e){var t=e.searchableName||e.name;return Object(d.jsx)("option",{value:t,children:e.label},t)}))]}),Object(d.jsx)("div",{class:"filterLabel",children:"Op\xe9rateur"}),Object(d.jsxs)("select",{onChange:function(e){return h(e.target.value)},children:[Object(d.jsx)("option",{value:"contains",children:"contient"}),Object(d.jsx)("option",{value:"notContains",children:"ne contient pas"}),Object(d.jsx)("option",{value:"startsWith",children:"commence par"}),Object(d.jsx)("option",{value:"endsWith",children:"finit par"}),Object(d.jsx)("option",{value:"is",children:"est"}),Object(d.jsx)("option",{value:"isNot",children:"n'est pas"}),Object(d.jsx)("option",{value:"largerThan",children:"est sup\xe9rieur \xe0"}),Object(d.jsx)("option",{value:"smallerThan",children:"est inf\xe9rieur \xe0"})]}),Object(d.jsx)("div",{class:"filterLabel",children:"Valeur"}),Object(d.jsx)("input",{onChange:function(e){return g(e.target.value)}}),Object(d.jsx)("div",{class:"button greenButton",onClick:function(){if(b&&_){var e,c=null===(e=t.columns.find((function(e){return(e.searchableName||e.name)===b})))||void 0===e?void 0:e.label;"contains"===p?a({label:c+" contient "+_,query:b+" LIKE '%"+_+"%'"}):"notContains"===p?a({label:c+" ne contient pas "+_,query:b+" NOT LIKE '%"+_+"%'"}):"is"===p?a({label:c+" est "+_,query:b+" = '"+_+"'"}):"isNot"===p?a({label:c+" n'est pas "+_,query:b+" != '"+_+"'"}):"startsWith"===p?a({label:c+" commence par "+_,query:b+" LIKE '"+_+"%'"}):"endsWith"===p?a({label:c+" finit par "+_,query:b+" LIKE '%"+_+"'"}):"largerThan"===p?a({label:c+" sup\xe9rieur \xe0 "+_,query:b+" >= "+_}):"smallerThan"===p&&a({label:c+" inf\xe9rieur \xe0 "+_,query:b+" <= "+_}),f(null),g(null),o(!1),n()}},children:"Ajouter"})]}):null]})})},B=function(e){var t,n,a=e.viewIndex,r=e.selectedRecordIds,i=e.refreshData,s=Object(c.useContext)(u.a),o=s.views[a],j=Object(c.useState)(!1),b=Object(l.a)(j,2),f=b[0],v=b[1];return!s.hideMultiselect&&(!1!==o.canDelete||(null===(t=o.customActions)||void 0===t?void 0:t.length)>0)?Object(d.jsx)(L,{onOutsideClick:function(){return v(!1)},children:Object(d.jsxs)("div",{class:"actionButtonsContainer",children:[Object(d.jsx)("div",{class:"button openBulkActionsButton",onClick:function(){return v(!f)},children:"Actions"}),f?Object(d.jsxs)("div",{class:"bulkActions",children:[null===(n=o.customActions)||void 0===n?void 0:n.map((function(e,t){return Object(d.jsx)("div",{class:"action recordAction",onClick:(n=t,function(){v(!1),m.a.post("customAction",{viewIndex:a,actionIndex:n,selectedRecordIds:r}).then((function(){i()})).catch((function(){window.swal({title:"Erreur",text:"L'action a \xe9chou\xe9",dangerMode:!0})}))}),children:e.label});var n})),!1!==o.canDelete?Object(d.jsx)("div",{class:"action recordAction red",onClick:function(){window.swal({title:"\xcates-vous s\xfbr ?",text:"Une fois la suppression confirm\xe9e, il ne sera pas possible de revenir en arri\xe8re.",buttons:["Annuler","Oui"],dangerMode:!0}).then((function(e){e&&m.a.post("deleteRecords",{viewIndex:a,primaryValues:r}).then((function(){i()})).catch((function(){window.swal({title:"Erreur",text:"Suppression impossible",dangerMode:!0})}))}))},children:"Supprimer"}):null]}):null]})}):null},F=n(15),q=function(e,t,n){if(e.showAsPicture){var c=e.baseUrl+t[e.pathField];return t[e.pathField]?Object(d.jsx)("a",{href:c,target:"_blank",children:Object(d.jsx)("img",{src:"https://res.cloudinary.com/forest2/image/fetch/".concat(n?"w_60,h_30":"w_300,h_150",",c_fit/").concat(c)})}):null}if(e.formatValue)return Object(d.jsx)("div",{dangerouslySetInnerHTML:{__html:t["__formatValue-".concat(e.__id__,"__")]}});if(e.formattedValue)return Object(d.jsx)("div",{children:Object(F.a)(e.formattedValue,t)});if(e.action){if(e.actionDisplayCondition)if(!Object(F.a)(e.actionDisplayCondition,t))return"";var a=JSON.parse(JSON.stringify(e.data));for(var r in a)a[r]=Object(F.a)(a[r],t);return Object(d.jsx)("div",{class:"actionButton","data-route":'" + column.route + "',"data-data":'" + JSON.stringify(data) + "',children:e.action})}return"tinyint"===e.dataType?Object(d.jsx)("div",{children:1===t[e.name]?"Oui":"Non"}):"color"===e.dataType?Object(d.jsx)("div",{class:"colorPreview",style:{backgroundColor:t[e.name]}}):"richText"===e.dataType?Object(d.jsx)("div",{dangerouslySetInnerHTML:{__html:t[e.htmlField]}}):Object(d.jsx)("div",{children:t[e.name]})},V=function(){var e,t,n=Object(o.h)(),a=n.viewIndex,r=n.subviewIndex,i=Object(o.f)(),j=Object(c.useState)(1),b=Object(l.a)(j,2),f=b[0],v=b[1],O=Object(c.useState)([]),p=Object(l.a)(O,2),h=p[0],x=p[1],_=Object(c.useState)(null),g=Object(l.a)(_,2),w=g[0],y=g[1],C=Object(c.useState)(null),I=Object(l.a)(C,2),k=I[0],E=I[1],D=Object(c.useState)(null),S=Object(l.a)(D,2),M=S[0],T=S[1],L=Object(c.useState)([]),F=Object(l.a)(L,2),V=F[0],N=F[1],U=Object(c.useState)(null),W=Object(l.a)(U,2),K=W[0],H=W[1],J=Object(c.useContext)(u.a),Q=J.views[a],z=null===(e=Q.columns)||void 0===e?void 0:e.filter((function(e){return!e.hideInTable&&!e.hidden}));function Y(){H(null),m.a.post("/records",{viewIndex:a,subviewIndex:r,page:f,filters:h.map((function(e){return e.query})),orderBy:w,isDesc:k,query:M}).then((function(e){H(e.data)}))}return Object(c.useEffect)((function(){v(1),T(null),y(null),E(null),V.length>0&&N([]),h.length>0&&x([])}),[a]),Object(c.useEffect)((function(){Y()}),[a,r,f,M,h,w,k]),Object(d.jsxs)("div",{class:"view",children:[Object(d.jsxs)("div",{class:"scrollable",children:[Object(d.jsxs)("div",{class:"viewHeader",children:[Object(d.jsx)("div",{class:"viewTitle",children:Q.label}),Object(d.jsxs)("div",{class:"viewHeaderActions",children:[Object(d.jsxs)("div",{class:"searchBarContainer",children:[Object(d.jsx)("input",{type:"text",placeholder:"Rechercher",class:"searchBar",onChange:function(e){return T(e.target.value)}}),Object(d.jsx)("div",{class:"searchBarIcon",children:Object(d.jsx)("i",{class:"fa fa-search"})})]}),Object(d.jsx)(B,{viewIndex:a,selectedRecordIds:V,refreshData:Y}),Object(d.jsx)(R,{view:Q,refreshData:Y,onAddFilter:function(e){return x([].concat(Object(P.a)(h),[e]))}}),Object(d.jsx)(A,{view:Q,viewIndex:a,subviewIndex:r,currentFilters:h,orderBy:w,isDesc:k,query:M}),Q.canCreate?Object(d.jsx)(s.b,{to:"/createRecord/".concat(a),children:Object(d.jsx)("div",{class:"plusButton",children:Object(d.jsx)("i",{class:"fa fa-plus"})})}):null]})]}),h.length>0?Object(d.jsx)("div",{class:"filtersContainer",children:h.map((function(e,t){return Object(d.jsxs)("div",{class:"filterItem",children:[Object(d.jsx)("div",{class:"filterItemLabel",children:e.label}),Object(d.jsx)("div",{class:"filterRemove",onClick:function(){x(h.filter((function(t){return t.query!==e.query})))},children:Object(d.jsx)("i",{class:"fa fa-times"})})]},t)}))}):null,Object(d.jsxs)("table",{class:"table",children:[Object(d.jsx)("thead",{children:Object(d.jsxs)("tr",{children:[J.hideMultiselect?null:Object(d.jsx)("th",{}),z.map((function(e,t){var n="foreign"===e.dataType||"datalist"===e.dataType?e.formattedValue:e.sortName||e.name;return Object(d.jsxs)("th",{class:n?"sortable":"",onClick:function(){n&&(y(n),E(w===n&&!k))},children:[e.label,n?Object(d.jsx)("div",{class:"columnSortIcon",children:Object(d.jsx)("i",{class:"fas fa-sort".concat(!0===k&&n===w?"-down":!1===k&&n===w?"-up":"")})}):null]},t)}))]})}),Object(d.jsxs)("tbody",{children:[K?null:Array.from({length:10}).map((function(e,t){return Object(d.jsx)("tr",{class:"record",children:Array.from({length:z.length+(J.hideMultiselect?0:1)}).map((function(e,t){return Object(d.jsx)("td",{children:" "},t)}))},t)})),null===K||void 0===K||null===(t=K.records)||void 0===t?void 0:t.map((function(e){var t=e[Q.primaryId];return Object(d.jsxs)("tr",{class:"record ".concat(Q.notClickable?"nonClickableRow":""),onClick:function(e){"A"!=e.target.tagName?Q.notClickable||i.push("/record/".concat(a,"/").concat(t)):e.stopPropagation()},children:[J.hideMultiselect?null:Object(d.jsx)("td",{class:"checkboxParent",onClick:function(e){N(V.includes(t)?V.filter((function(e){return e!==t})):[].concat(Object(P.a)(V),[t])),e.stopPropagation()},children:Object(d.jsx)("div",{class:"checkbox ".concat(V.includes(t)?"checked":"")})}),z.map((function(t,n){return Object(d.jsx)("td",{children:q(t,e,!0)},n)}))]},t)}))]})]})]}),Object(d.jsxs)("div",{class:"tableFooter",children:[Object(d.jsxs)("div",{class:"tableCounter",children:[(null===K||void 0===K?void 0:K.count)||"-"," ",Q.label]}),Object(d.jsxs)("div",{class:"paginator",children:[Object(d.jsx)("div",{class:"paginatorLeft",onClick:function(){return v(Math.max(1,f-1))},children:Object(d.jsx)("i",{class:"fas fa-caret-left"})}),Object(d.jsxs)("div",{class:"paginatorNumber",children:[f," / ",K?Math.ceil(K.count/(Q.limit||10)):"-"]}),Object(d.jsx)("div",{class:"paginatorRight",onClick:function(){return v(Math.min(f+1,Math.ceil(K.count/(Q.limit||10))))},children:Object(d.jsx)("i",{class:"fas fa-caret-right"})})]})]})]})},N=function(e){var t,n,a=e.viewIndex,r=e.record,i=Object(c.useContext)(u.a).views[a],s=Object(c.useState)(!1),j=Object(l.a)(s,2),b=j[0],f=j[1],v=Object(o.f)(),h=function(){var e=Object(p.a)(O.a.mark((function e(){return O.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,window.swal({title:"\xcates-vous s\xfbr ?",text:"Une fois la suppression confirm\xe9e, il ne sera pas possible de revenir en arri\xe8re.",buttons:["Annuler","Oui"],dangerMode:!0});case 2:if(!e.sent){e.next=14;break}return i.deleteCallback&&m.a.post(i.deleteCallback,{id:r[i.primaryId],data:r}),e.prev=5,e.next=8,m.a.post("/deleteRecord",{viewIndex:a,primaryValue:r[i.primaryId]});case 8:v.push("/records/".concat(a)),e.next=14;break;case 11:e.prev=11,e.t0=e.catch(5),window.swal({title:"Erreur",text:"Suppression impossible",dangerMode:!0});case 14:case"end":return e.stop()}}),e,null,[[5,11]])})));return function(){return e.apply(this,arguments)}}();return!0===i.canDuplicate||!1!==i.canDelete||(null===(t=i.customActions)||void 0===t?void 0:t.length)>0?Object(d.jsx)(L,{onOutsideClick:function(){return f(!1)},children:Object(d.jsxs)("div",{class:"actionButtonsContainer",children:[Object(d.jsx)("div",{class:"button openActionsButton",onClick:function(){return f(!b)},children:"Actions"}),b?Object(d.jsxs)("div",{class:"actions",children:[null===(n=i.customActions)||void 0===n?void 0:n.map((function(e,t){return Object(d.jsx)("div",{class:"action recordAction",onClick:(n=t,function(){f(!1),m.a.post("customAction",{viewIndex:a,actionIndex:n,selectedRecordIds:[r[i.primaryId]]}).then((function(){v.push("/records/".concat(a))})).catch((function(){window.swal({title:"Erreur",text:"L'action a \xe9chou\xe9",dangerMode:!0})}))}),children:e.label});var n})),!0===i.canDuplicate?Object(d.jsx)("div",{class:"action recordAction duplicateRecord",children:"Dupliquer"}):null,!1!==i.canDelete?Object(d.jsx)("div",{class:"action recordAction red",onClick:h,children:"Supprimer"}):null]}):null]})}):null},U=function(){var e=Object(o.f)();return Object(d.jsx)("div",{class:"button backButton",onClick:function(){return e.goBack()},children:"Retour"})},W=function(e){var t=e.record,n=e.panel;return Object(d.jsx)("div",{class:"downloadPanelButton",onClick:function(){m.a.get("/customQuery",{params:{query:n.query||Object(F.a)(n.formattedQuery,t),primaryValue:2630}}).then((function(e){var t=e.data,c=[];c.push(Object.keys(t[0]).filter((function(e){return e!==n.primaryId})).join(","));var a,r=Object(h.a)(t);try{var i=function(){var e=a.value;c.push(Object.keys(e).filter((function(e){return e!==n.primaryId})).map((function(t){return n.formattedValues&&t in n.formattedValues?Object(F.a)(n.formattedValues[t],e):e[t]})).join(","))};for(r.s();!(a=r.n()).done;)i()}catch(l){r.e(l)}finally{r.f()}window.download(c.join("\r\n"),n.label+".csv")}))},children:Object(d.jsx)("i",{class:"fa fa-cloud-download"})})},K=function(e){var t=e.panel,n=e.record,a=e.view,r=Object(c.useState)(null),i=Object(l.a)(r,2),s=i[0],j=i[1],b=Object(o.f)(),f=Object(o.h)().viewIndex,v=Object(c.useContext)(u.a);Object(c.useEffect)((function(){h()}),[]);var h=function(){m.a.get("/customQuery",{params:{query:t.query||Object(F.a)(t.formattedQuery,n),primaryValue:n[a.primaryId]}}).then((function(e){j(e.data)}))},x=function(){var e=Object(p.a)(O.a.mark((function e(n){return O.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,window.swal({title:"\xcates-vous s\xfbr ?",text:"Une fois la suppression confirm\xe9e, il ne sera pas possible de revenir en arri\xe8re.",buttons:["Annuler","Oui"],dangerMode:!0});case 2:if(!e.sent){e.next=13;break}return e.prev=4,e.next=7,m.a.post("/deleteRecordFromPanel",{viewIndex:f,panelId:t.__id__,primaryValue:n[t.primaryId]});case 7:h(),e.next=13;break;case 10:e.prev=10,e.t0=e.catch(4),window.swal({title:"Erreur",text:"Suppression impossible",dangerMode:!0});case 13:case"end":return e.stop()}}),e,null,[[4,10]])})));return function(t){return e.apply(this,arguments)}}();return Object(d.jsx)("div",{children:(null===s||void 0===s?void 0:s.length)>0?Object(d.jsxs)("table",{class:"table panelTable ".concat(t.folded?"folded":""),children:[Object(d.jsx)("thead",{children:Object(d.jsxs)("tr",{children:[Object.keys(s[0]).filter((function(e){return e!==t.primaryId})).map((function(e){return Object(d.jsx)("th",{children:e},e)})),t.canDelete?Object(d.jsx)("th",{}):null]})}),Object(d.jsx)("tbody",{children:s.map((function(e){return Object(d.jsxs)("tr",{class:"record ".concat(t.canShow?"":"nonClickableRow"),onClick:function(){var n=v.views.findIndex((function(e){return"table"===e.type&&e.tableName===t.tableName}));t.canShow&&b.push("/record/".concat(n,"/").concat(e[t.primaryId]))},children:[Object.keys(e).filter((function(e){return e!==t.primaryId})).map((function(n){return Object(d.jsx)("td",{children:Object(d.jsx)("div",{dangerouslySetInnerHTML:{__html:t.formattedValues&&n in t.formattedValues?Object(F.a)(t.formattedValues[n],e):e[n]}})},n)})),t.canDelete?Object(d.jsx)("td",{class:"deleteIconCell",children:Object(d.jsx)("div",{class:"deleteIcon",onClick:function(){return x(e)},children:Object(d.jsx)("i",{class:"fa fa-minus"})})}):null]})}))})]}):0===(null===s||void 0===s?void 0:s.length)?Object(d.jsx)("div",{class:"noData panelTable ".concat(t.folded?"folded":""),children:"Aucune donn\xe9e"}):null})},H=function(e){var t=e.panel,n=Object(c.useState)(null),a=Object(l.a)(n,2),r=a[0],i=a[1];return Object(c.useEffect)((function(){m.a.get("/customQuery",{params:{query:t.query,primaryValue:2630}}).then((function(e){i(e.data)}))}),[t.query]),Object(d.jsx)("div",{children:(null===r||void 0===r?void 0:r.length)>0?Object(d.jsx)("div",{class:"gallery",children:r.map((function(e){return Object(d.jsxs)("div",{class:"galleryPicture",children:[t.canDelete?Object(d.jsx)("div",{class:"deleteIcon",children:Object(d.jsx)("i",{class:"fa fa-minus"})}):null,Object(d.jsx)("a",{href:t.baseUrl+e.Path,target:"_blank",children:Object(d.jsx)("img",{src:"https://res.cloudinary.com/forest2/image/fetch/w_150,h_150,c_fill/"+t.baseUrl+e[t.pathField||"Path"],onerror:"this.style.height = 0"})})]},e.Path)}))}):0===(null===r||void 0===r?void 0:r.length)?Object(d.jsx)("div",{class:"noData panelTable ".concat(t.folded?"folded":""),children:"Aucune donn\xe9e"}):null})},J=function(e){var t=e.panel,n=e.record,a=e.view,r=Object(c.useRef)();Object(c.useEffect)((function(){window.google&&n&&(t.query?m.a.get("/customQuery",{query:t.query,primaryValue:n[a.primaryId]}).then((function(e){var n,c=null===e||void 0===e||null===(n=e.data)||void 0===n?void 0:n[0];c&&i(c.Lat,c.Lng,t.zoom||12)})):i(n[t.latitudeField],n[t.longitudeField],t.zoom||12))}),[n,window.google]);var i=function(e,t,n){var c=new window.google.maps.Map(r.current,{zoom:n,center:{lat:e,lng:t}});new window.google.maps.Marker({position:{lat:e,lng:t},map:c})};return Object(d.jsx)("div",{class:"map",ref:r})},Q=function(){var e,t=Object(c.useContext)(u.a),n=Object(o.h)(),a=n.viewIndex,r=n.recordId,i=Object(c.useState)(null),j=Object(l.a)(i,2),b=j[0],f=j[1],v=t.views[a],O=null===(e=v.columns)||void 0===e?void 0:e.filter((function(e){return!e.hideInTable&&!e.hidden}));return Object(c.useEffect)((function(){m.a.get("/record",{params:{viewIndex:a,recordId:r}}).then((function(e){f(e.data)}))}),[a,r]),Object(d.jsxs)("div",{class:"view backgroundBlue",children:[Object(d.jsxs)("div",{class:"viewHeader",children:[Object(d.jsx)("div",{class:"viewTitle",children:v.label}),Object(d.jsxs)("div",{class:"viewHeaderActions",children:[Object(d.jsx)("div",{class:"button adjacentButton prevButton",children:"\u25c4"}),Object(d.jsx)("div",{class:"button adjacentButton nextButton",children:"\u25ba"}),Object(d.jsx)(U,{}),Object(d.jsx)(N,{viewIndex:a,record:b}),!1!==v.canEdit?Object(d.jsx)(s.b,{to:"/editRecord/".concat(a,"/").concat(r),children:Object(d.jsx)("div",{class:"button greenButton recordAction",children:"Modifier"})}):null]})]}),Object(d.jsx)("div",{class:"paddedView",children:Object(d.jsxs)("div",{class:"showContainer",children:[Object(d.jsxs)("div",{class:"panel detailsPanel",children:[Object(d.jsx)("div",{class:"panelTitle",children:"D\xe9tails"}),b?O.map((function(e,t){return Object(d.jsxs)("div",{class:"showRecordField",children:[Object(d.jsx)("div",{class:"formLabel",children:e.label}),Object(d.jsx)("div",{class:"formValue",children:q(e,b,!1)||"-"})]},t)})):null]}),v.recordViewPanels&&b?Object(d.jsx)("div",{class:"recordViewPanels",children:v.recordViewPanels.map((function(e,t){return Object(d.jsxs)("div",{class:"panel",children:[Object(d.jsxs)("div",{class:"panelHeader",children:[Object(d.jsx)("div",{class:"viewTitle",children:e.label}),Object(d.jsxs)("div",{class:"viewHeaderActions",children:[e.folded?Object(d.jsx)("div",{class:"button smallButton unfoldPanel",children:"Afficher"}):null,e.canCreate?Object(d.jsx)(s.b,{to:"/createRecord/".concat(a,"/").concat(t,"/").concat(r),children:Object(d.jsx)("div",{class:"plusButton",children:Object(d.jsx)("i",{class:"fa fa-plus"})})}):null,e.canDownload&&"table"===e.type?Object(d.jsx)(W,{record:b,panel:e}):null]})]}),"table"===e.type?Object(d.jsx)(K,{record:b,panel:e,view:v}):null,"gallery"===e.type?Object(d.jsx)(H,{panel:e}):null,"map"===e.type?Object(d.jsx)(J,{record:b,panel:e,view:v}):null]},t)}))}):null]})})]})},z=n.p+"static/media/logo.e407b9ca.png",Y=function(e){var t=e.setIsAuthenticated,n=Object(c.useState)(""),a=Object(l.a)(n,2),r=a[0],i=a[1],s=Object(c.useState)(""),o=Object(l.a)(s,2),u=o[0],j=o[1],b=function(){var e=Object(p.a)(O.a.mark((function e(){return O.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,m.a.post("/login",{username:r,password:u});case 2:e.sent.data.success&&t(!0);case 4:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();return Object(d.jsx)("div",{class:"loginPanelBackground",children:Object(d.jsxs)("div",{class:"loginPanel",children:[Object(d.jsx)("div",{class:"loginLogoContainer",children:Object(d.jsx)("img",{class:"loginLogo",src:z})}),Object(d.jsx)("label",{children:"Nom d'utilisateur"}),Object(d.jsx)("input",{type:"text",name:"username",onChange:function(e){return i(e.target.value)}}),Object(d.jsx)("label",{children:"Mot de passe"}),Object(d.jsx)("input",{type:"password",name:"password",onChange:function(e){return j(e.target.value)}}),Object(d.jsx)("button",{class:"button greenButton fullWidth",onClick:b,children:"Se connecter"})]})})},$=function(){var e=Object(c.useContext)(u.a),t=Object(o.h)().viewIndex,n=e.views[t];return Object(d.jsx)("div",{class:"view",children:Object(d.jsx)("iframe",{src:n.src})})},G=n(44),X=n(40),Z=["componentPath","children"],ee={react:function(){return{exports:a.a}},axios:function(){return{exports:m.a}},"styled-components":function(){return{exports:X.a}}};function te(e,t,n){var c=Object.create(n);return function n(a){if(a in c||t!==a){if(!(a in c))throw"Module '".concat(a,"' not found")}else{var r={exports:{}};c[a]=function(){return r},Function("require, exports, module",e)(n,r.exports,r)}return c[a]().exports}(t)}function ne(e){return ce.apply(this,arguments)}function ce(){return(ce=Object(p.a)(O.a.mark((function e(t){var n,c;return O.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,m.a.get("/customComponent",{params:{componentPath:t}});case 3:return n=e.sent,c=n.data,e.abrupt("return",{default:te(c,"__moduleName__",ee)});case 8:return e.prev=8,e.t0=e.catch(0),console.error(e.t0),e.abrupt("return",{default:function(){return Object(d.jsx)("div",{children:"Erreur de rendu"})}});case 12:case"end":return e.stop()}}),e,null,[[0,8]])})))).apply(this,arguments)}var ae=function(e){var t=e.componentPath,n=e.children,r=Object(G.a)(e,Z),i=Object(c.useMemo)((function(){return a.a.lazy(Object(p.a)(O.a.mark((function e(){return O.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",ne(t));case 1:case"end":return e.stop()}}),e)}))))}),[t]);return Object(d.jsx)(c.Suspense,{fallback:null,children:Object(d.jsx)(i,Object(f.a)(Object(f.a)({},r),{},{children:n}))})},re=a.a.memo(ae),ie=function(){var e=Object(c.useContext)(u.a),t=Object(o.h)().viewIndex,n=e.views[t].componentPath;return Object(d.jsx)(re,{componentPath:n})};m.a.defaults.withCredentials=!0,m.a.defaults.baseURL="/_HOMEPAGE_/api";var le=function(){var e=Object(c.useState)(null),t=Object(l.a)(e,2),n=t[0],a=t[1];return Object(c.useEffect)((function(){m.a.get("/isAuthenticated").then((function(e){a(e.data.isAuthenticated)}))}),[]),Object(d.jsx)("div",{id:"body",children:!0===n?Object(d.jsx)(u.b,{children:Object(d.jsxs)(s.a,{basename:"/_HOMEPAGE_",children:[Object(d.jsx)(b,{}),Object(d.jsxs)(o.c,{children:[Object(d.jsx)(o.a,{path:"/records/:viewIndex/:subviewIndex?",children:Object(d.jsx)(V,{})}),Object(d.jsx)(o.a,{path:"/record/:viewIndex/:recordId",children:Object(d.jsx)(Q,{})}),Object(d.jsx)(o.a,{path:"/editRecord/:viewIndex/:recordId",children:Object(d.jsx)(T,{})}),Object(d.jsx)(o.a,{path:"/createRecord/:viewIndex/:panelIndex?/:recordId?",children:Object(d.jsx)(M,{})}),Object(d.jsx)(o.a,{path:"/iframe/:viewIndex",children:Object(d.jsx)($,{})}),Object(d.jsx)(o.a,{path:"/customView/:viewIndex",children:Object(d.jsx)(ie,{})})]})]})}):!1===n?Object(d.jsx)(Y,{setIsAuthenticated:a}):Object(d.jsx)("div",{class:"appLoading",children:Object(d.jsx)("i",{class:"fa fa-circle-notch fa-spin"})})})};i.a.render(Object(d.jsx)(a.a.StrictMode,{children:Object(d.jsx)(le,{})}),document.getElementById("root"))}},[[75,1,2]]]);
2
+ //# sourceMappingURL=main.435f24e1.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["utils/evalExpression.js","contexts/ConfigContext.js","components/Sidebar.js","components/inputs/ColorInput.js","components/inputs/RichTextInput.js","components/inputs/DatetimeInput.js","components/inputs/AddressInput.js","components/inputs/FileInput.js","components/inputs/ForeignSelectInput.js","components/inputs/ForeignDatalistInput.js","components/Input.js","components/LabelTooltip.js","pages/CreateRecord.js","pages/EditRecord.js","components/DownloadButton.js","components/OutsideClickHandler.js","components/AddFilterButton.js","components/BulkActionsButton.js","utils/getFormattedValue.js","pages/Records.js","components/ActionsButton.js","components/BackButton.js","components/DownloadTablePanelButton.js","components/panels/TablePanel.js","components/panels/GalleryPanel.js","components/panels/MapPanel.js","pages/Record.js","images/logo.png","pages/Login.js","pages/Iframe.js","components/CustomComponent.js","pages/CustomView.js","App.js","index.js"],"names":["expression","data","varString","key","replace","JSON","stringify","eval","e","console","log","error","ConfigContext","createContext","ConfigProvider","props","useState","config","setConfig","useEffect","axios","get","then","response","_config","googleMapsKey","script","document","createElement","src","body","appendChild","removeChild","Provider","value","children","SidebarItemIconAndLabel","view","class","icon","label","location","useLocation","useContext","history","useHistory","logo","name","views","filter","hidden","map","i","type","href","isActive","pathname","to","startsWith","onClick","push","subviews","subview","j","stopPropagation","hideBranding","column","onChange","initialData","colorPicker","useRef","current","window","$","spectrum","preferredFormat","showInput","chooseText","cancelText","color","on","_","toHexString","off","ref","target","Quill","prototype","getHTML","this","container","querySelector","innerHTML","quillContainer","editor","theme","modules","toolbar","contentField","setContents","parse","htmlField","getContents","style","height","withTime","datepicker","datepickerEl","language","autoClose","onSelect","date","moment","format","selectDate","Date","googleMapsInput","google","autocomplete","maps","places","Autocomplete","componentRestrictions","addListener","place","getPlace","length","geometry","fieldValues","latitudeField","lat","longitudeField","lng","addressField","formatted_address","streetNumberField","address_components","find","x","long_name","routeField","localityField","administrativeAreaLevel2Field","administrativeAreaLevel1Field","countryField","postalCodeField","placeData","setInputValue","addEventListener","removeEventListener","placeholder","defaultValue","form","isLoading","setIsLoading","path","setPath","onInputChange","a","f","FormData","method","url","subdirectory","publicPath","encodeURI","s3Config","headers","fileData","aspectRatioField","aspectRatio","originalNameField","originalFilename","id","Math","random","toString","htmlFor","display","preventDefault","options","setOptions","viewIndex","useParams","post","columnId","__id__","optional","option","query","setQuery","input","isInputValid","list","dataType","includes","Array","isArray","Object","keys","ForeignDatalistInput","ForeignSelectInput","AddressInput","ColorInput","FileInput","DatetimeInput","RichTextInput","text","visible","setVisible","onMouseLeave","onMouseEnter","panelIndex","recordId","panel","recordViewPanels","filteredColumns","createConfig","columns","canEditOnCreation","canEdit","isCreating","setIsCreating","createRecord","createFilters","responseText","swal","title","dangerMode","aNewSingular","index","labelTooltip","LabelTooltip","Input","newValues","goBack","record","setRecord","dataToUpdate","isUpdating","setIsUpdating","params","updateRecord","primaryValue","subviewIndex","currentFilters","orderBy","isDesc","isDownloading","setIsDownloading","filters","download","content","OutsideClickHandler","handler","wrapperRef","onOutsideClick","handleClickOutside","event","contains","refreshData","onAddFilter","filtersOpened","setFiltersOpened","field","setField","operator","setOperator","setValue","searchableName","fieldLabel","c","selectedRecordIds","bulkActionsOpened","setBulkActionsOpened","hideMultiselect","canDelete","customActions","action","actionIndex","catch","buttons","willDelete","primaryValues","onTable","showAsPicture","imageUrl","baseUrl","pathField","formatValue","dangerouslySetInnerHTML","__html","formattedValue","evalExpression","actionDisplayCondition","backgroundColor","page","setPage","setCurrentFilters","setOrderBy","setIsDesc","setSelectedRecordIds","setData","hideInTable","BulkActionsButton","AddFilterButton","DownloadButton","canCreate","sortName","from","cellIndex","records","primaryId","notClickable","tagName","getFormattedValue","count","max","ceil","limit","min","actionsOpened","setActionsOpened","deleteRecord","deleteCallback","canDuplicate","formattedQuery","results","lines","join","result","formattedValues","setResults","deleteRow","row","panelId","folded","canShow","findIndex","tableName","Path","onerror","mapRef","initMap","Lat","Lng","zoom","Map","center","Marker","position","BackButton","ActionsButton","canDownload","DownloadTablePanelButton","TablePanel","GalleryPanel","MapPanel","setIsAuthenticated","username","setUsername","password","setPassword","login","success","packages","exports","React","styled","getParsedModule","code","moduleName","_this","create","require","module","Function","wrapper","fetchComponent","componentPath","default","CustomComponent","Component","useMemo","lazy","fallback","memo","defaults","withCredentials","baseURL","App","isAuthenticated","basename","Sidebar","Records","Record","EditRecord","CreateRecord","Iframe","CustomView","Login","ReactDOM","render","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.435f24e1.chunk.js","sourcesContent":["\nexport default (expression, data) => {\n try {\n var varString = '';\n for (var key in data) {\n varString += \"var \" + key + \" = \" + (typeof data[key] === \"string\" ? \"'\" + data[key].replace(/'/g, \"\\\\'\").replace(/\\n/g, \"<br>\").replace(/\\r/g, \"\") + \"'\" : (typeof data[key] === \"object\" ? JSON.stringify(data[key]) : data[key])) + \";\"\n }\n return eval(varString + expression)\n } catch (e) {\n console.log(varString + expression);\n console.error(e);\n return \"Error\"\n }\n}","\nimport React, { useEffect, createContext, useState } from \"react\";\nimport axios from \"axios\";\n\nconst ConfigContext = createContext(null);\n\nconst ConfigProvider = (props) => {\n const [config, setConfig] = useState(null);\n\n useEffect(() => {\n axios.get(\"/config\").then(response => {\n const _config = eval('(' + response.data.config + ')')\n setConfig(_config)\n\n if (_config.googleMapsKey) {\n const script = document.createElement('script');\n script.src = \"https://maps.googleapis.com/maps/api/js?key=\" + _config.googleMapsKey + \"&libraries=places,autocomplete\";\n document.body.appendChild(script);\n return () => {\n document.body.removeChild(script);\n }\n }\n })\n }, []);\n\n return config ? (\n <ConfigContext.Provider value={config} >\n {props.children}\n </ConfigContext.Provider >\n ) : null\n};\n\nexport { ConfigContext, ConfigProvider };","\nimport { useContext } from \"react\";\nimport {\n Link,\n useHistory,\n useLocation\n} from \"react-router-dom\";\nimport { ConfigContext } from '../contexts/ConfigContext'\n\nconst SidebarItemIconAndLabel = ({ view }) => (\n <>\n <div class=\"sidebarIcon\">\n <i class={`fas fa-${view.icon || \"square\"}`}></i>\n </div>\n <div class=\"sidebarLabel\">{view.label}</div>\n </>\n)\n\nexport default () => {\n const location = useLocation();\n const config = useContext(ConfigContext)\n const history = useHistory();\n\n return (\n <div class=\"sidebar\">\n {config.logo ? <img src={config.logo} class=\"logo\" /> : null}\n <div class=\"sidebarTitle\">{config.name}</div>\n <div class=\"sidebarSubtitle\">Back-office</div>\n {config.views.filter(view => !view.hidden).map((view, i) => {\n if (view.type === \"link\") {\n return (\n <a href={view.src} key={i}>\n <div class=\"sidebarItem\">\n <div>\n <SidebarItemIconAndLabel view={view} />\n </div>\n </div>\n </a>\n )\n } else if (view.type === \"iframe\") {\n const isActive = location.pathname === `/iframe/${i}`\n return (\n <Link to={`/iframe/${i}`} key={i}>\n <div class={`sidebarItem ${isActive ? \"active\" : \"\"}`}>\n <div>\n <SidebarItemIconAndLabel view={view} />\n </div>\n </div>\n </Link>\n )\n } else if (view.type === \"custom\") {\n const isActive = location.pathname === `/customView/${i}`\n return (\n <Link to={`/customView/${i}`} key={i}>\n <div class={`sidebarItem ${isActive ? \"active\" : \"\"}`}>\n <div>\n <SidebarItemIconAndLabel view={view} />\n </div>\n </div>\n </Link>\n )\n } else if (view.type === \"table\") {\n // TODO: bug quand la vue 10 est sélectionnée, la 1 aussi\n const isActive =\n location.pathname.startsWith(`/records/${i}`) ||\n location.pathname === `/createRecord/${i}` ||\n location.pathname.startsWith(`/record/${i}`) ||\n location.pathname.startsWith(`/editRecord/${i}`)\n return (\n <div onClick={() => history.push(`/records/${i}`)}>\n <div class={`sidebarItem ${isActive ? \"active\" : \"\"}`} key={i}>\n <div>\n <div class=\"notificationWrapper\"></div>\n <SidebarItemIconAndLabel view={view} />\n </div>\n {view.subviews ? (\n <>\n <div class=\"subviewsSeparator\"></div>\n {view.subviews.map((subview, j) => {\n const isActive = location.pathname == `/records/${i}/${j}`\n return (\n <div onClick={(e) => {\n history.push(`/records/${i}/${j}`);\n e.stopPropagation();\n }}>\n <div data-subview-index={j} class={isActive ? \"active\" : \"\"}>\n <div class=\"notificationWrapperForSubview\"></div>\n {subview.label}\n </div>\n </div>\n )\n })}\n </>\n ) : null}\n </div>\n </div>\n )\n }\n })}\n {!config.hideBranding ? (\n <div class=\"sidebarBranding\">Made with <i class=\"fas fa-heart\"></i> by Galadrim</div>\n ) : null}\n </div>\n )\n}","import { useEffect, useRef } from \"react\";\n\nexport default ({ column, onChange, initialData }) => {\n const colorPicker = useRef(null);\n\n useEffect(() => {\n if (colorPicker.current) {\n window.$(colorPicker.current).spectrum({\n preferredFormat: \"hex\",\n showInput: true,\n chooseText: \"OK\",\n cancelText: \"Annuler\",\n color: initialData?.[column.name]\n });\n window.$(colorPicker.current).on(\"change.spectrum\", (_, value) => {\n onChange({ [column.name]: value.toHexString() })\n })\n }\n return () => window.$(colorPicker.current).off()\n }, [colorPicker.current])\n\n return (\n <input\n ref={colorPicker}\n type='text'\n onChange={(e) => onChange({ [column.name]: e.target.value })}\n />\n );\n}","import { useEffect, useRef } from \"react\";\n\nwindow.Quill.prototype.getHTML = function () {\n return this.container.querySelector('.ql-editor').innerHTML;\n};\n\nexport default ({ column, onChange, initialData }) => {\n const quillContainer = useRef(null);\n\n useEffect(() => {\n if (quillContainer.current && !quillContainer.current.editor) {\n const editor = new window.Quill(quillContainer.current, {\n theme: 'snow',\n modules: {\n toolbar: [\n [{\n 'header': [1, 2, 3, false]\n }],\n ['bold', 'italic', 'underline', 'link'],\n ['image'],\n [{\n 'align': []\n }],\n [{\n 'list': 'ordered'\n }, {\n 'list': 'bullet'\n }],\n ['clean']\n ]\n }\n });\n if (initialData?.[column.contentField]) {\n try {\n editor.setContents(JSON.parse(initialData?.[column.contentField]))\n } catch (e) { }\n }\n editor.on('text-change', () => {\n onChange({\n [column.htmlField]: editor.getHTML(),\n [column.contentField]: JSON.stringify(editor.getContents())\n })\n });\n quillContainer.current.editor = editor\n return editor.off();\n }\n }, [quillContainer.current])\n\n\n return (\n <div class='quillContainer'>\n <div class=\"quill\" ref={quillContainer} style={column.height ? { height: column.height } : null} />\n </div>\n )\n}","import { useEffect, useRef } from \"react\";\n\nexport default ({ column, onChange, initialData, withTime }) => {\n const datepicker = useRef(null);\n\n useEffect(() => {\n if (datepicker.current) {\n const datepickerEl = window.$(datepicker.current).datepicker({\n language: \"fr\",\n autoClose: true,\n onSelect: (_, date) => {\n onChange({ [column.name]: window.moment(date).format(withTime ? null : \"YYYY-MM-DD\") })\n }\n })\n if (initialData?.[column.name]) {\n datepickerEl.data(\"datepicker\").selectDate(new Date(initialData?.[column.name]))\n }\n }\n }, [datepicker.current])\n\n return (\n <div>\n <input type='text' ref={datepicker} data-timepicker={withTime ? \"true\" : \"false\"} />\n </div>\n )\n}","import { useEffect, useRef } from \"react\";\n\nexport default ({ column, onChange, initialData }) => {\n const googleMapsInput = useRef(null);\n\n useEffect(() => {\n if (googleMapsInput.current && window.google) {\n const autocomplete = new window.google.maps.places.Autocomplete(\n googleMapsInput.current,\n column.componentRestrictions ? {\n componentRestrictions: column.componentRestrictions\n } : {}\n )\n autocomplete.addListener('place_changed', () => {\n const place = autocomplete.getPlace();\n if (place.length === 0) {\n return;\n }\n if (!place.geometry) {\n return;\n } else {\n const fieldValues = {\n latitudeField: (place) => place.geometry.location.lat(),\n longitudeField: (place) => place.geometry.location.lng(),\n addressField: (place) => place.formatted_address,\n streetNumberField: (place) => place.address_components.find(x => x.type === \"street_number\")?.long_name,\n routeField: (place) => place.address_components.find(x => x.type === \"route\")?.long_name,\n localityField: (place) => place.address_components.find(x => x.type === \"locality\")?.long_name,\n administrativeAreaLevel2Field: (place) => place.address_components.find(x => x.type === \"administrative_area_level_2\")?.long_name,\n administrativeAreaLevel1Field: (place) => place.address_components.find(x => x.type === \"administrative_area_level_1\")?.long_name,\n countryField: (place) => place.address_components.find(x => x.type === \"country\")?.long_name,\n postalCodeField: (place) => place.address_components.find(x => x.type === \"postal_code\")?.long_name\n }\n const placeData = {}\n for (const key in fieldValues) {\n if (column[key]) {\n placeData[column[key]] = fieldValues[key](place)\n }\n }\n googleMapsInput.current.value = place.formatted_address\n onChange(placeData);\n }\n });\n }\n }, [googleMapsInput.current]);\n\n useEffect(() => {\n const setInputValue = () => {\n if (googleMapsInput.current) {\n googleMapsInput.current.value = \"\"\n }\n }\n googleMapsInput?.current?.addEventListener(\"focusout\", setInputValue)\n return () => googleMapsInput?.current?.removeEventListener(\"focusout\", setInputValue)\n }, [googleMapsInput.current])\n\n return (\n <div>\n <input\n type='text'\n placeholder=''\n ref={googleMapsInput}\n defaultValue={initialData?.[column.name]}\n />\n </div>\n )\n}","import { useRef, useState } from \"react\";\nimport axios from \"axios\";\n\nexport default ({ column, onChange, initialData }) => {\n const form = useRef(null);\n const [isLoading, setIsLoading] = useState(false)\n const [path, setPath] = useState(initialData?.[column.name])\n\n const onInputChange = async () => {\n const f = new FormData(form.current);\n setIsLoading(true);\n\n const response = await axios({\n method: \"post\",\n url: `/uploadFile?subdirectory=${column.subdirectory}&publicPath=${column.publicPath}&s3Config=${encodeURI(JSON.stringify(column.s3Config))}`,\n data: f,\n headers: { \"Content-Type\": \"multipart/form-data\" }\n })\n const fileData = {\n [column.name]: response.data.path\n }\n if (column.aspectRatioField) {\n fileData[column.aspectRatioField] = response.data.aspectRatio\n }\n if (column.originalNameField) {\n fileData[column.originalNameField] = response.data.originalFilename\n }\n onChange(fileData)\n setIsLoading(false)\n setPath(response.data.path)\n // var showAsPicture = $(this).data(\"showAsPicture\") === 1\n //var baseUrl = $(\".fileInputContent[data-input-id='\" + inputId + \"']\").data(\"baseUrl\")\n //$(\".fileInputContent[data-input-id='\" + inputId + \"']\").removeClass(\"clickToSelectFile\").html(showAsPicture ? \"<div><img src='https://res.cloudinary.com/forest2/image/fetch/w_600,h_300,c_fit/\" + baseUrl + data.path + \"' /><div class='deleteFile'><i class='fal fa-trash-alt'></i></div></div>\" : \"<div class='nonImageFileOutput'><span>Fichier téléchargé</span><div class='deleteFile'><i class='fal fa-trash-alt'></i></div></div>\"\n }\n\n const deleteFile = (e) => {\n setPath(null);\n const fileData = {\n [column.name]: null\n }\n if (column.aspectRatioField) {\n fileData[column.aspectRatioField] = null\n }\n if (column.originalNameField) {\n fileData[column.originalNameField] = null\n }\n onChange(fileData)\n e.preventDefault()\n }\n\n var id = Math.random().toString()\n return (\n <div class='fileInputContainer'>\n <label htmlFor={id}>\n <form ref={form}>\n <input type='file' id={id} style={{ display: \"none\" }} name='file' onChange={onInputChange} />\n </form>\n <div class={`fileInputContent ${!path ? \"clickToSelectFile\" : \"\"}`}>\n {isLoading ?\n <i class='fa fa-circle-notch fa-spin'></i>\n : null\n }\n {!isLoading && !path ?\n <div>Cliquez pour sélectionner un fichier</div>\n : null}\n {!isLoading && path ? (\n <div class='nonImageFileOutput'>\n <span>Fichier téléchargé</span>\n <div class='deleteFile' onClick={deleteFile}><i class='fal fa-trash-alt'></i></div>\n </div>\n ) : null}\n </div>\n </label>\n </div>\n )\n}\n","import axios from \"axios\";\nimport { useEffect, useState } from \"react\"\nimport {\n useParams\n} from \"react-router-dom\";\n\nexport default ({ column, onChange, initialData }) => {\n const [options, setOptions] = useState(null)\n const { viewIndex } = useParams();\n\n useEffect(() => {\n axios.post(\"/foreignSelectRecords\", {\n viewIndex,\n columnId: column.__id__\n }).then((response) => {\n setOptions(response.data)\n onChange({ [column.name]: initialData?.[column.name] || (column.optional ? \"NULL\" : response.data[0]?.value) })\n })\n }, [])\n\n return options === null ? (\n <i class='fa fa-circle-notch fa-spin' style={{ color: \"#536579\" }}></i>\n ) : (\n <select\n onChange={(e) => onChange({ [column.name]: e.target.value })}\n defaultValue={initialData?.[column.name]}\n >\n {column.optional ? <option value='NULL'>-</option> : null}\n {options.map((option) => {\n return (\n <option value={option.value} key={option.value}>\n {option.label}\n </option>\n )\n })}\n </select>\n );\n}","import axios from \"axios\";\nimport { useEffect, useRef, useState } from \"react\"\nimport {\n useParams\n} from \"react-router-dom\";\n\nexport default ({ column, onChange, initialData }) => {\n const [options, setOptions] = useState([])\n const { viewIndex } = useParams();\n const [query, setQuery] = useState(\"\")\n const input = useRef(null)\n const isInputValid = useRef(false)\n\n useEffect(() => {\n axios.post(\"/foreignSelectRecords\", {\n viewIndex,\n columnId: column.__id__,\n query\n }).then((response) => {\n setOptions(response.data)\n })\n }, [query])\n\n useEffect(() => {\n const setInputValue = () => {\n if (input.current && !isInputValid.current) {\n input.current.value = \"\"\n }\n }\n input?.current?.addEventListener(\"focusout\", setInputValue)\n return () => input?.current?.removeEventListener(\"focusout\", setInputValue)\n }, [input.current])\n\n const id = Math.random();\n\n return options === null ? (\n <i class='fa fa-circle-notch fa-spin' style={{ color: \"#536579\" }}></i>\n ) : (\n <div>\n <input\n type='text'\n list={id}\n ref={input}\n onChange={(e) => {\n const value = options.find(x => x.label === e.target.value)?.value ?? null;\n isInputValid.current = !!value\n setQuery(e.target.value);\n onChange({ [column.name]: value })\n }}\n defaultValue={options.find(x => x.value === initialData?.[column.name])?.label}\n />\n <datalist id={id}>\n {column.optional ? <option value='NULL'>-</option> : null}\n {options.map((option) => {\n return (\n <option value={option.label} key={option.value}>\n {option.label}\n </option>\n )\n })}\n </datalist>\n </div>\n );\n}","import ColorInput from \"./inputs/ColorInput\"\nimport RichTextInput from \"./inputs/RichTextInput\";\nimport DatetimeInput from \"./inputs/DatetimeInput\";\nimport AddressInput from \"./inputs/AddressInput\";\nimport FileInput from \"./inputs/FileInput\";\nimport ForeignSelectInput from \"./inputs/ForeignSelectInput\";\nimport ForeignDatalistInput from \"./inputs/ForeignDatalistInput\";\n\nexport default ({ column, onChange, initialData }) => {\n const { dataType } = column;\n\n if ([\"int\", \"double\", \"float\", \"decimal\"].includes(dataType)) {\n return (\n <input\n type='number'\n onChange={(e) => onChange({ [column.name]: e.target.value })}\n defaultValue={initialData?.[column.name]}\n />\n );\n } else if (dataType === \"tinyint\") {\n return (\n <select\n onChange={(e) => onChange({ [column.name]: e.target.value })}\n defaultValue={initialData?.[column.name]}\n >\n {column.optional ? <option value='NULL'>-</option> : null}\n <option value='0'>Non</option>\n <option value='1'>Oui</option>\n </select>\n );\n } else if (dataType === \"select\" && Array.isArray(column.options)) {\n return (\n <select\n onChange={(e) => onChange({ [column.name]: e.target.value })}\n defaultValue={initialData?.[column.name]}\n >\n {column.optional ? <option value='NULL'>-</option> : null}\n {column.options.map(option => <option value={option} key={option}>{option}</option>)}\n </select>\n );\n } else if (dataType === \"select\") {\n return (\n <select\n onChange={(e) => onChange({ [column.name]: e.target.value })}\n defaultValue={initialData?.[column.name]}\n >\n {column.optional ? <option value='NULL'>-</option> : null}\n {Object.keys(column.options).map(key => <option value={key} key={key}>{column.options[key]}</option>)}\n </select>\n );\n } else if (dataType === \"datalist\") {\n return (\n <ForeignDatalistInput\n column={column}\n onChange={onChange}\n initialData={initialData}\n />\n );\n } else if (dataType === \"foreign\") {\n return (\n <ForeignSelectInput\n column={column}\n onChange={onChange}\n initialData={initialData}\n />\n );\n } else if (dataType === \"address\") {\n return (\n <AddressInput\n column={column}\n onChange={onChange}\n initialData={initialData}\n />\n )\n } else if (dataType === \"color\") {\n return (\n <ColorInput\n column={column}\n onChange={onChange}\n initialData={initialData}\n />\n );\n } else if (dataType === \"file\") {\n return (\n <FileInput\n column={column}\n onChange={onChange}\n initialData={initialData}\n />\n );\n } else if (dataType === \"datetime\") {\n return (\n <DatetimeInput\n column={column}\n onChange={onChange}\n initialData={initialData}\n withTime={true}\n />\n );\n } else if (dataType === \"date\") {\n return (\n <DatetimeInput\n column={column}\n onChange={onChange}\n initialData={initialData}\n withTime={false}\n />\n );\n } else if (dataType === \"textarea\") {\n return (\n <textarea\n onChange={(e) => onChange({ [column.name]: e.target.value })}\n defaultValue={initialData?.[column.name]}\n >\n </textarea>\n );\n } else if (dataType === \"richText\") {\n return (\n <RichTextInput\n column={column}\n onChange={onChange}\n initialData={initialData}\n />\n );\n } else {\n return (\n <input\n type='text'\n onChange={(e) => onChange({ [column.name]: e.target.value })}\n defaultValue={initialData?.[column.name]}\n />\n );\n }\n};","import { useState } from \"react\";\n\nexport default ({ text }) => {\n const [visible, setVisible] = useState(false);\n return (\n <div class=\"labelTooltipContainer\" onMouseLeave={() => setVisible(false)}>\n <div class=\"labelTooltipIcon\" onMouseEnter={() => setVisible(true)}>\n <i class='fa fa-question-circle' />\n </div>\n {visible ? (\n <div class='tooltip'>\n {text}\n </div>\n ) : null}\n </div>\n )\n}","import { useContext, useRef, useState } from \"react\";\nimport {\n useParams,\n useHistory\n} from \"react-router-dom\";\nimport axios from \"axios\";\nimport Input from \"../components/Input\"\nimport LabelTooltip from \"../components/LabelTooltip\"\nimport { ConfigContext } from '../contexts/ConfigContext'\n\nexport default () => {\n const config = useContext(ConfigContext)\n const { viewIndex, panelIndex, recordId } = useParams();\n const history = useHistory();\n const view = config.views[viewIndex];\n const panel = panelIndex ? view.recordViewPanels[panelIndex] : null;\n const filteredColumns = panel ? panel.createConfig.columns : view.columns.filter(\n column => column.dataType &&\n (column.canEditOnCreation === true || column.canEdit !== false)\n && !column.hidden\n )\n\n const initialData = {}\n for (const column of filteredColumns) {\n if (column.dataType === \"tinyint\") {\n initialData[column.name] = column.optional ? \"NULL\" : \"0\"\n } else if (column.dataType === \"select\" && Array.isArray(column.options)) {\n initialData[column.name] = column.options[0]\n } else if (column.dataType === \"select\") {\n initialData[column.name] = Object.keys(column.options)[0]\n }\n if (column.defaultValue) {\n initialData[column.name] = column.defaultValue\n }\n }\n const data = useRef(initialData)\n const [isCreating, setIsCreating] = useState(false)\n\n const createRecord = async () => {\n for (const key in view.createFilters) {\n data.current[key] = view.createFilters[key]\n }\n setIsCreating(true)\n try {\n await axios.post(\"/createRecord\", {\n viewIndex,\n panelIndex,\n recordId,\n data: data.current\n })\n setIsCreating(false)\n history.push(`/records/${viewIndex}`)\n } catch (error) {\n if (error.response.responseText) {\n window.swal({\n title: \"Erreur\",\n text: error.response.responseText,\n dangerMode: true\n })\n }\n setIsCreating(false)\n }\n }\n\n return (\n <div class=\"view\">\n <div class=\"viewHeader\">\n <div class=\"viewTitle\">{panel ? panel.createConfig.label : `Créer ${view.aNewSingular}`}</div>\n </div>\n <div class=\"paddedView\">\n <div class=\"form\">\n {filteredColumns.map((column, index) => {\n return (\n <div class='formElement' key={index}>\n <div class='formLabel'>\n {column.label}\n {column.labelTooltip ? <LabelTooltip text={column.labelTooltip} /> : null}\n </div>\n <div class='formInput'>\n <Input\n column={column}\n onChange={(newValues) => { data.current = { ...data.current, ...newValues } }}\n />\n </div>\n </div>\n )\n })}\n </div>\n <div class={`button greenButton ${isCreating ? \"loading\" : \"\"}`} onClick={createRecord}>{isCreating ? \"Sauvegarde en cours...\" : \"Créer\"}</div>\n <div class=\"button\" onClick={() => history.goBack()}>Annuler</div>\n </div>\n </div>\n )\n}","import { useContext, useRef, useState, useEffect } from \"react\";\nimport {\n useParams,\n useHistory\n} from \"react-router-dom\";\nimport axios from \"axios\";\nimport Input from \"../components/Input\"\nimport LabelTooltip from \"../components/LabelTooltip\"\nimport { ConfigContext } from '../contexts/ConfigContext'\n\nexport default () => {\n const config = useContext(ConfigContext)\n const { viewIndex, recordId } = useParams();\n const history = useHistory();\n const view = config.views[viewIndex];\n const [record, setRecord] = useState(null);\n const filteredColumns = view.columns.filter(\n column => column.dataType &&\n column.canEdit !== false &&\n !column.hidden\n )\n\n const dataToUpdate = useRef({})\n const [isUpdating, setIsUpdating] = useState(false)\n\n useEffect(() => {\n axios.get(\"/record\", {\n params: {\n viewIndex,\n recordId\n }\n }).then((response) => {\n dataToUpdate.current = {};\n setRecord(response.data);\n });\n }, [viewIndex, recordId]);\n\n const updateRecord = async () => {\n setIsUpdating(true)\n try {\n await axios.post(\"/updateRecord\", {\n viewIndex,\n primaryValue: recordId,\n data: dataToUpdate.current\n })\n setIsUpdating(false)\n history.push(`/record/${viewIndex}/${recordId}`)\n } catch (error) {\n if (error.response.responseText) {\n window.swal({\n title: \"Erreur\",\n text: error.response.responseText,\n dangerMode: true\n })\n }\n setIsUpdating(false)\n }\n }\n\n return (\n <div class=\"view\">\n <div class=\"viewHeader\">\n <div class=\"viewTitle\">{view.label}</div>\n </div>\n <div class=\"paddedView\">\n {record ? (\n <>\n <div class=\"form\">\n {filteredColumns.map((column, index) => {\n return (\n <div class='formElement' key={index}>\n <div class='formLabel'>\n {column.label}\n {column.labelTooltip ? <LabelTooltip text={column.labelTooltip} /> : null}\n </div>\n <div class='formInput'>\n <Input\n column={column}\n initialData={record}\n onChange={(newValues) => { dataToUpdate.current = { ...dataToUpdate.current, ...newValues } }}\n />\n </div>\n </div>\n )\n })}\n </div>\n <div class={`button greenButton ${isUpdating ? \"loading\" : \"\"}`} onClick={updateRecord}>{isUpdating ? \"Sauvegarde en cours...\" : \"Sauvegarder\"}</div>\n <div class=\"button\" onClick={() => history.goBack()}>Annuler</div>\n </>\n ) : null}\n </div>\n </div>\n )\n}","\nimport { useState } from \"react\"\nimport axios from \"axios\";\n\nexport default ({ view, viewIndex, subviewIndex, currentFilters, orderBy, isDesc, query }) => {\n const [isDownloading, setIsDownloading] = useState(false)\n\n const downloadRecords = () => {\n setIsDownloading(true)\n axios.post(\"/recordsExport\", {\n viewIndex,\n subviewIndex,\n filters: currentFilters.map(function (x) {\n return x.query\n }),\n orderBy,\n isDesc,\n query\n }).then((response) => {\n setIsDownloading(false)\n window.download(response.data.content, view.label + \".csv\");\n })\n }\n\n return (\n <div class=\"downloadButton\" onClick={downloadRecords}>\n <i class={`fa ${!isDownloading ? \"fa-cloud-download\" : \"fa-spin fa-circle-notch\"}`}></i>\n </div>\n )\n}","import { useEffect, useRef } from \"react\"\n\nfunction useOutsideClickHandler(ref, handler) {\n useEffect(() => {\n function handleClickOutside(event) {\n if (ref.current && !ref.current.contains(event.target)) {\n handler()\n }\n }\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [ref]);\n}\n\nexport default function OutsideClickHandler(props) {\n const wrapperRef = useRef(null);\n useOutsideClickHandler(wrapperRef, props.onOutsideClick);\n\n return <div ref={wrapperRef}>{props.children}</div>;\n}","import { useState } from \"react\"\nimport OutsideClickHandler from \"./OutsideClickHandler\"\n\nexport default ({ view, refreshData, onAddFilter }) => {\n const [filtersOpened, setFiltersOpened] = useState(false)\n const [field, setField] = useState(null);\n const [operator, setOperator] = useState(\"contains\")\n const [value, setValue] = useState(null)\n\n const addFilter = () => {\n if (field && value) {\n const fieldLabel = view.columns.find(c => (c.searchableName || c.name) === field)?.label\n if (operator === \"contains\") {\n onAddFilter({\n label: fieldLabel + \" contient \" + value,\n query: field + \" LIKE '%\" + value + \"%'\"\n })\n } else if (operator === \"notContains\") {\n onAddFilter({\n label: fieldLabel + \" ne contient pas \" + value,\n query: field + \" NOT LIKE '%\" + value + \"%'\"\n })\n } else if (operator === \"is\") {\n onAddFilter({\n label: fieldLabel + \" est \" + value,\n query: field + \" = '\" + value + \"'\"\n })\n } else if (operator === \"isNot\") {\n onAddFilter({\n label: fieldLabel + \" n'est pas \" + value,\n query: field + \" != '\" + value + \"'\"\n })\n } else if (operator === \"startsWith\") {\n onAddFilter({\n label: fieldLabel + \" commence par \" + value,\n query: field + \" LIKE '\" + value + \"%'\"\n })\n } else if (operator === \"endsWith\") {\n onAddFilter({\n label: fieldLabel + \" finit par \" + value,\n query: field + \" LIKE '%\" + value + \"'\"\n })\n } else if (operator === \"largerThan\") {\n onAddFilter({\n label: fieldLabel + \" supérieur à \" + value,\n query: field + \" >= \" + value\n })\n } else if (operator === \"smallerThan\") {\n onAddFilter({\n label: fieldLabel + \" inférieur à \" + value,\n query: field + \" <= \" + value\n })\n }\n setField(null)\n setValue(null)\n setFiltersOpened(false)\n refreshData()\n }\n }\n\n return (\n <OutsideClickHandler onOutsideClick={() => setFiltersOpened(false)}>\n <div class=\"button openFilterPopup\" onClick={() => setFiltersOpened(!filtersOpened)}>\n <i class=\"fas fa-filter\"></i> Ajouter un filtre\n {filtersOpened ? (\n <div class=\"addFilterPopup\" onClick={(e) => e.stopPropagation()}>\n <div class=\"filterLabel\">Champ</div>\n <select onChange={(e) => setField(e.target.value)}>\n <option value=''>Sélectionnez un champ</option>\n {view.columns.filter(column =>\n (column.searchableName || column.name) &&\n column.dataType !== \"foreign\" && column.dataType !== \"datalist\"\n ).map((column) => {\n const value = column.searchableName || column.name\n return (\n <option value={value} key={value}>\n {column.label}\n </option>\n )\n })}\n </select>\n <div class=\"filterLabel\">Opérateur</div>\n <select onChange={(e) => setOperator(e.target.value)}>\n <option value=\"contains\">contient</option>\n <option value=\"notContains\">ne contient pas</option>\n <option value=\"startsWith\">commence par</option>\n <option value=\"endsWith\">finit par</option>\n <option value=\"is\">est</option>\n <option value=\"isNot\">n'est pas</option>\n <option value=\"largerThan\">est supérieur à</option>\n <option value=\"smallerThan\">est inférieur à</option>\n </select>\n <div class=\"filterLabel\">Valeur</div>\n <input onChange={(e) => setValue(e.target.value)} />\n <div class=\"button greenButton\" onClick={addFilter}>Ajouter</div>\n </div>\n ) : null}\n </div>\n </OutsideClickHandler >\n )\n}","import { useContext, useState } from \"react\"\nimport axios from \"axios\";\nimport OutsideClickHandler from \"./OutsideClickHandler\"\nimport { ConfigContext } from '../contexts/ConfigContext'\n\nexport default ({ viewIndex, selectedRecordIds, refreshData }) => {\n const config = useContext(ConfigContext)\n const view = config.views[viewIndex]\n const [bulkActionsOpened, setBulkActionsOpened] = useState(false)\n\n const bulkDelete = () => {\n window.swal({\n title: \"Êtes-vous sûr ?\",\n text: \"Une fois la suppression confirmée, il ne sera pas possible de revenir en arrière.\",\n buttons: [\"Annuler\", \"Oui\"],\n dangerMode: true\n }).then((willDelete) => {\n if (willDelete) {\n axios.post(\"deleteRecords\", {\n viewIndex,\n primaryValues: selectedRecordIds\n }).then(function () {\n refreshData()\n }).catch(function () {\n window.swal({\n title: \"Erreur\",\n text: \"Suppression impossible\",\n dangerMode: true\n })\n });\n }\n });\n }\n\n const bulkCustomAction = (actionIndex) => () => {\n setBulkActionsOpened(false)\n axios.post(\"customAction\", {\n viewIndex,\n actionIndex,\n selectedRecordIds\n }).then(function () {\n refreshData()\n }).catch(function () {\n window.swal({\n title: \"Erreur\",\n text: \"L'action a échoué\",\n dangerMode: true\n })\n });\n }\n\n return !config.hideMultiselect && (view.canDelete !== false || view.customActions?.length > 0) ? (\n <OutsideClickHandler onOutsideClick={() => setBulkActionsOpened(false)}>\n <div class=\"actionButtonsContainer\">\n <div class=\"button openBulkActionsButton\" onClick={() => setBulkActionsOpened(!bulkActionsOpened)}>Actions</div>\n {bulkActionsOpened ? <div class=\"bulkActions\">\n {view.customActions?.map((action, index) => (\n <div class=\"action recordAction\" onClick={bulkCustomAction(index)}>{action.label}</div>\n ))}\n {view.canDelete !== false ? <div class=\"action recordAction red\" onClick={bulkDelete}>Supprimer</div> : null}\n </div> : null}\n </div>\n </OutsideClickHandler>\n ) : null\n}","import evalExpression from \"./evalExpression\"\n\nexport default (column, record, onTable) => {\n if (column.showAsPicture) {\n const imageUrl = column.baseUrl + record[column.pathField];\n return record[column.pathField] ? (\n <a href={imageUrl} target='_blank'>\n <img src={`https://res.cloudinary.com/forest2/image/fetch/${onTable ? \"w_60,h_30\" : \"w_300,h_150\"},c_fit/${imageUrl}`} />\n </a>\n ) : null\n } else if (column.formatValue) {\n return <div dangerouslySetInnerHTML={{ __html: record[`__formatValue-${column.__id__}__`] }} />\n } else if (column.formattedValue) {\n return <div>{evalExpression(column.formattedValue, record)}</div>\n } else if (column.action) {\n if (column.actionDisplayCondition) {\n let isDisplaying = evalExpression(column.actionDisplayCondition, record)\n if (!isDisplaying)\n return \"\";\n }\n var data = JSON.parse(JSON.stringify(column.data));\n for (var key in data) {\n data[key] = evalExpression(data[key], record)\n }\n return (\n <div class='actionButton' data-route='\" + column.route + \"' data-data='\" + JSON.stringify(data) + \"'>{column.action}</div>\n )\n } else if (column.dataType === \"tinyint\") {\n return <div>{record[column.name] === 1 ? \"Oui\" : \"Non\"}</div>\n } else if (column.dataType === \"color\") {\n return <div class='colorPreview' style={{ backgroundColor: record[column.name] }}></div>\n } else if (column.dataType === \"richText\") {\n return <div dangerouslySetInnerHTML={{ __html: record[column.htmlField] }} />\n } else {\n return <div>{record[column.name]}</div>\n }\n}","import { useState, useEffect, useContext } from \"react\"\nimport axios from \"axios\";\nimport {\n Link,\n useParams,\n useHistory\n} from \"react-router-dom\";\nimport DownloadButton from \"../components/DownloadButton\"\nimport AddFilterButton from \"../components/AddFilterButton\"\nimport BulkActionsButton from \"../components/BulkActionsButton\"\nimport getFormattedValue from \"../utils/getFormattedValue\"\nimport { ConfigContext } from '../contexts/ConfigContext'\n\nexport default () => {\n const { viewIndex, subviewIndex } = useParams();\n const history = useHistory();\n const [page, setPage] = useState(1)\n const [currentFilters, setCurrentFilters] = useState([])\n const [orderBy, setOrderBy] = useState(null);\n const [isDesc, setIsDesc] = useState(null);\n const [query, setQuery] = useState(null);\n const [selectedRecordIds, setSelectedRecordIds] = useState([])\n const [data, setData] = useState(null)\n const config = useContext(ConfigContext);\n const view = config.views[viewIndex]\n\n const filteredColumns = view.columns?.filter(x => !x.hideInTable && !x.hidden)\n\n useEffect(() => {\n setPage(1)\n setQuery(null)\n setOrderBy(null)\n setIsDesc(null)\n if (selectedRecordIds.length > 0) {\n setSelectedRecordIds([])\n }\n if (currentFilters.length > 0) {\n setCurrentFilters([])\n }\n }, [viewIndex])\n\n\n useEffect(() => {\n refreshData()\n }, [viewIndex, subviewIndex, page, query, currentFilters, orderBy, isDesc])\n\n function refreshData() {\n setData(null)\n axios.post(\"/records\", {\n viewIndex,\n subviewIndex,\n page,\n filters: currentFilters.map(function (x) {\n return x.query\n }),\n orderBy,\n isDesc,\n query\n }).then((response) => {\n setData(response.data)\n })\n }\n\n return (\n <div class=\"view\">\n <div class=\"scrollable\">\n <div class=\"viewHeader\">\n <div class=\"viewTitle\">{view.label}</div>\n <div class=\"viewHeaderActions\">\n <div class=\"searchBarContainer\">\n <input type=\"text\" placeholder=\"Rechercher\" class=\"searchBar\" onChange={(e) => setQuery(e.target.value)} />\n <div class=\"searchBarIcon\">\n <i class=\"fa fa-search\"></i>\n </div>\n </div>\n <BulkActionsButton\n viewIndex={viewIndex}\n selectedRecordIds={selectedRecordIds}\n refreshData={refreshData}\n />\n <AddFilterButton\n view={view}\n refreshData={refreshData}\n onAddFilter={(filter) => setCurrentFilters([...currentFilters, filter])}\n />\n <DownloadButton\n view={view}\n viewIndex={viewIndex}\n subviewIndex={subviewIndex}\n currentFilters={currentFilters}\n orderBy={orderBy}\n isDesc={isDesc}\n query={query}\n />\n {view.canCreate ? (\n <Link to={`/createRecord/${viewIndex}`}>\n <div class=\"plusButton\"><i class=\"fa fa-plus\"></i></div>\n </Link>\n ) : null}\n </div>\n </div>\n {currentFilters.length > 0 ? (\n <div class=\"filtersContainer\">\n {currentFilters.map((filter, index) => (\n <div class='filterItem' key={index}>\n <div class='filterItemLabel'>{filter.label}</div>\n <div class=\"filterRemove\" onClick={() => {\n setCurrentFilters(currentFilters.filter(x => x.query !== filter.query))\n }}><i class='fa fa-times'></i></div>\n </div>\n ))}\n </div>\n ) : null}\n <table class=\"table\">\n <thead>\n <tr>\n {config.hideMultiselect ? null : <th></th>}\n {filteredColumns.map((column, index) => {\n const sortName = column.dataType === \"foreign\" || column.dataType === \"datalist\" ? column.formattedValue : column.sortName || column.name\n return (\n <th\n class={sortName ? \"sortable\" : \"\"}\n key={index}\n onClick={() => {\n if (sortName) {\n setOrderBy(sortName)\n setIsDesc(orderBy === sortName ? !isDesc : false)\n }\n }}\n >\n {column.label}\n {sortName ? (\n <div class='columnSortIcon'>\n <i class={`fas fa-sort${isDesc === true && sortName === orderBy ? \"-down\" : (isDesc === false && sortName === orderBy ? \"-up\" : \"\")}`}></i>\n </div>\n ) : null}\n </th>\n )\n })}\n\n </tr>\n </thead>\n <tbody>\n {!data ? Array.from({ length: 10 }).map((_, index) => (\n <tr class='record' key={index}>{\n Array.from({\n length: filteredColumns.length + (config.hideMultiselect ? 0 : 1)\n }).map((_, cellIndex) => (\n <td key={cellIndex}> </td>\n ))\n }</tr>\n )) : null}\n {data?.records?.map((record) => {\n const recordId = record[view.primaryId]\n return (\n <tr\n class={`record ${view.notClickable ? \"nonClickableRow\" : \"\"}`}\n onClick={(event) => {\n if (event.target.tagName == \"A\") {\n event.stopPropagation();\n return;\n }\n if (!view.notClickable) {\n history.push(`/record/${viewIndex}/${recordId}`)\n }\n }}\n key={recordId}\n >\n {config.hideMultiselect ? null : <td class='checkboxParent' onClick={(e) => {\n setSelectedRecordIds(selectedRecordIds.includes(recordId) ? selectedRecordIds.filter(x => x !== recordId) : [...selectedRecordIds, recordId])\n e.stopPropagation()\n }}><div class={`checkbox ${selectedRecordIds.includes(recordId) ? \"checked\" : \"\"}`}></div></td>}\n {filteredColumns.map((column, index) => (\n <td key={index}>{getFormattedValue(column, record, true)}</td>\n ))}\n </tr>\n )\n })}\n </tbody>\n\n </table>\n </div>\n <div class=\"tableFooter\">\n <div class=\"tableCounter\">{data?.count || \"-\"} {view.label}</div>\n <div class=\"paginator\">\n <div class=\"paginatorLeft\" onClick={() => setPage(Math.max(1, page - 1))}><i class=\"fas fa-caret-left\"></i></div>\n <div class=\"paginatorNumber\">{page} / {data ? Math.ceil(data.count / (view.limit || 10)) : \"-\"}</div>\n <div class=\"paginatorRight\" onClick={() => setPage(Math.min(page + 1, Math.ceil(data.count / (view.limit || 10))))}><i class=\"fas fa-caret-right\"></i></div>\n </div>\n </div>\n </div>\n )\n}","\nimport { useContext, useState } from \"react\"\nimport {\n useHistory\n} from \"react-router-dom\";\nimport axios from \"axios\";\nimport OutsideClickHandler from \"./OutsideClickHandler\"\nimport { ConfigContext } from \"../contexts/ConfigContext\";\n\nexport default ({ viewIndex, record }) => {\n const config = useContext(ConfigContext)\n const view = config.views[viewIndex]\n const [actionsOpened, setActionsOpened] = useState(false)\n const history = useHistory()\n\n const deleteRecord = async () => {\n const willDelete = await window.swal({\n title: \"Êtes-vous sûr ?\",\n text: \"Une fois la suppression confirmée, il ne sera pas possible de revenir en arrière.\",\n buttons: [\"Annuler\", \"Oui\"],\n dangerMode: true\n })\n if (willDelete) {\n if (view.deleteCallback) {\n axios.post(view.deleteCallback, {\n id: record[view.primaryId],\n data: record\n })\n }\n try {\n await axios.post(\"/deleteRecord\", {\n viewIndex,\n primaryValue: record[view.primaryId]\n })\n history.push(`/records/${viewIndex}`)\n } catch (e) {\n window.swal({\n title: \"Erreur\",\n text: \"Suppression impossible\",\n dangerMode: true\n })\n }\n }\n }\n\n const customAction = (actionIndex) => () => {\n setActionsOpened(false)\n axios.post(\"customAction\", {\n viewIndex,\n actionIndex,\n selectedRecordIds: [record[view.primaryId]]\n }).then(function () {\n history.push(`/records/${viewIndex}`)\n }).catch(function () {\n window.swal({\n title: \"Erreur\",\n text: \"L'action a échoué\",\n dangerMode: true\n })\n });\n }\n\n return (\n (view.canDuplicate === true) || (view.canDelete !== false) || (view.customActions?.length > 0) ? (\n <OutsideClickHandler onOutsideClick={() => setActionsOpened(false)}>\n <div class=\"actionButtonsContainer\">\n <div class=\"button openActionsButton\" onClick={() => setActionsOpened(!actionsOpened)}>Actions</div>\n {actionsOpened ? (\n <div class=\"actions\">\n {view.customActions?.map((action, index) => (\n <div class=\"action recordAction\" onClick={customAction(index)}>{action.label}</div>\n ))}\n {view.canDuplicate === true ? <div class=\"action recordAction duplicateRecord\">Dupliquer</div> : null}\n {view.canDelete !== false ? <div class=\"action recordAction red\" onClick={deleteRecord}>Supprimer</div> : null}\n </div>\n ) : null}\n </div>\n </OutsideClickHandler>\n ) : null\n\n )\n}","\nimport {\n useHistory\n} from \"react-router-dom\";\n\nexport default () => {\n const history = useHistory();\n\n return (\n <div class=\"button backButton\" onClick={() => history.goBack()}>Retour</div>\n );\n}","import axios from \"axios\";\nimport evalExpression from \"../utils/evalExpression\";\n\nexport default ({ record, panel }) => {\n const downloadTable = () => {\n axios.get(\"/customQuery\", {\n params: {\n query: panel.query || evalExpression(panel.formattedQuery, record),\n primaryValue: 2630\n }\n }).then((response) => {\n const results = response.data;\n const lines = [];\n lines.push(Object.keys(results[0]).filter(key => key !== panel.primaryId).join(\",\"))\n for (let result of results) {\n lines.push(\n Object.keys(result).filter(key => key !== panel.primaryId).map((key) =>\n (panel.formattedValues && (key in panel.formattedValues)) ? evalExpression(panel.formattedValues[key], result) : result[key]\n ).join(\",\")\n )\n }\n\n window.download(lines.join(\"\\r\\n\"), panel.label + \".csv\");\n })\n }\n\n return (<div class='downloadPanelButton' onClick={downloadTable}><i class='fa fa-cloud-download'></i></div>)\n}","import { useState, useEffect, useContext } from \"react\"\nimport axios from \"axios\";\nimport evalExpression from \"../../utils/evalExpression\";\nimport {\n useHistory,\n useParams\n} from \"react-router-dom\";\nimport { ConfigContext } from \"../../contexts/ConfigContext\";\n\nexport default ({ panel, record, view }) => {\n const [results, setResults] = useState(null);\n const history = useHistory();\n const { viewIndex } = useParams();\n const config = useContext(ConfigContext)\n\n useEffect(() => {\n refreshData()\n }, [])\n\n const refreshData = () => {\n axios.get(\"/customQuery\", {\n params: {\n query: panel.query || evalExpression(panel.formattedQuery, record),\n primaryValue: record[view.primaryId]\n }\n }).then((response) => {\n setResults(response.data)\n })\n }\n\n const deleteRow = async (row) => {\n const willDelete = await window.swal({\n title: \"Êtes-vous sûr ?\",\n text: \"Une fois la suppression confirmée, il ne sera pas possible de revenir en arrière.\",\n buttons: [\"Annuler\", \"Oui\"],\n dangerMode: true\n })\n if (willDelete) {\n try {\n await axios.post(\"/deleteRecordFromPanel\", {\n viewIndex,\n panelId: panel.__id__,\n primaryValue: row[panel.primaryId]\n })\n refreshData();\n } catch (e) {\n window.swal({\n title: \"Erreur\",\n text: \"Suppression impossible\",\n dangerMode: true\n })\n }\n }\n }\n\n return (\n <div>\n {results?.length > 0 ? (\n <table class={`table panelTable ${panel.folded ? \"folded\" : \"\"}`}>\n <thead>\n <tr>\n {Object.keys(results[0]).filter(key => key !== panel.primaryId).map((key) =>\n <th key={key}>{key}</th>\n )}\n {panel.canDelete ? <th></th> : null}\n </tr>\n </thead>\n <tbody>\n {results.map((result) => (\n <tr\n class={`record ${panel.canShow ? \"\" : \"nonClickableRow\"}`}\n onClick={() => {\n const viewIndex = config.views.findIndex(x => x.type === \"table\" && x.tableName === panel.tableName)\n if (panel.canShow) {\n history.push(`/record/${viewIndex}/${result[panel.primaryId]}`)\n }\n }}\n >\n {Object.keys(result).filter(key => key !== panel.primaryId).map((key) =>\n <td key={key}>\n <div \n dangerouslySetInnerHTML={{ __html:\n (panel.formattedValues && (key in panel.formattedValues)) ?\n evalExpression(panel.formattedValues[key], result) :\n result[key]\n }}\n />\n </td>\n )}\n {panel.canDelete ? (\n <td class='deleteIconCell'>\n <div\n class='deleteIcon'\n onClick={() => deleteRow(result)}\n >\n <i class='fa fa-minus'></i>\n </div>\n </td>\n ) : null}\n </tr>\n ))}\n </tbody>\n </table>\n ) : results?.length === 0 ? (\n <div class={`noData panelTable ${panel.folded ? \"folded\" : \"\"}`}>Aucune donnée</div>\n ) : null}\n </div>\n )\n}\n","import { useState, useEffect } from \"react\"\nimport axios from \"axios\";\n\nexport default ({ panel }) => {\n const [results, setResults] = useState(null);\n\n useEffect(() => {\n axios.get(\"/customQuery\", {\n params: {\n query: panel.query,\n primaryValue: 2630\n }\n }).then((response) => {\n setResults(response.data)\n })\n }, [panel.query])\n\n return (\n <div>\n {results?.length > 0 ? (\n <div class=\"gallery\">\n {results.map((result) => (\n <div class='galleryPicture' key={result.Path}>\n {panel.canDelete ? <div class='deleteIcon'><i class='fa fa-minus'></i></div> : null}\n <a href={panel.baseUrl + result.Path} target='_blank'>\n <img\n src={\"https://res.cloudinary.com/forest2/image/fetch/w_150,h_150,c_fill/\" + panel.baseUrl + result[panel.pathField || \"Path\"]}\n onerror='this.style.height = 0'\n />\n </a>\n </div>\n ))}\n </div>\n ) : results?.length === 0 ? (\n <div class={`noData panelTable ${panel.folded ? \"folded\" : \"\"}`}>Aucune donnée</div>\n ) : null}\n </div>\n )\n}\n","import { useEffect, useRef } from \"react\"\nimport axios from \"axios\";\n\nexport default ({ panel, record, view }) => {\n const mapRef = useRef();\n\n useEffect(() => {\n if (window.google && record) {\n if (panel.query) {\n axios.get(\"/customQuery\", {\n query: panel.query,\n primaryValue: record[view.primaryId]\n }).then((response) => {\n const result = response?.data?.[0]\n if (result) {\n initMap(result.Lat, result.Lng, panel.zoom || 12)\n }\n })\n } else {\n initMap(record[panel.latitudeField], record[panel.longitudeField], panel.zoom || 12)\n }\n }\n }, [record, window.google])\n\n const initMap = (lat, lng, zoom) => {\n const map = new window.google.maps.Map(mapRef.current, {\n zoom,\n center: {\n lat,\n lng\n }\n });\n new window.google.maps.Marker({\n position: { lat, lng },\n map\n });\n }\n\n return (\n <div class='map' ref={mapRef}></div>\n )\n}","import { useState, useEffect, useContext } from \"react\"\nimport axios from \"axios\";\nimport {\n useParams,\n Link,\n} from \"react-router-dom\";\nimport getFormattedValue from \"../utils/getFormattedValue\"\nimport ActionsButton from \"../components/ActionsButton\"\nimport BackButton from \"../components/BackButton\"\nimport DownloadTablePanelButton from \"../components/DownloadTablePanelButton\"\nimport TablePanel from \"../components/panels/TablePanel\"\nimport GalleryPanel from \"../components/panels/GalleryPanel\"\nimport MapPanel from \"../components/panels/MapPanel\"\nimport { ConfigContext } from '../contexts/ConfigContext'\n\nexport default () => {\n const config = useContext(ConfigContext)\n const { viewIndex, recordId } = useParams();\n const [record, setRecord] = useState(null);\n\n const view = config.views[viewIndex]\n const filteredColumns = view.columns?.filter(x => !x.hideInTable && !x.hidden)\n\n useEffect(() => {\n axios.get(\"/record\", {\n params: {\n viewIndex,\n recordId\n }\n }).then((response) => {\n setRecord(response.data);\n });\n }, [viewIndex, recordId]);\n\n return (\n <div class=\"view backgroundBlue\">\n <div class=\"viewHeader\">\n <div class=\"viewTitle\">{view.label}</div>\n <div class=\"viewHeaderActions\">\n <div class=\"button adjacentButton prevButton\">&#9668;</div>\n <div class=\"button adjacentButton nextButton\">&#9658;</div>\n <BackButton />\n <ActionsButton viewIndex={viewIndex} record={record} />\n {view.canEdit !== false ? (\n <Link to={`/editRecord/${viewIndex}/${recordId}`}>\n <div class=\"button greenButton recordAction\">Modifier</div>\n </Link>\n ) : null}\n </div>\n </div>\n <div class=\"paddedView\">\n <div class=\"showContainer\">\n <div class='panel detailsPanel'>\n <div class='panelTitle'>Détails</div>\n {record ?\n filteredColumns.map((column, index) => (\n <div class='showRecordField' key={index}>\n <div class='formLabel'>{column.label}</div>\n <div class='formValue'>{getFormattedValue(column, record, false) || \"-\"}</div>\n </div>\n ))\n : null}\n </div>\n {view.recordViewPanels && record ? (\n <div class='recordViewPanels'>\n {view.recordViewPanels.map((panel, index) => (\n <div class='panel' key={index}>\n <div class='panelHeader'>\n <div class='viewTitle'>{panel.label}</div>\n <div class='viewHeaderActions'>\n {panel.folded ? <div class='button smallButton unfoldPanel'>Afficher</div> : null}\n {panel.canCreate ? <Link to={`/createRecord/${viewIndex}/${index}/${recordId}`}><div class='plusButton'><i class='fa fa-plus'></i></div></Link> : null}\n {panel.canDownload && panel.type === \"table\" ? <DownloadTablePanelButton record={record} panel={panel} /> : null}\n </div>\n </div>\n {panel.type === \"table\" ? <TablePanel record={record} panel={panel} view={view} /> : null}\n {panel.type === \"gallery\" ? <GalleryPanel panel={panel} /> : null}\n {panel.type === \"map\" ? <MapPanel record={record} panel={panel} view={view} /> : null}\n </div>\n ))}\n </div>\n ) : null}\n </div>\n </div>\n </div>\n )\n}","export default __webpack_public_path__ + \"static/media/logo.e407b9ca.png\";","import axios from \"axios\";\nimport { useState } from \"react\";\nimport logo from \"../images/logo.png\"\n\nexport default ({ setIsAuthenticated }) => {\n const [username, setUsername] = useState(\"\")\n const [password, setPassword] = useState(\"\")\n\n const login = async () => {\n const response = await axios.post(\"/login\", {\n username,\n password\n });\n if (response.data.success) {\n setIsAuthenticated(true)\n }\n }\n\n return (\n <div class=\"loginPanelBackground\">\n <div class=\"loginPanel\">\n <div class=\"loginLogoContainer\">\n <img class=\"loginLogo\" src={logo} />\n </div>\n <label>Nom d'utilisateur</label>\n <input type=\"text\" name=\"username\" onChange={(e) => setUsername(e.target.value)} />\n <label>Mot de passe</label>\n <input type=\"password\" name=\"password\" onChange={(e) => setPassword(e.target.value)} />\n <button class=\"button greenButton fullWidth\" onClick={login}>Se connecter</button>\n </div>\n </div>\n )\n}","\n\nimport { useContext } from \"react\";\nimport {\n useParams\n} from \"react-router-dom\";\nimport { ConfigContext } from '../contexts/ConfigContext'\n\nexport default () => {\n const config = useContext(ConfigContext)\n const { viewIndex } = useParams();\n const view = config.views[viewIndex];\n\n return (\n <div class=\"view\">\n <iframe src={view.src}></iframe>\n </div>\n )\n}","import React, { useMemo, Suspense } from 'react';\nimport axios from \"axios\";\nimport styled from 'styled-components'\n\nconst packages = {\n \"react\": () => ({ exports: React }),\n \"axios\": () => ({ exports: axios }),\n \"styled-components\": () => ({ exports: styled }),\n}\n\nfunction getParsedModule(code, moduleName, packages) {\n const _this = Object.create(packages);\n function require(name) {\n if (!(name in _this) && moduleName === name) {\n let module = { exports: {} };\n _this[name] = () => module;\n let wrapper = Function(\"require, exports, module\", code);\n wrapper(require, module.exports, module);\n } else if (!(name in _this)) {\n throw `Module '${name}' not found`\n }\n return (_this[name]()).exports;\n }\n\n return require(moduleName);\n}\n\n\nasync function fetchComponent(componentPath) {\n try {\n const response = await axios.get(`/customComponent`, {\n params: {\n componentPath\n }\n })\n const text = response.data\n return { default: getParsedModule(text, \"__moduleName__\", packages) };\n } catch (error) {\n console.error(error)\n return { default() { return <div>Erreur de rendu</div> } }\n }\n\n}\n\nconst CustomComponent = ({ componentPath, children, ...props }) => {\n const Component = useMemo(() => {\n return React.lazy(async () => fetchComponent(componentPath))\n }, [componentPath]);\n\n return (\n <Suspense fallback={null}>\n <Component {...props}>{children}</Component>\n </Suspense>\n )\n};\n\nexport default React.memo(CustomComponent);\n","import { useContext } from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport CustomComponent from \"../components/CustomComponent\";\nimport { ConfigContext } from \"../contexts/ConfigContext\";\n\nexport default () => {\n const config = useContext(ConfigContext)\n const { viewIndex } = useParams();\n\n const componentPath = config.views[viewIndex].componentPath\n\n return (\n <CustomComponent componentPath={componentPath} />\n )\n}","import {\n BrowserRouter as Router,\n Switch,\n Route\n} from \"react-router-dom\";\nimport { useEffect, useState } from \"react\";\nimport './App.css';\nimport Sidebar from './components/Sidebar'\nimport CreateRecord from './pages/CreateRecord'\nimport EditRecord from './pages/EditRecord'\nimport Records from './pages/Records'\nimport Record from './pages/Record'\nimport Login from './pages/Login'\nimport Iframe from './pages/Iframe'\nimport CustomView from './pages/CustomView'\nimport { ConfigProvider } from './contexts/ConfigContext'\nimport axios from \"axios\";\n\naxios.defaults.withCredentials = true;\naxios.defaults.baseURL = process.env.NODE_ENV === \"development\" ? 'http://localhost:6145/admin/api' : '/_HOMEPAGE_/api';\n\nfunction App() {\n const [isAuthenticated, setIsAuthenticated] = useState(null);\n\n useEffect(() => {\n axios.get(\"/isAuthenticated\").then((response) => {\n setIsAuthenticated(response.data.isAuthenticated)\n })\n }, []);\n\n return (\n <div id=\"body\">\n {isAuthenticated === true ? (\n <ConfigProvider>\n <Router basename={process.env.NODE_ENV === \"development\" ? '/admin' : \"/_HOMEPAGE_\"}>\n <Sidebar />\n <Switch>\n <Route path=\"/records/:viewIndex/:subviewIndex?\">\n <Records />\n </Route>\n <Route path=\"/record/:viewIndex/:recordId\">\n <Record />\n </Route>\n <Route path=\"/editRecord/:viewIndex/:recordId\">\n <EditRecord />\n </Route>\n <Route path=\"/createRecord/:viewIndex/:panelIndex?/:recordId?\">\n <CreateRecord />\n </Route>\n <Route path=\"/iframe/:viewIndex\">\n <Iframe />\n </Route>\n <Route path=\"/customView/:viewIndex\">\n <CustomView />\n </Route>\n </Switch>\n </Router>\n </ConfigProvider>\n ) : isAuthenticated === false ? (\n <Login setIsAuthenticated={setIsAuthenticated} />\n ) : (\n <div class=\"appLoading\">\n <i class='fa fa-circle-notch fa-spin'></i>\n </div>\n )}\n </div>\n\n );\n}\n\nexport default App;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\n\nReactDOM.render(\n <React.StrictMode>\n <App />\n </React.StrictMode>,\n document.getElementById('root')\n);"],"sourceRoot":""}