jamespot-react-core 1.1.115 → 1.1.117
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/55.bundle.js +198 -0
- package/build/55.bundle.js.map +1 -0
- package/build/app.bundle.js +629 -556
- package/build/app.bundle.js.map +1 -1
- package/build/socket.sharedworker.dd3721cc98a91b6cf80a.js +2 -0
- package/build/socket.sharedworker.dd3721cc98a91b6cf80a.js.map +1 -0
- package/build/src/ReactCore.d.ts +3 -1
- package/build/src/components/Empty.d.ts +2 -1
- package/build/src/components/ExtensionProvider.component.d.ts +2 -2
- package/build/src/components/IfAppIsActivated.component.d.ts +1 -1
- package/build/src/components/RTProvider.component.d.ts +1 -1
- package/build/src/components/Toaster.d.ts +2 -1
- package/build/src/components/TwoColLayout.d.ts +5 -5
- package/build/src/components/editors/Editor.d.ts +2 -1
- package/build/src/components/editors/EditorPopup.d.ts +2 -1
- package/build/src/components/editors/EditorTabWidgets.d.ts +2 -1
- package/build/src/components/editors/EditorTabWrapper.d.ts +2 -1
- package/build/src/components/editors/EditorWrapper.d.ts +2 -1
- package/build/src/components/editors/EditorsPortal.d.ts +2 -1
- package/build/src/components/widgets/Widget.d.ts +2 -1
- package/build/src/components/widgets/WidgetInplace/WidgetInplaceUpload.d.ts +3 -2
- package/build/src/components/widgets/WidgetInplace/WidgetInplaceWrapper.d.ts +2 -1
- package/build/src/components/widgets/WidgetLayer/WidgetLayer.d.ts +3 -3
- package/build/src/components/widgets/WidgetList/WidgetList.d.ts +3 -2
- package/build/src/components/widgets/WidgetState.d.ts +2 -1
- package/build/src/components/widgets/WidgetWrapperCore.d.ts +2 -1
- package/build/src/displayer/DisplayForm.component.d.ts +2 -2
- package/build/src/displayer/components/DisplayRender.d.ts +8 -8
- package/build/src/displayer/components/inputs/Date.d.ts +3 -2
- package/build/src/displayer/components/inputs/DefaultInput.d.ts +2 -1
- package/build/src/displayer/components/inputs/InputEmail.d.ts +2 -1
- package/build/src/displayer/components/inputs/InputRichText.d.ts +2 -1
- package/build/src/displayer/components/inputs/InputSelect.d.ts +3 -2
- package/build/src/displayer/components/inputs/InputTaxonomy.d.ts +4 -2
- package/build/src/displayer/components/inputs/InputTextarea.d.ts +2 -1
- package/build/src/displayer/components/inputs/OrientedLink.d.ts +2 -1
- package/build/src/displayer/components/inputs/Radio.d.ts +3 -2
- package/build/src/displayer/displayer.utils.d.ts +1 -1
- package/build/src/displayer/types.d.ts +16 -17
- package/build/src/displayer/useDisplay.d.ts +2 -1
- package/build/src/hooks/useWindowDimension.d.ts +2 -2
- package/build/src/redux/slice/Generic.actions.d.ts +1 -1
- package/build/src/registry/ext-component-list.d.ts +2 -0
- package/build/src/registry/types.d.ts +9 -9
- package/build/src/utils/translation.d.ts +3 -3
- package/build/src/utils/types.d.ts +24 -12
- package/package.json +93 -94
- package/build/155.bundle.js +0 -198
- package/build/155.bundle.js.map +0 -1
- package/build/socket.sharedworker.9cc9b5b3f5d4700f41ee.js +0 -2
- package/build/socket.sharedworker.9cc9b5b3f5d4700f41ee.js.map +0 -1
- package/build/src/redux/slice/Article.slice.d.ts +0 -81
- package/build/src/redux/slice/User.slice.d.ts +0 -81
- package/build/src/redux/store.d.ts +0 -89
- package/pnpm-lock.yaml +0 -11173
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"use strict";(self.webpackChunkReactCore=self.webpackChunkReactCore||[]).push([[55],{55:(e,t,n)=>{n.r(t),n.d(t,{DisplayForm:()=>m,EditorsPortal:()=>Oe,Empty:()=>g,TwoColLayout:()=>w,WidgetList:()=>te,WidgetWrapperCore:()=>N});var i=n(363),l=n.n(i),o=n(230),a=n(185),r=n(754),c=n.n(r),s=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var l=0;for(i=Object.getOwnPropertySymbols(e);l<i.length;l++)t.indexOf(i[l])<0&&Object.prototype.propertyIsEnumerable.call(e,i[l])&&(n[i[l]]=e[i[l]])}return n};const d=c().form`
|
|
2
|
+
${e=>e.stretch&&"\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n "}
|
|
3
|
+
`,u=c().div`
|
|
4
|
+
${e=>e.stretch&&"\n flex: 1;\n"}
|
|
5
|
+
`,m=i.forwardRef(((e,t)=>{const n=i.useRef(null),[l,r]=(0,a.GF)(e.fields,e.type),c=(0,o.useForm)({defaultValues:Object.assign(Object.assign({},r),e.defaultValues),criteriaMode:"all"}),{handleSubmit:m,control:g,reset:p}=c,E=s(c,["handleSubmit","control","reset"]);return i.useImperativeHandle(t,(()=>Object.assign(Object.assign({},E),{handleSubmit:m,control:g,reset:()=>{var e;null===(e=null==n?void 0:n.current)||void 0===e||e.scrollTo(0,0),p()}})),[]),i.createElement(d,{stretch:e.stretch,onSubmit:m(e.onSubmit),ref:n},i.createElement(u,{stretch:e.stretch},l.map((t=>{var{Input:n}=t,l=s(t,["Input"]);return i.createElement(n,Object.assign({key:l.name,control:g},l,{dataCy:`${e.dataCy}-${l.name}`,readOnly:e.readOnly}))})),e.extraInputs&&e.extraInputs(g)),e.buttons)})),g=()=>i.createElement(i.Fragment,null);var p=n(248),E=n(181),f=n(556);const y=f.default.registry.getLazyComponent("Container"),v=f.default.registry.getLazyComponent("AppColumn"),h=f.default.registry.getLazyComponent("MainColumn");function w({extensionRoute:e,routes:t,description:n,mode:l="center"}){var o;const a=(0,E.useIntl)(),{pathname:r}=(0,p.useLocation)(),c=Object.values(t),[s,d]=i.useState(null===(o=null==c?void 0:c[0])||void 0===o?void 0:o.key),u=c.map((t=>Object.assign(Object.assign({},t),{label:a.formatMessage({id:t.label}),href:`/ng/rr/${e}/${t.path}`,group:t.group?a.formatMessage({id:t.group}):void 0})));return i.useEffect((()=>{const t=c.find((t=>r===`/ng/rr/${e}/${t.path}`));t&&d(t.key)}),[r]),i.createElement(i.Suspense,{fallback:i.createElement(i.Fragment,null)},i.createElement(y,{mode:l},i.createElement(v,{mode:l,description:n,tabs:u,activeTab:s||""}),i.createElement(h,{mode:l},i.createElement(p.Outlet,null))))}var b=n(855),x=n(420);const C=f.default.registry.getLazyComponent("Loader"),L=({name:e,uniqid:t,inplace:n})=>{const i=(0,b.useSelector)((e=>x.$L.selectors.selectWidgetState(e,t))),o=x.$L.definition(e);return(null==i?void 0:i.loading)?l().createElement("div",{style:{position:"absolute",inset:0,backgroundColor:"rgba(255,255,255,.7)",display:"flex",flex:1,justifyContent:"center",alignItems:"center"}},l().createElement(C,null)):(null==i?void 0:i.hover)?l().createElement("div",{style:{position:"absolute",inset:0,backgroundColor:"rgba(255,255,255,.7)",display:"flex",flex:1,justifyContent:"center",alignItems:"center"}}):!(null==i?void 0:i.initialized)&&n||(null==i?void 0:i.initialized)||n?l().createElement(l().Fragment,null):l().createElement("div",{style:{position:"absolute",inset:0,backgroundColor:"rgba(255,255,255,1)",display:"flex",flex:1,justifyContent:"center",alignItems:"center"}},l().createElement("img",{src:o.img}))},q=f.default.registry.getLazyComponent("WidgetArticleButton"),T=f.default.registry.getLazyComponent("WidgetArticleGallery"),W=f.default.registry.getLazyComponent("WidgetArticleAttachment"),$=f.default.registry.getLazyComponent("WidgetArticleImage"),I=f.default.registry.getLazyComponent("WidgetArticleTitle"),k=f.default.registry.getLazyComponent("WidgetArticleText"),S=({widget:e,width:t,inplace:n=!1,isComponentVisible:i=!1,mode:o="view",onClick:a})=>{const r=(0,b.useDispatch)(),{name:c,uniqid:s}=e,d=(0,b.useSelector)(x.$L.selectors.selectToken),u=(e,t)=>r(x.$L.slice.actions.updateWidget({uniqid:s,content:e,override:t})),m=e=>r(x.$L.slice.actions.setWidgetState(Object.assign({uniqid:s},e)));switch(c){default:return l().createElement(l().Fragment,null,"cannot display widget (",c,")");case x.$L.const.WIDGET_ARTICLE_BUTTON:return l().createElement(q,{isComponentVisible:i,content:e.content,inplace:n,mode:o,onChange:u,onClick:a,onStateChange:m});case x.$L.const.WIDGET_ARTICLE_GALLERY:return l().createElement(T,{width:t,token:d,isComponentVisible:i,content:e.content,inplace:n,mode:o,onChange:u,onStateChange:m});case x.$L.const.WIDGET_ARTICLE_ATTACHMENT:return l().createElement(W,{token:d,content:e.content,isComponentVisible:i,inplace:n,mode:o,onChange:u,onStateChange:m});case x.$L.const.WIDGET_ARTICLE_IMAGE:return l().createElement($,{width:null!=t?t:800,token:d,content:e.content,isComponentVisible:i,inplace:n,mode:o,onChange:u,onClick:a,onStateChange:m});case x.$L.const.WIDGET_ARTICLE_TITLE:return l().createElement(I,{isComponentVisible:i,content:e.content,inplace:n,mode:o,onChange:u,onStateChange:m});case x.$L.const.WIDGET_ARTICLE_TEXT:return l().createElement(k,{content:e.content,isComponentVisible:i,inplace:n,mode:o,onChange:u,onStateChange:m})}};var _=n(349);const A={"widget-article-image":{accept:"image/png, image/jpeg, image/jpg",multiple:!1,label:"WIDGET_Article_Image_Empty_Label",description:"WIDGET_Article_Image_Empty_Description"},"widget-article-gallery":{accept:"image/png, image/jpeg, image/jpg",multiple:!0,label:"WIDGET_Article_Gallery_Empty_Label",description:"WIDGET_Article_Attachment_Empty_Description"},"widget-article-attachment":{accept:"*",multiple:!0,label:"WIDGET_Article_Attachment_Empty_Label",description:"WIDGET_Article_Attachment_Empty_Description"}};var D=n(6),F=n(816);const R=f.default.registry.getLazyComponent("DEPRECATEDFormInputFile"),G=({uniqid:e,initialFiles:t,accept:n,label:i,description:o,multiple:a,token:r,allowAutoOpening:c,onChange:s})=>{const d=(0,b.useDispatch)(),u=(0,b.useSelector)((t=>t.widgets.currentEditableWidgetId===e),b.shallowEqual),m=l().useRef(null),[g,p]=l().useState(0),[E,f]=l().useState(0),[y,v]=l().useState(null!=t?t:[]);return l().useEffect((()=>{g===E&&d(x.$L.slice.actions.setWidgetState({uniqid:e,loading:!1}))}),[g]),l().useEffect((()=>{s(y.map((e=>e)))}),[y]),l().useEffect((()=>{var t;u&&c&&(null===(t=m.current)||void 0===t||t.click(),d(x.$L.slice.actions.setWidgetState({uniqid:e,mounted:!0})))}),[u]),l().createElement(l().Fragment,null,l().createElement(F.JRCWidgetEmptyInplace,{url:"widget-article-image-placeholder.png",label:i,description:o,onClick:()=>{var e;u&&(null===(e=m.current)||void 0===e||e.click())}}),l().createElement("div",{style:{height:0,width:0,overflow:"hidden"}},l().createElement(R,{ref:m,id:"widget-upload-file",name:"editorFiles",content:"",accept:n,multiple:a,token:r,onUploadStart:t=>{void 0!==t&&f((e=>e+t)),d(x.$L.slice.actions.setWidgetState({uniqid:e,loading:!0}))},onUploadSuccess:t=>{p((e=>e+1)),void 0!==t&&v((e=>[...e,(0,D.apiFileToWidgetFile)(t)])),a||d(x.$L.slice.actions.setWidgetState({uniqid:e,loading:!1}))}})))},O=c().div`
|
|
6
|
+
position: relative;
|
|
7
|
+
inset: 0;
|
|
8
|
+
display: flex;
|
|
9
|
+
flex: 1;
|
|
10
|
+
min-height: 180px;
|
|
11
|
+
`,j=({uniqid:e,mode:t})=>{var n;const i=(0,b.useDispatch)(),o=(0,b.useSelector)((t=>x.$L.selectors.selectWidget(t,e))),a=(0,b.useSelector)((t=>t.widgets.currentEditableWidgetId===e),b.shallowEqual),r=(0,b.useSelector)(x.$L.selectors.selectToken);if(l().useEffect((()=>{a&&(null==o?void 0:o.widget.name)&&(i(x.Wq.slice.actions.flushAllEditor()),i(x.Wq.slice.actions.registerEditor({uniqid:e,name:null==o?void 0:o.widget.name})))}),[a]),void 0===o)return l().createElement(l().Fragment,null);const c=A&&A[null==o?void 0:o.widget.name]?A[null==o?void 0:o.widget.name].label:"",s=A&&A[null==o?void 0:o.widget.name]?A[null==o?void 0:o.widget.name].description:"",d=A&&A[null==o?void 0:o.widget.name]?A[null==o?void 0:o.widget.name].accept:"",u=!(!A||!A[null==o?void 0:o.widget.name])&&A[null==o?void 0:o.widget.name].multiple;switch(null==o?void 0:o.widget.name){case"widget-article-gallery":const a=o.widget.content.files;return void 0!==r&&"edit"===t?l().createElement("div",{style:{marginTop:(null==a?void 0:a.length)?24:0}},l().createElement(O,null,l().createElement(G,{label:c,description:s,initialFiles:[],accept:d,multiple:u,uniqid:e,token:r,allowAutoOpening:!(null==a?void 0:a.length),onChange:t=>{Array.isArray(t)&&t.forEach((t=>{i(x.$L.slice.actions.updateWidget({uniqid:e,content:{files:a?[...a,t]:[t]}}))}))}}))):l().createElement(l().Fragment,null);case"widget-article-attachment":const m=o.widget.content.files;return void 0!==r&&"edit"===t?l().createElement("div",{style:{marginTop:(null==m?void 0:m.length)?24:0}},l().createElement(O,null,l().createElement(G,{label:c,description:s,initialFiles:null!=m?m:[],accept:d,multiple:u,uniqid:e,token:r,allowAutoOpening:!(null==m?void 0:m.length),onChange:t=>{Array.isArray(t)&&i(x.$L.slice.actions.updateWidget({uniqid:e,content:{files:t}}))}}))):l().createElement(l().Fragment,null);case"widget-article-image":return void 0===r||"edit"!==t||o.widget.content.file?l().createElement("div",{style:{position:"absolute",inset:0},onClick:()=>{i(x.Wq.slice.actions.flushAllEditor()),i(x.Wq.slice.actions.registerEditor({uniqid:e,name:null==o?void 0:o.widget.name}))}}):l().createElement(l().Fragment,null,l().createElement(O,null,l().createElement(G,{label:c,description:s,initialFiles:null!==(n=o.widget.content.file)&&void 0!==n?n:[],accept:d,multiple:!1,uniqid:e,token:r,allowAutoOpening:!o.widget.content.file,onChange:t=>{t&&t[0]&&i(x.$L.slice.actions.updateWidget({uniqid:e,content:{file:t[0]}}))}})))}return l().createElement(l().Fragment,null)},z=c().div`
|
|
12
|
+
position: absolute;
|
|
13
|
+
inset: 0;
|
|
14
|
+
opacity: ${e=>e.opacity};
|
|
15
|
+
background-color: ${e=>e.backgroundColor};
|
|
16
|
+
pointer-events: ${e=>e.pointerEvents};
|
|
17
|
+
`,M=({uniqid:e,mode:t})=>{const n=(0,b.useSelector)((t=>t.widgets.ids[e].widget.layers),b.shallowEqual);return l().createElement(l().Fragment,null,null==n?void 0:n.map(((e,t)=>l().createElement(V,{uniqid:e,key:t,mode:"edit"}))))},V=({uniqid:e,mode:t})=>{const n=(0,b.useSelector)((t=>t.widgets.layers[e]));return"view"===t?l().createElement(z,{opacity:1,backgroundColor:"transparent",pointerEvents:"none"},n.widgets.map(((e,t)=>l().createElement(B,{key:t,layerId:n.uniqid,uniqid:e.widget.uniqid,mode:"view"})))):l().createElement(z,{opacity:n.visible?1:0,backgroundColor:n.visible?"rgba(255,255,255,.1)":"transparent",pointerEvents:n.locked?"none":"all"},n.widgets.map(((e,t)=>l().createElement(B,{key:t,layerId:n.uniqid,uniqid:e.widget.uniqid,mode:"edit"}))))},B=({uniqid:e,layerId:t,mode:n})=>{const i=(0,b.useDispatch)(),o=(0,b.useSelector)((t=>t.widgets.ids[e]),b.shallowEqual),a=(0,b.useSelector)((e=>e.widgets.layers[t]));return o&&a&&a.position?"view"===n?l().createElement("div",{style:{position:"absolute",top:a.position.y,left:a.position.x}},l().createElement(P,{uniqid:e,widget:o,mode:n,inplace:!0})):l().createElement(J,{position:{x:a.position.x,y:a.position.y},onMouseUp:e=>{(a.position&&a.position.x!==e.x||a.position&&a.position.y!==e.y)&&(e=>{i(x.$L.slice.actions.updateLayer({uniqid:t,props:{position:e}}))})(e)}},l().createElement(F.BETA_JRCDoubleClick,{onDoubleTap:()=>((e,t)=>{i(x.Wq.slice.actions.registerEditor({uniqid:e,name:t}))})(o.widget.uniqid,o.widget.name)},l().createElement(P,{uniqid:e,widget:o,mode:n,inplace:!0}))):l().createElement(l().Fragment,null)},J=({position:e,children:t,onMouseUp:n})=>{const[i,o]=l().useState(!1),[a,r]=l().useState({x:0,y:0}),[c,s]=l().useState({x:0,y:0}),[d,u]=l().useState({x:e.x,y:e.y}),m=l().useRef(null),g=l().useCallback((e=>{if(i&&m.current){const t=c.x+(e.clientX-a.x),n=c.y+(e.clientY-a.y);u({x:t,y:n})}}),[i]),p=()=>{o(!1),n({x:d.x,y:d.y})};return l().useEffect((()=>(document.addEventListener("mousemove",g),document.addEventListener("mouseup",p),()=>{document.removeEventListener("mousemove",g),document.removeEventListener("mouseup",p)})),[g]),l().createElement("div",{style:{position:"absolute",top:d.y,left:d.x},ref:m,onMouseDown:e=>{o(!0),m.current&&(r({x:e.nativeEvent.clientX,y:e.nativeEvent.clientY}),s({x:d.x,y:d.y}))}},t)},N=({uniqid:e,widget:t,inplace:n=!0,mode:i,width:o})=>{const a=(0,b.useDispatch)(),r=(0,b.useSelector)((t=>x.$L.selectors.selectWidget(t,e))),c=(0,b.useSelector)((t=>{var n;return null===(n=x.$L.selectors.selectWidgetState(t,e))||void 0===n?void 0:n.busy}),b.shallowEqual),s=(0,b.useSelector)((t=>t.widgets.editableMap[e]),b.shallowEqual),d=(0,b.useSelector)((e=>e.widgets.currentEditableWidgetId),b.shallowEqual),u=(0,b.useSelector)((t=>t.widgets.currentEditableWidgetId===e),b.shallowEqual),{ref:m,isComponentVisible:g,setIsComponentVisible:p}=(0,_.I)(!1);if(l().useEffect((()=>{t&&a(x.$L.slice.actions.registerWidget({uniqid:e,widget:t}))}),[]),l().useEffect((()=>{g||e===d&&a(x.$L.slice.actions.setEditableWidgetId({uniqid:void 0}))}),[g]),l().useEffect((()=>{g!==u&&p(u)}),[u]),void 0===r)return l().createElement(l().Fragment,null,"This widget cannot be desplayed");const E=()=>{"edit"===i?f():"widget-article-button"===r.widget.name&&"link"===r.widget.content.openingType&&r.widget.content.openingTypeLink&&window.open(r.widget.content.openingTypeLink.url,r.widget.content.openingTypeLink.target)},f=()=>{if("view"===i)return;const{widget:e}=r;a(x.Wq.slice.actions.registerEditor({uniqid:e.uniqid,name:e.name}))};return n&&"view"!==i?l().createElement("div",{style:{minWidth:void 0!==o?o:"100%"},ref:m,onClick:()=>{p(!0),s&&(a(x.$L.slice.actions.setEditableIndex({index:s.index})),a(x.$L.slice.actions.setEditableWidgetId({uniqid:e})))}},l().createElement(S,{width:o,widget:r.widget,inplace:n,isComponentVisible:!!(g||c||u),mode:i,onClick:E}),l().createElement(j,{uniqid:e,mode:i}),l().createElement(M,{uniqid:e,mode:i}),l().createElement(L,{name:r.widget.name,uniqid:r.widget.uniqid,inplace:n})):l().createElement("div",{style:{flex:1,display:"flex",minWidth:void 0!==o?o:"100%"},onClick:f},l().createElement(S,{widget:r.widget,isComponentVisible:!1,inplace:n,mode:i,width:o,onClick:E}),l().createElement(M,{uniqid:e,mode:i}),l().createElement(L,{name:r.widget.name,uniqid:r.widget.uniqid,inplace:n}))},P=N,U=c().div`
|
|
18
|
+
display: flex;
|
|
19
|
+
flex-direction: row;
|
|
20
|
+
flex-wrap: wrap;
|
|
21
|
+
gap: 10px;
|
|
22
|
+
justify-content: center;
|
|
23
|
+
`,H=c().div`
|
|
24
|
+
border: 1px solid ${e=>e.theme.color.grey2};
|
|
25
|
+
border-radius: 8px;
|
|
26
|
+
cursor: pointer;
|
|
27
|
+
padding: 12px;
|
|
28
|
+
position: relative;
|
|
29
|
+
opacity: ${e=>e.available?"1":".4"};
|
|
30
|
+
pointer-events: ${e=>e.available?"all":"none"};
|
|
31
|
+
|
|
32
|
+
.show-on-hover {
|
|
33
|
+
position: absolute;
|
|
34
|
+
inset: 0;
|
|
35
|
+
border-radius: 8px;
|
|
36
|
+
justify-content: center;
|
|
37
|
+
align-items: center;
|
|
38
|
+
display: flex;
|
|
39
|
+
opacity: 0;
|
|
40
|
+
background-color: #ffffffe6;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
&:hover {
|
|
44
|
+
.show-on-hover {
|
|
45
|
+
opacity: 1;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
`,X=c().div`
|
|
49
|
+
border: 2px solid ${e=>e.theme.color.primary};
|
|
50
|
+
height: ${e=>e.open?"320":"54"}px;
|
|
51
|
+
border-radius: 8px;
|
|
52
|
+
display: flex;
|
|
53
|
+
justify-content: top;
|
|
54
|
+
flex-direction: column;
|
|
55
|
+
transition: height 0.4s;
|
|
56
|
+
overflow: hidden;
|
|
57
|
+
flex-direction: column;
|
|
58
|
+
`,Y=c().div`
|
|
59
|
+
display: flex;
|
|
60
|
+
flex-direction: row;
|
|
61
|
+
flex-wrap: wrap;
|
|
62
|
+
justify-content: center;
|
|
63
|
+
gap: 10px;
|
|
64
|
+
`,K=c().div`
|
|
65
|
+
min-height: 50px;
|
|
66
|
+
display: flex;
|
|
67
|
+
justify-content: center;
|
|
68
|
+
align-items: center;
|
|
69
|
+
cursor: pointer;
|
|
70
|
+
color: ${e=>e.theme.color.primary};
|
|
71
|
+
`,Q=c().button`
|
|
72
|
+
height: 72px;
|
|
73
|
+
display: flex;
|
|
74
|
+
justify-content: center;
|
|
75
|
+
align-items: center;
|
|
76
|
+
width: 40%;
|
|
77
|
+
border: 1px solid ${e=>e.theme.color.grey2};
|
|
78
|
+
border-radius: 8px;
|
|
79
|
+
transition: opacity 0.4s ease ${e=>40*e.index}ms;
|
|
80
|
+
opacity: ${e=>e.open?1:0};
|
|
81
|
+
`,Z=f.default.registry.getLazyComponent("Button"),ee=f.default.registry.getLazyComponent("Modal"),te=({mode:e,children:t,namespace:n="default",onChange:i})=>{const[o,a]=l().useState(!1),r=function(e){return"widget-article-image"===e?[x.$L.definition(x.$L.const.WIDGET_ARTICLE_TITLE),x.$L.definition(x.$L.const.WIDGET_ARTICLE_BUTTON)]:[x.$L.definition(x.$L.const.WIDGET_ARTICLE_TITLE),x.$L.definition(x.$L.const.WIDGET_ARTICLE_TEXT),x.$L.definition(x.$L.const.WIDGET_ARTICLE_IMAGE),x.$L.definition(x.$L.const.WIDGET_ARTICLE_BUTTON),x.$L.definition(x.$L.const.WIDGET_ARTICLE_GALLERY),x.$L.definition(x.$L.const.WIDGET_ARTICLE_ATTACHMENT)]}(n),c=(0,E.useIntl)(),s={open:o,title:"widget builder",showIconClose:!0,portalId:"react-modal",isFullHeight:!0,closeHandler:()=>a(!1)},d=e=>{i(x.$L.factory(e)),a(!1)};return l().createElement(l().Fragment,null,l().createElement(ee,Object.assign({},s),l().createElement(U,null,r.map(((e,t)=>l().createElement(H,{key:t,onClick:()=>d(e.name),available:e.available},l().createElement("img",{src:e.img}),l().createElement("div",{className:"show-on-hover"},c.formatMessage({id:e.label}))))))),"custom"===e&&t?l().createElement("div",{onClick:()=>a(!0)},t):l().createElement(l().Fragment,null),"button"===e?l().createElement(Z,{onClick:()=>a(!0),variant:"outlined",minWidth:"100%"},c.formatMessage({id:"WIDGET_Add_Widget"})):l().createElement(l().Fragment,null),"gallery"===e?l().createElement(U,null,r.map(((e,t)=>l().createElement(H,{key:t,onClick:()=>d(e.name),available:e.available},l().createElement("img",{src:e.img}),l().createElement("div",{className:"show-on-hover"},c.formatMessage({id:e.label})))))):l().createElement(l().Fragment,null),"article"===e?l().createElement(ne,{widgets:r,onClick:d}):l().createElement(l().Fragment,null))},ne=({widgets:e,onClick:t})=>{const[n,i]=l().useState(!1),o=(0,E.useIntl)();return l().createElement(l().Fragment,null,l().createElement(X,{open:n},l().createElement(K,{onClick:()=>i(!n)},o.formatMessage({id:"WIDGET_Add_Widget"})),l().createElement(Y,null,e.map(((e,i)=>l().createElement(Q,{key:e.name,open:n,index:i,onClick:()=>t(e.name)},o.formatMessage({id:e.label})))))))},ie=(c().div`
|
|
82
|
+
margin-bottom: 24px;
|
|
83
|
+
`,c().div`
|
|
84
|
+
margin-bottom: 4px;
|
|
85
|
+
`,c().div`
|
|
86
|
+
position: absolute;
|
|
87
|
+
background-color: ${e=>e.on?"rgba(0,0,0,.1)":"transparent"};
|
|
88
|
+
inset: 0;
|
|
89
|
+
pointer-events: ${e=>e.on?"all":"none"};
|
|
90
|
+
flex: 1;
|
|
91
|
+
display: flex;
|
|
92
|
+
overflow: hidden;
|
|
93
|
+
`),le=c().div`
|
|
94
|
+
flex-direction: row;
|
|
95
|
+
display: flex;
|
|
96
|
+
min-height: 60px;
|
|
97
|
+
border-bottom: 1px solid ${e=>e.theme.color.grey2};
|
|
98
|
+
`,oe=c().div`
|
|
99
|
+
width: 60px;
|
|
100
|
+
display: flex;
|
|
101
|
+
align-items: center;
|
|
102
|
+
justify-content: center;
|
|
103
|
+
`,ae=c().div`
|
|
104
|
+
flex: 1;
|
|
105
|
+
display: flex;
|
|
106
|
+
align-items: center;
|
|
107
|
+
justify-content: center;
|
|
108
|
+
`,re=c().div`
|
|
109
|
+
position: absolute;
|
|
110
|
+
top: 90px;
|
|
111
|
+
right: ${e=>e.visible?"0":"-1000"}px;
|
|
112
|
+
width: ${440}px;
|
|
113
|
+
bottom: 0;
|
|
114
|
+
display: flex;
|
|
115
|
+
background-color: ${e=>e.theme.color.white};
|
|
116
|
+
flex-direction: row;
|
|
117
|
+
transition: all 0.4s;
|
|
118
|
+
box-shadow: -1px 1px 10px 0px rgb(0 0 0 / 20%);
|
|
119
|
+
`,ce=c().div`
|
|
120
|
+
flex: 1;
|
|
121
|
+
display: flex;
|
|
122
|
+
flex-direction: row;
|
|
123
|
+
padding: 12px;
|
|
124
|
+
overflow: auto;
|
|
125
|
+
`,se=c().div`
|
|
126
|
+
width: ${50}px;
|
|
127
|
+
padding-top: 60px;
|
|
128
|
+
display: flex;
|
|
129
|
+
flex-direction: column;
|
|
130
|
+
border-right: 1px solid ${e=>e.theme.color.grey2};
|
|
131
|
+
`,de=c().button`
|
|
132
|
+
border-radius: 4px;
|
|
133
|
+
cursor: pointer;
|
|
134
|
+
height: 42px;
|
|
135
|
+
margin: 4px;
|
|
136
|
+
width: 42px;
|
|
137
|
+
display: flex;
|
|
138
|
+
align-items: center;
|
|
139
|
+
justify-content: center;
|
|
140
|
+
background-color: ${e=>e.on?e.theme.color.grey1:e.theme.color.white};
|
|
141
|
+
&:hover {
|
|
142
|
+
background-color: ${e=>e.theme.color.grey1};
|
|
143
|
+
}
|
|
144
|
+
`,ue=(c().div`
|
|
145
|
+
display: flex;
|
|
146
|
+
border: 1px solid ${e=>e.theme.color.grey1};
|
|
147
|
+
border-radius: ${8}px;
|
|
148
|
+
margin-bottom: 24px;
|
|
149
|
+
input {
|
|
150
|
+
width: 100%;
|
|
151
|
+
border: 0;
|
|
152
|
+
height: ${50}px;
|
|
153
|
+
margin: 0;
|
|
154
|
+
}
|
|
155
|
+
`,c().div`
|
|
156
|
+
display: flex;
|
|
157
|
+
flex-direction: row;
|
|
158
|
+
padding: 12px;
|
|
159
|
+
background-color: ${e=>e.theme.color.grey0};
|
|
160
|
+
border-radius: 8px;
|
|
161
|
+
margin-bottom: 4px;
|
|
162
|
+
`),me=c().div`
|
|
163
|
+
display: flex;
|
|
164
|
+
flex: 1;
|
|
165
|
+
align-items: center;
|
|
166
|
+
`,ge=c().div`
|
|
167
|
+
width: 40px;
|
|
168
|
+
display: flex;
|
|
169
|
+
justify-content: center;
|
|
170
|
+
align-items: center;
|
|
171
|
+
`,pe=(c().div`
|
|
172
|
+
flex-direction: row;
|
|
173
|
+
display: flex;
|
|
174
|
+
align-items: center;
|
|
175
|
+
`,c().div`
|
|
176
|
+
flex: 1;
|
|
177
|
+
display: flex;
|
|
178
|
+
align-items: center;
|
|
179
|
+
`,({uniqid:e})=>{const t=(0,b.useDispatch)(),n=(0,b.useSelector)((t=>x.Wq.selectors.selectEditor(t,e)));return n&&n.popup&&n.view?l().createElement("div",{style:{flex:1,display:"flex",flexDirection:"column",backgroundColor:"white",marginTop:90}},l().createElement(le,null,l().createElement(oe,null),l().createElement(ae,null,"Popup"),l().createElement(oe,null,l().createElement(de,{onClick:()=>{t(x.Wq.slice.actions.flushEditorPopup({uniqid:e}))}},l().createElement(F.JRCIcon,{name:"icon-times",color:"grey2"})))),l().createElement("div",{style:{flex:1,display:"flex"}},n.view),l().createElement(le,null,l().createElement(F.JRCButton,{onClick:()=>{t(x.Wq.slice.actions.flushEditorPopup({uniqid:e}))}},"Save"))):l().createElement(l().Fragment,null)}),Ee=f.default.registry.getLazyComponent("WidgetArticleTitleEditor"),fe=f.default.registry.getLazyComponent("WidgetArticleImageEditor"),ye=f.default.registry.getLazyComponent("WidgetArticleTextEditor"),ve=f.default.registry.getLazyComponent("WidgetArticleGalleryEditor"),he=f.default.registry.getLazyComponent("WidgetArticleButtonEditor"),we=f.default.registry.getLazyComponent("WidgetArticleAttachmentEditor"),be=({uniqid:e})=>{const t=(0,b.useDispatch)(),n=(0,b.useSelector)(x.$L.selectors.selectToken),i=(0,b.useSelector)((t=>x.$L.selectors.selectWidget(t,e))),o=n=>{i&&t(x.$L.slice.actions.updateWidget({uniqid:e,content:n})),t(x.Wq.slice.actions.flushEditor({uniqid:e}))},a=(n,i)=>t(x.$L.slice.actions.updateWidget({uniqid:e,content:n,override:i})),r=(n,i)=>{t(void 0!==i?x.$L.slice.actions.setWidgetState(Object.assign({uniqid:i},n)):x.$L.slice.actions.setWidgetState(Object.assign({uniqid:e},n)))},c=n=>{t(x.Wq.slice.actions.registerEditorPopup({uniqid:e,view:n}))};switch(null==i?void 0:i.widget.name){default:return l().createElement(l().Fragment,null,"cannot display editor");case x.$L.const.WIDGET_ARTICLE_BUTTON:return l().createElement(he,{content:i.widget.content,onChange:a,onSave:o,onStateChange:r});case x.$L.const.WIDGET_ARTICLE_ATTACHMENT:return l().createElement(we,{token:n,content:i.widget.content,onChange:a,onSave:o,onStateChange:r,onOpen:c});case x.$L.const.WIDGET_ARTICLE_GALLERY:return l().createElement(ve,{token:n,content:i.widget.content,onChange:a,onSave:o,onStateChange:r});case x.$L.const.WIDGET_ARTICLE_TEXT:return l().createElement(ye,{onChange:a,onSave:o,content:i.widget.content});case x.$L.const.WIDGET_ARTICLE_IMAGE:return l().createElement(fe,{content:i.widget.content,token:n,onChange:a,onSave:o,onStateChange:r});case x.$L.const.WIDGET_ARTICLE_TITLE:return l().createElement(Ee,{onChange:a,onSave:o,content:i.widget.content,onOpen:c})}},xe=({uniqid:e})=>{const t=(0,b.useDispatch)(),n=(0,E.useIntl)(),i=(0,b.useSelector)((t=>x.$L.selectors.selectWidgetContent(t,e)));return l().createElement("div",{style:{flex:1}},l().createElement(Ce,{uniqid:e}),i&&i.widgets?i.widgets.map(((o,a)=>{const r=x.$L.definition(o.widget.name);return l().createElement("div",{key:a},l().createElement(ue,null,l().createElement(me,{onClick:()=>((e,n)=>{t(x.Wq.slice.actions.registerEditor({uniqid:e,name:n}))})(o.widget.uniqid,o.widget.name)},n.formatMessage({id:r.label})),l().createElement(ge,{onClick:()=>{i.widgets&&t(x.$L.slice.actions.updateWidget({uniqid:e,content:Object.assign(Object.assign({},i),{widgets:[...i.widgets.filter(((e,t)=>t!==a))]})}))}},l().createElement(F.JRCIcon,{name:"icon-trash"}))))})):l().createElement(l().Fragment,null))},Ce=({uniqid:e})=>{const t=(0,b.useDispatch)(),n=(0,b.useSelector)((t=>t.widgets.ids[e].widget.layers),b.shallowEqual);return l().createElement(l().Fragment,null,l().createElement(F.BETA_JRCDragAndDrop,{onDrag:()=>{},renderEl:(e,t)=>l().createElement(We,{uniqid:e,key:t}),elms:n||[]}),l().createElement(te,{namespace:"default",onChange:n=>{t(x.$L.slice.actions.registerLayer({uniqid:e,widget:n}))},mode:"button"}))},Le=({uniqid:e})=>{const t=(0,b.useDispatch)(),n=(0,b.useSelector)((t=>t.widgets.layers[e]));return l().createElement("div",{onClick:()=>{t(x.$L.slice.actions.updateLayer({uniqid:e,props:{locked:!n.locked}}))}},l().createElement(F.JRCIcon,{name:n.locked?"icon-lock":"icon-unlock"}))},qe=({uniqid:e})=>{const t=(0,b.useDispatch)(),n=(0,b.useSelector)((t=>t.widgets.layers[e]));return l().createElement("div",{onClick:()=>{t(x.$L.slice.actions.updateLayer({uniqid:e,props:{visible:!n.visible}}))}},l().createElement(F.JRCIcon,{name:n.visible?"icon-eye":"icon-eye-slash"}))},Te=({uniqid:e,layerId:t})=>{const n=(0,b.useDispatch)();return l().createElement("div",{onClick:()=>{n(x.$L.slice.actions.flushLayer({uniqid:e,layerId:t}))}},l().createElement(F.JRCIcon,{name:"icon-trash"}))},We=({uniqid:e})=>{const t=(0,b.useSelector)((t=>t.widgets.layers[e]));return l().createElement(l().Fragment,null,t.title,t.widgets.map(((n,i)=>{const o=x.$L.definition(n.widget.name);return l().createElement("div",{style:{flexDirection:"row",display:"flex"},key:i},l().createElement("div",{style:{flex:1,alignItems:"center"}},o.label),l().createElement(Le,{uniqid:e}),l().createElement(qe,{uniqid:e}),l().createElement(Te,{uniqid:n.widget.uniqid,layerId:t.uniqid}))})))},$e=f.default.registry.getLazyComponent("Button"),Ie=({uniqid:e})=>{const t=(0,E.useIntl)(),n=(0,b.useDispatch)(),i=(0,b.useSelector)((t=>x.$L.selectors.selectWidget(t,e))),[a,r]=l().useState(null==i?void 0:i.title),{control:c,watch:s}=(0,o.useForm)({defaultValues:{text:null!=a?a:""},criteriaMode:"all"});return l().useEffect((()=>{const e=s((e=>{r(e.text)}));return()=>e.unsubscribe()}),[s]),i?l().createElement("div",{style:{flex:1,display:"flex",flexDirection:"column"}},l().createElement(F.JRCInputText,{name:"text",control:c,placeholder:t.formatMessage({id:"EDITOR_Widget_Wrapper_Title"})}),l().createElement($e,{onClick:()=>{void 0!==a&&(n(x.$L.slice.actions.updateWidgetWrapper({uniqid:e,title:a})),n(x.Wq.slice.actions.flushEditor({uniqid:e})))},variant:"outlined",minWidth:"100%"},t.formatMessage({id:"EDITOR_Save_Widget"}))):l().createElement(l().Fragment,null,"No wrapper")},ke=f.default.registry.getLazyComponent("Icon"),Se=({uniqid:e})=>{const t=(0,E.useIntl)(),n=(0,b.useDispatch)(),i=(0,b.useSelector)((t=>x.Wq.selectors.selectEditor(t,e))),o=x.$L.definition(null==i?void 0:i.name),[a,r]=l().useState(!1),[c,s]=l().useState("default");return l().useEffect((()=>{setTimeout((()=>{r(!0)}),0)})),i?l().createElement("div",{style:{width:440,position:"relative"}},l().createElement(re,{visible:a},l().createElement(se,null,o.panel.useWrapper?l().createElement(de,{on:"wrapper"===c,onClick:()=>s("wrapper")},l().createElement(ke,{name:"icon-font",color:"grey2"})):l().createElement(l().Fragment,null),o.panel.useEditor?l().createElement(de,{on:"default"===c,onClick:()=>s("default")},l().createElement(ke,{name:"icon-pen",color:"grey2"})):l().createElement(l().Fragment,null),o.panel.useWidgets?l().createElement(Ae,{uniqid:e},l().createElement(de,{on:"widgets"===c,onClick:()=>s("widgets")},l().createElement(ke,{name:"icon-sliders",color:"grey2"}))):l().createElement(l().Fragment,null)),l().createElement("div",{style:{flex:1,display:"flex",flexDirection:"column"}},l().createElement(le,null,l().createElement(_e,{uniqid:e,position:i.position}),l().createElement(ae,null,t.formatMessage({id:o.label})),l().createElement(oe,null,l().createElement(de,{onClick:()=>{n(x.Wq.slice.actions.flushEditor({uniqid:e}))}},l().createElement(ke,{name:"icon-times",color:"grey2"})))),l().createElement(ce,null,"default"===c&&o.panel.useEditor?l().createElement(be,{uniqid:i.uniqid}):l().createElement(l().Fragment,null),"wrapper"===c&&o.panel.useWrapper?l().createElement(Ie,{uniqid:i.uniqid}):l().createElement(l().Fragment,null),"widgets"===c&&o.panel.useWidgets?l().createElement(xe,{uniqid:e,namespace:o.name}):l().createElement(l().Fragment,null)))),(null==i?void 0:i.popup)?l().createElement("div",{style:{position:"absolute",inset:0,backgroundColor:"#000",opacity:".7"}}):l().createElement(l().Fragment,null)):l().createElement(l().Fragment,null)},_e=({uniqid:e,position:t})=>{const n=(0,b.useDispatch)();return l().createElement(oe,null,l().createElement(de,{onClick:()=>{n(x.Wq.slice.actions.setEditorPosition({uniqid:e,position:"left"===t?"right":"left"}))}},l().createElement(ke,{name:"left"===t?"icon-angle-right":"icon-angle-left",color:"grey2"})))},Ae=({uniqid:e,children:t})=>{const n=(0,b.useSelector)((t=>x.$L.selectors.selectWidgetState(t,e)));return(null==n?void 0:n.initialized)?t:l().createElement(l().Fragment,null)},De=c().div`
|
|
180
|
+
position: absolute;
|
|
181
|
+
inset: 0;
|
|
182
|
+
pointer-events: none;
|
|
183
|
+
z-index: 100;
|
|
184
|
+
`,Fe=c().div`
|
|
185
|
+
flex: 1;
|
|
186
|
+
display: flex;
|
|
187
|
+
margintop: ${90}px;
|
|
188
|
+
pointer-events: ${e=>e.on?"all":"none"};
|
|
189
|
+
`,Re=c().div`
|
|
190
|
+
flex: 1;
|
|
191
|
+
display: flex;
|
|
192
|
+
flex-direction: row;
|
|
193
|
+
pointer-events: none;
|
|
194
|
+
`,Ge=c().div`
|
|
195
|
+
width: ${440}px;
|
|
196
|
+
pointer-events: none;
|
|
197
|
+
`,Oe=()=>{const e=(0,b.useSelector)(x.Wq.selectors.selectEditors);return l().createElement(De,null,e.map(((e,t)=>"left"===e.position?l().createElement(ie,{on:!1,key:t},l().createElement(Re,null,l().createElement(Se,{uniqid:e.uniqid}),l().createElement(Fe,{on:void 0!==e.popup},l().createElement(pe,{uniqid:e.uniqid})),l().createElement(Ge,null))):l().createElement(ie,{on:!1,key:t},l().createElement(Re,null,l().createElement(Ge,null),l().createElement(Fe,{on:void 0!==e.popup},l().createElement(pe,{uniqid:e.uniqid})),l().createElement(Se,{uniqid:e.uniqid}))))))}}}]);
|
|
198
|
+
//# sourceMappingURL=55.bundle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"55.bundle.js","mappings":"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","sources":["webpack://ReactCore/./src/displayer/DisplayForm.component.tsx","webpack://ReactCore/./src/components/Empty.tsx","webpack://ReactCore/./src/components/TwoColLayout.tsx","webpack://ReactCore/./src/components/widgets/WidgetState.tsx","webpack://ReactCore/./src/components/widgets/Widget.tsx","webpack://ReactCore/./src/components/widgets/const.ts","webpack://ReactCore/./src/components/widgets/WidgetInplace/WidgetInplaceUpload.tsx","webpack://ReactCore/./src/components/widgets/WidgetInplace/WidgetInplaceWrapper.tsx","webpack://ReactCore/./src/components/widgets/WidgetLayer/WidgetLayer.style.tsx","webpack://ReactCore/./src/components/widgets/WidgetLayer/WidgetLayer.tsx","webpack://ReactCore/./src/components/widgets/WidgetWrapperCore.tsx","webpack://ReactCore/./src/components/widgets/WidgetList/WidgetList.style.tsx","webpack://ReactCore/./src/components/widgets/WidgetList/WidgetList.tsx","webpack://ReactCore/./src/components/widgets/namespace.ts","webpack://ReactCore/./src/components/editors/style.tsx","webpack://ReactCore/./src/components/editors/const.ts","webpack://ReactCore/./src/components/editors/EditorPopup.tsx","webpack://ReactCore/./src/components/editors/Editor.tsx","webpack://ReactCore/./src/components/editors/EditorTabWidgets.tsx","webpack://ReactCore/./src/components/editors/EditorTabWrapper.tsx","webpack://ReactCore/./src/components/editors/EditorWrapper.tsx","webpack://ReactCore/./src/components/editors/EditorsPortal.tsx"],"sourcesContent":["import * as React from 'react';\nimport { DisplayFormRef, FieldsWith } from './types';\nimport { useForm, Control, FieldValues } from 'react-hook-form';\nimport { useDisplayForm } from './useDisplay';\nimport styled from 'styled-components';\n\nconst FormElm = styled.form<{ stretch?: boolean }>`\n ${(props) =>\n props.stretch &&\n `\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n `}\n`;\n\nconst FieldsetWrapper = styled.div<{ stretch?: boolean }>`\n ${(props) =>\n props.stretch &&\n `\n flex: 1;\n`}\n`;\n\nexport type DisplayFormProps<TFieldValues extends FieldValues> = {\n type: string;\n fields: FieldsWith<'input', TFieldValues>;\n extraInputs?: (control: Control<TFieldValues>) => React.ReactNode;\n defaultValues?: any;\n onSubmit: any;\n buttons: React.ReactNode;\n readOnly?: boolean;\n dataCy?: string;\n stretch?: boolean;\n children?: React.ReactNode;\n};\n\n/****\n * The jamespot model depend on the platform\n * For example a user can have the size attribute only for a given platform\n * The model specifics of a platform are stored in J.model\n *\n * This component display an array of attributes only if this attribute is activated on the platform\n */\nconst _DisplayForm = <TFieldValues extends FieldValues>(\n props: DisplayFormProps<TFieldValues>,\n ref: React.ForwardedRef<DisplayFormRef>,\n) => {\n const formRef = React.useRef<HTMLFormElement>(null);\n\n const [configuration, defaultValues] = useDisplayForm(props.fields, props.type);\n\n const { handleSubmit, control, reset, ...formFn } = useForm({\n defaultValues: {\n ...defaultValues,\n ...props.defaultValues,\n },\n criteriaMode: 'all',\n });\n\n React.useImperativeHandle(\n ref,\n () => ({\n ...formFn,\n handleSubmit,\n control,\n reset: () => {\n // in case the form is scrollable\n formRef?.current?.scrollTo(0, 0);\n // reset react-hook-form form\n reset();\n },\n }),\n [],\n );\n\n return (\n <FormElm stretch={props.stretch} onSubmit={handleSubmit(props.onSubmit)} ref={formRef}>\n <FieldsetWrapper stretch={props.stretch}>\n {configuration.map(({ Input, ...conf }) => (\n <Input\n key={conf.name}\n control={control}\n {...conf}\n dataCy={`${props.dataCy}-${conf.name}`}\n readOnly={props.readOnly}\n />\n ))}\n {props.extraInputs && props.extraInputs(control)}\n </FieldsetWrapper>\n {props.buttons}\n </FormElm>\n );\n};\n\nexport const DisplayForm = React.forwardRef<DisplayFormRef>(_DisplayForm as any) as <TFieldValues extends FieldValues>(\n props: DisplayFormProps<TFieldValues> & {\n ref?: React.ForwardedRef<DisplayFormRef>;\n },\n) => ReturnType<typeof _DisplayForm>;\n","import * as React from 'react';\n\n// FIXME move to j-react-components + display error if dev mode\nexport const Empty = () => <></>;\n","import * as React from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { useIntl } from 'react-intl';\nimport type { JRCAppColumnProps } from 'jamespot-react-components';\nimport JRCore from 'App';\nimport { useLocation } from 'react-router-dom';\nimport { LayoutMode } from 'jamespot-react-components';\n\nconst Container = JRCore.registry.getLazyComponent('Container');\nconst AppColumn = JRCore.registry.getLazyComponent('AppColumn');\nconst MainColumn = JRCore.registry.getLazyComponent('MainColumn');\n\nexport type TwoColLayoutRoute = {\n path: string;\n key: string;\n icon: string;\n label: string;\n group?: string;\n};\n\nexport type TwoColLayoutRoutes<T extends TwoColLayoutRoute = TwoColLayoutRoute> = Record<string, T>;\n\nexport type TwoColLayoutProps = {\n extensionRoute: string;\n routes: TwoColLayoutRoutes;\n mode?: LayoutMode;\n description: JRCAppColumnProps['description'];\n};\n\nexport function TwoColLayout({ extensionRoute, routes, description, mode = 'center' }: TwoColLayoutProps) {\n const intl = useIntl();\n const { pathname } = useLocation();\n\n const ROUTES_ARRAY = Object.values(routes);\n const [activeTab, setActiveTab] = React.useState(ROUTES_ARRAY?.[0]?.key);\n\n const tabs = ROUTES_ARRAY.map((tab) => ({\n ...tab,\n label: intl.formatMessage({ id: tab.label }),\n href: `/ng/rr/${extensionRoute}/${tab.path}`,\n group: tab.group ? intl.formatMessage({ id: tab.group }) : undefined,\n }));\n\n React.useEffect(() => {\n const activeRoute = ROUTES_ARRAY.find((route) => pathname === `/ng/rr/${extensionRoute}/${route.path}`);\n if (activeRoute) setActiveTab(activeRoute.key);\n }, [pathname]);\n\n return (\n <React.Suspense fallback={<></>}>\n <Container mode={mode}>\n <AppColumn mode={mode} description={description} tabs={tabs} activeTab={activeTab || ''} />\n <MainColumn mode={mode}>\n <Outlet />\n </MainColumn>\n </Container>\n </React.Suspense>\n );\n}\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport JRCore from 'App';\n\nconst JRCLoader = JRCore.registry.getLazyComponent('Loader');\n\nimport { WidgetKeys, WidgetsRootState } from 'jamespot-user-api';\nimport { Widget } from 'jamespot-front-business';\n\n/*\n Widget state\n*/\n\nexport const WidgetState = ({ name, uniqid, inplace }: { name: WidgetKeys; uniqid: string; inplace: boolean }) => {\n const state = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidgetState(state, uniqid));\n const def = Widget.definition(name);\n\n if (state?.loading) {\n return (\n <div\n style={{\n position: 'absolute',\n inset: 0,\n backgroundColor: 'rgba(255,255,255,.7)',\n display: 'flex',\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n }}>\n <JRCLoader />\n </div>\n );\n }\n\n if (state?.hover) {\n return (\n <div\n style={{\n position: 'absolute',\n inset: 0,\n backgroundColor: 'rgba(255,255,255,.7)',\n display: 'flex',\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n }}></div>\n );\n }\n\n if (!state?.initialized && inplace) {\n return <></>;\n }\n\n if (!state?.initialized && !inplace) {\n return (\n <div\n style={{\n position: 'absolute',\n inset: 0,\n backgroundColor: 'rgba(255,255,255,1)',\n display: 'flex',\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n }}>\n <img src={def.img} />\n </div>\n );\n }\n\n return <></>;\n};\n","import React from 'react';\n\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { CombinedWidgetContent, CombinedWidgetType, WidgetDisplayMode, WidgetStateProps } from 'jamespot-user-api';\n\nimport JRCore from 'App';\nimport { Widget } from 'jamespot-front-business';\n\nconst JRCWidgetArticleButton = JRCore.registry.getLazyComponent('WidgetArticleButton');\nconst JRCWidgetArticleGallery = JRCore.registry.getLazyComponent('WidgetArticleGallery');\nconst JRCWidgetArticleAttachment = JRCore.registry.getLazyComponent('WidgetArticleAttachment');\nconst JRCWidgetArticleImage = JRCore.registry.getLazyComponent('WidgetArticleImage');\nconst JRCWidgetArticleTitle = JRCore.registry.getLazyComponent('WidgetArticleTitle');\nconst JRCWidgetArticleText = JRCore.registry.getLazyComponent('WidgetArticleText');\n/*\n Widget Factory (jamespot-react-core)\n*/\nexport const DisplayWidget = ({\n widget,\n width,\n inplace = false,\n isComponentVisible = false,\n mode = 'view',\n onClick,\n}: {\n widget: CombinedWidgetType;\n width?: number | undefined;\n inplace: boolean;\n isComponentVisible: boolean | undefined;\n mode: WidgetDisplayMode;\n onClick: () => void;\n}) => {\n const dispatch = useDispatch();\n const { name, uniqid } = widget;\n const token = useSelector(Widget.selectors.selectToken);\n\n const onChange = (content: CombinedWidgetContent, override?: boolean) =>\n dispatch(Widget.slice.actions.updateWidget({ uniqid, content, override }));\n\n const onStateChange = (states: WidgetStateProps) =>\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, ...states }));\n\n switch (name) {\n default:\n return <>cannot display widget ({name})</>;\n case Widget.const.WIDGET_ARTICLE_BUTTON:\n return (\n <JRCWidgetArticleButton\n isComponentVisible={isComponentVisible}\n content={widget.content}\n inplace={inplace}\n mode={mode}\n onChange={onChange}\n onClick={onClick}\n onStateChange={onStateChange}\n />\n );\n case Widget.const.WIDGET_ARTICLE_GALLERY:\n return (\n <JRCWidgetArticleGallery\n width={width}\n token={token}\n isComponentVisible={isComponentVisible}\n content={widget.content}\n inplace={inplace}\n mode={mode}\n onChange={onChange}\n onStateChange={onStateChange}\n />\n );\n case Widget.const.WIDGET_ARTICLE_ATTACHMENT:\n return (\n <JRCWidgetArticleAttachment\n token={token}\n content={widget.content}\n isComponentVisible={isComponentVisible}\n inplace={inplace}\n mode={mode}\n onChange={onChange}\n onStateChange={onStateChange}\n />\n );\n case Widget.const.WIDGET_ARTICLE_IMAGE:\n return (\n <JRCWidgetArticleImage\n width={width ?? 800}\n token={token}\n content={widget.content}\n isComponentVisible={isComponentVisible}\n inplace={inplace}\n mode={mode}\n onChange={onChange}\n onClick={onClick}\n onStateChange={onStateChange}\n />\n );\n case Widget.const.WIDGET_ARTICLE_TITLE:\n return (\n <JRCWidgetArticleTitle\n isComponentVisible={isComponentVisible}\n content={widget.content}\n inplace={inplace}\n mode={mode}\n onChange={onChange}\n onStateChange={onStateChange}\n />\n );\n case Widget.const.WIDGET_ARTICLE_TEXT:\n return (\n <JRCWidgetArticleText\n content={widget.content}\n isComponentVisible={isComponentVisible}\n inplace={inplace}\n mode={mode}\n onChange={onChange}\n onStateChange={onStateChange}\n />\n );\n }\n};\n","export const Uploader: Record<string, { accept: string; label: string; description: string; multiple: boolean }> = {\n 'widget-article-image': {\n accept: 'image/png, image/jpeg, image/jpg',\n multiple: false,\n label: 'WIDGET_Article_Image_Empty_Label',\n description: 'WIDGET_Article_Image_Empty_Description',\n },\n 'widget-article-gallery': {\n accept: 'image/png, image/jpeg, image/jpg',\n multiple: true,\n label: 'WIDGET_Article_Gallery_Empty_Label',\n description: 'WIDGET_Article_Attachment_Empty_Description',\n },\n 'widget-article-attachment': {\n accept: '*',\n multiple: true,\n label: 'WIDGET_Article_Attachment_Empty_Label',\n description: 'WIDGET_Article_Attachment_Empty_Description',\n },\n};\n","import React from 'react';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport JRCore from 'App';\nconst JRCFormFile = JRCore.registry.getLazyComponent('DEPRECATEDFormInputFile');\n\nimport { apiFileToWidgetFile, FileResponse, WidgetFileType, WidgetsRootState } from 'jamespot-user-api';\nimport { Widget } from 'jamespot-front-business';\n\nimport { JRCWidgetEmptyInplace } from 'jamespot-react-components';\n\ntype WidgetInplaceUploadProps = {\n uniqid: string;\n initialFiles: WidgetFileType[];\n accept: string;\n label: string;\n description: string;\n multiple: boolean;\n token: string;\n allowAutoOpening: boolean;\n onChange: (files: WidgetFileType[]) => void;\n};\n\nexport const WidgetInplaceUpload = ({\n uniqid,\n initialFiles,\n accept,\n label,\n description,\n multiple,\n token,\n allowAutoOpening,\n onChange,\n}: WidgetInplaceUploadProps) => {\n const dispatch = useDispatch();\n const isActive = useSelector(\n (state: WidgetsRootState) => state.widgets.currentEditableWidgetId === uniqid,\n shallowEqual,\n );\n const uploadRef = React.useRef<HTMLInputElement>(null);\n const [fileUploadStep, setFileUploadStep] = React.useState<number>(0);\n const [fileCount, setFileCount] = React.useState<number>(0);\n const [fileResponses, setFileResponses] = React.useState<WidgetFileType[]>(initialFiles ?? []);\n\n const onUploadStart = () => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: true }));\n };\n\n React.useEffect(() => {\n if (fileUploadStep === fileCount) {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: false }));\n }\n }, [fileUploadStep]);\n\n React.useEffect(() => {\n onChange(fileResponses.map((fileResponse) => fileResponse));\n }, [fileResponses]);\n\n React.useEffect(() => {\n if (isActive && allowAutoOpening) {\n uploadRef.current?.click();\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, mounted: true }));\n }\n }, [isActive]);\n\n return (\n <>\n <JRCWidgetEmptyInplace\n url={'widget-article-image-placeholder.png'}\n label={label}\n description={description}\n onClick={() => {\n if (isActive) {\n uploadRef.current?.click();\n }\n }}\n />\n <div style={{ height: 0, width: 0, overflow: 'hidden' }}>\n <JRCFormFile\n ref={uploadRef}\n id=\"widget-upload-file\"\n name=\"editorFiles\"\n content={''}\n accept={accept as any}\n multiple={multiple}\n token={token}\n onUploadStart={(count) => {\n if (count !== undefined) {\n setFileCount((prevCount) => prevCount + count);\n }\n onUploadStart();\n }}\n onUploadSuccess={(fileResponse: FileResponse | undefined) => {\n setFileUploadStep((prevStep) => prevStep + 1);\n if (fileResponse !== undefined) {\n setFileResponses((prevFileResponses) => [\n ...prevFileResponses,\n apiFileToWidgetFile(fileResponse),\n ]);\n }\n if (!multiple) {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: false }));\n }\n }}\n />\n </div>\n </>\n );\n};\n","import React from 'react';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport styled from 'styled-components';\n\nimport { WidgetDisplayMode, WidgetsRootState } from 'jamespot-user-api';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\n\nimport { Uploader } from '../const';\nimport { WidgetInplaceUpload } from './WidgetInplaceUpload';\n\nexport const CSSUploadFileWrapper = styled.div`\n position: relative;\n inset: 0;\n display: flex;\n flex: 1;\n min-height: 180px;\n`;\n\nexport const WidgetInplaceWrapper = ({ uniqid, mode }: { uniqid: string; mode: WidgetDisplayMode }) => {\n const dispatch = useDispatch();\n const widgetWrapper = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid));\n const isActive = useSelector(\n (state: WidgetsRootState) => state.widgets.currentEditableWidgetId === uniqid,\n shallowEqual,\n );\n const token = useSelector(Widget.selectors.selectToken);\n\n React.useEffect(() => {\n if (isActive && widgetWrapper?.widget.name) {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: widgetWrapper?.widget.name }));\n }\n }, [isActive]);\n\n if (widgetWrapper === undefined) {\n return <></>;\n }\n\n const label = Uploader && Uploader[widgetWrapper?.widget.name] ? Uploader[widgetWrapper?.widget.name].label : '';\n const description =\n Uploader && Uploader[widgetWrapper?.widget.name] ? Uploader[widgetWrapper?.widget.name].description : '';\n const accept = Uploader && Uploader[widgetWrapper?.widget.name] ? Uploader[widgetWrapper?.widget.name].accept : '';\n const multiple =\n Uploader && Uploader[widgetWrapper?.widget.name] ? Uploader[widgetWrapper?.widget.name].multiple : false;\n\n switch (widgetWrapper?.widget.name) {\n case 'widget-article-gallery':\n const galleryFiles = widgetWrapper.widget.content.files;\n return token !== undefined && mode === 'edit' ? (\n <div style={{ marginTop: galleryFiles?.length ? 24 : 0 }}>\n <CSSUploadFileWrapper>\n <WidgetInplaceUpload\n label={label}\n description={description}\n initialFiles={[]}\n accept={accept}\n multiple={multiple}\n uniqid={uniqid}\n token={token}\n allowAutoOpening={!galleryFiles?.length}\n onChange={(fs) => {\n if (Array.isArray(fs)) {\n fs.forEach((file) => {\n dispatch(\n Widget.slice.actions.updateWidget({\n uniqid,\n content: { files: galleryFiles ? [...galleryFiles, file] : [file] },\n }),\n );\n });\n }\n }}\n />\n </CSSUploadFileWrapper>\n </div>\n ) : (\n <></>\n );\n case 'widget-article-attachment':\n const files = widgetWrapper.widget.content.files;\n return token !== undefined && mode === 'edit' ? (\n <div style={{ marginTop: files?.length ? 24 : 0 }}>\n <CSSUploadFileWrapper>\n <WidgetInplaceUpload\n label={label}\n description={description}\n initialFiles={files ?? []}\n accept={accept}\n multiple={multiple}\n uniqid={uniqid}\n token={token}\n allowAutoOpening={!files?.length}\n onChange={(fs) => {\n if (Array.isArray(fs)) {\n dispatch(\n Widget.slice.actions.updateWidget({\n uniqid,\n content: { files: fs },\n }),\n );\n }\n }}\n />\n </CSSUploadFileWrapper>\n </div>\n ) : (\n <></>\n );\n case 'widget-article-image':\n return token !== undefined && mode === 'edit' && !widgetWrapper.widget.content.file ? (\n <>\n <CSSUploadFileWrapper>\n <WidgetInplaceUpload\n label={label}\n description={description}\n initialFiles={widgetWrapper.widget.content.file ?? []}\n accept={accept}\n multiple={false}\n uniqid={uniqid}\n token={token}\n allowAutoOpening={!widgetWrapper.widget.content.file}\n onChange={(fs) => {\n if (fs && fs[0]) {\n dispatch(Widget.slice.actions.updateWidget({ uniqid, content: { file: fs[0] } }));\n }\n }}\n />\n </CSSUploadFileWrapper>\n </>\n ) : (\n <div\n style={{ position: 'absolute', inset: 0 }}\n onClick={() => {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n dispatch(\n WidgetEditor.slice.actions.registerEditor({ uniqid, name: widgetWrapper?.widget.name }),\n );\n }}></div>\n );\n }\n\n return <></>;\n};\n","import styled from 'styled-components';\n\nexport const CSSWidgetLayer = styled.div<{ opacity: number; backgroundColor: string; pointerEvents: string }>`\n position: absolute;\n inset: 0;\n opacity: ${(props) => props.opacity};\n background-color: ${(props) => props.backgroundColor};\n pointer-events: ${(props) => props.pointerEvents};\n`;\n","import React from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { WidgetVector, WidgetsRootState, WidgetDisplayMode, WidgetKeys } from 'jamespot-user-api';\n\nimport { WidgetEditor, Widget } from 'jamespot-front-business';\nimport WidgetWrapperCore from '../WidgetWrapperCore';\nimport { CSSWidgetLayer } from './WidgetLayer.style';\nimport { BETA_JRCDoubleClick } from 'jamespot-react-components';\n\n/*\n Widget layering\n*/\n\nexport const WidgetLayer = ({ uniqid, mode }: { uniqid: string; mode: WidgetDisplayMode }) => {\n const layers = useSelector((state: WidgetsRootState) => state.widgets.ids[uniqid].widget.layers, shallowEqual);\n return (\n <>\n {layers?.map((layer, index) => {\n if (mode === 'edit') {\n return <Layer uniqid={layer} key={index} mode={'edit'} />;\n }\n\n return <Layer uniqid={layer} key={index} mode={'edit'} />;\n })}\n </>\n );\n};\n\nconst Layer = ({ uniqid, mode }: { uniqid: string; mode: WidgetDisplayMode }) => {\n const layer = useSelector((state: WidgetsRootState) => state.widgets.layers[uniqid]);\n if (mode === 'view') {\n return (\n <CSSWidgetLayer opacity={1} backgroundColor={'transparent'} pointerEvents={'none'}>\n {layer.widgets.map((widgetWrapper, index) => {\n return (\n <LayerWidget\n key={index}\n layerId={layer.uniqid}\n uniqid={widgetWrapper.widget.uniqid}\n mode={'view'}\n />\n );\n })}\n </CSSWidgetLayer>\n );\n }\n\n return (\n <CSSWidgetLayer\n opacity={layer.visible ? 1 : 0}\n backgroundColor={layer.visible ? 'rgba(255,255,255,.1)' : 'transparent'}\n pointerEvents={layer.locked ? 'none' : 'all'}>\n {layer.widgets.map((widgetWrapper, index) => {\n return (\n <LayerWidget\n key={index}\n layerId={layer.uniqid}\n uniqid={widgetWrapper.widget.uniqid}\n mode={'edit'}\n />\n );\n })}\n </CSSWidgetLayer>\n );\n};\n\n/*\n Widget from the layer\n*/\nconst LayerWidget = ({ uniqid, layerId, mode }: { uniqid: string; layerId: string; mode: WidgetDisplayMode }) => {\n const dispatch = useDispatch();\n const widgetWrapper = useSelector((state: WidgetsRootState) => state.widgets.ids[uniqid], shallowEqual);\n const layer = useSelector((state: WidgetsRootState) => state.widgets.layers[layerId]);\n\n if (!widgetWrapper) {\n return <></>;\n }\n\n if (!layer) {\n return <></>;\n }\n\n if (!layer.position) {\n return <></>;\n }\n\n const onDoubleTap = (uniqid: string, name: WidgetKeys) => {\n /*\n Open editor\n */\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name }));\n };\n\n const onMouseUp = (position: WidgetVector) => {\n dispatch(Widget.slice.actions.updateLayer({ uniqid: layerId, props: { position } }));\n };\n\n if (mode === 'view') {\n return (\n <div style={{ position: 'absolute', top: layer.position.y, left: layer.position.x }}>\n <WidgetWrapperCore uniqid={uniqid} widget={widgetWrapper} mode={mode} inplace={true} />\n </div>\n );\n }\n\n return (\n <DraggableHandler\n position={{ x: layer.position.x, y: layer.position.y }}\n onMouseUp={(position: WidgetVector) => {\n if (\n (layer.position && layer.position.x !== position.x) ||\n (layer.position && layer.position.y !== position.y)\n ) {\n onMouseUp(position);\n }\n }}>\n <BETA_JRCDoubleClick\n onDoubleTap={() => onDoubleTap(widgetWrapper.widget.uniqid, widgetWrapper.widget.name)}>\n <WidgetWrapperCore uniqid={uniqid} widget={widgetWrapper} mode={mode} inplace={true} />\n </BETA_JRCDoubleClick>\n </DraggableHandler>\n );\n};\n\nexport type Vector = {\n x: number;\n y: number;\n};\n\n// TODO: COMBINE WITH THE ONE USED ON COLOR PICKER\n// TODO: COMBINE WITH THE ONE USED ON COLOR PICKER\n// TODO: COMBINE WITH THE ONE USED ON COLOR PICKER\nexport const DraggableHandler = ({\n position,\n children,\n onMouseUp,\n}: {\n position: Vector;\n children: React.ReactElement;\n onMouseUp: (position: Vector) => void;\n}) => {\n const [mouseIsDown, setMouseDown] = React.useState<boolean>(false);\n const [mouse, setMouse] = React.useState<Vector>({ x: 0, y: 0 });\n const [start, setStart] = React.useState<Vector>({ x: 0, y: 0 });\n const [child, setChild] = React.useState<Vector>({ x: position.x, y: position.y });\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n const handleMouseDown = (event: any) => {\n setMouseDown(true);\n if (ref.current) {\n setMouse({ x: event.nativeEvent.clientX, y: event.nativeEvent.clientY });\n setStart({ x: child.x, y: child.y });\n }\n };\n\n const handleMouseMove = React.useCallback(\n (event: any) => {\n if (mouseIsDown && ref.current) {\n const dx = start.x + (event.clientX - mouse.x);\n const dy = start.y + (event.clientY - mouse.y);\n\n setChild({ x: dx, y: dy });\n }\n },\n [mouseIsDown],\n );\n\n const handleMouseUp = () => {\n setMouseDown(false);\n onMouseUp({ x: child.x, y: child.y });\n };\n\n React.useEffect(() => {\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [handleMouseMove]);\n\n return (\n <div style={{ position: 'absolute', top: child.y, left: child.x }} ref={ref} onMouseDown={handleMouseDown}>\n {children}\n </div>\n );\n};\n","import React from 'react';\nimport { useSelector, useDispatch, shallowEqual } from 'react-redux';\n\nimport { WidgetDisplayMode, WidgetsRootState, WidgetWrapperProps } from 'jamespot-user-api';\nimport { WidgetState } from './WidgetState';\nimport { DisplayWidget } from './Widget';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { useComponentVisible } from './hooks';\nimport { WidgetInplaceWrapper } from './WidgetInplace/WidgetInplaceWrapper';\nimport { WidgetLayer } from './WidgetLayer/WidgetLayer';\n\n/*\n This is a widget wrapper\n*/\nexport const WidgetWrapperCore = ({\n uniqid,\n widget,\n inplace = true,\n mode,\n width,\n}: {\n uniqid: string;\n widget: WidgetWrapperProps;\n inplace?: boolean;\n mode: WidgetDisplayMode;\n width?: number | undefined;\n}) => {\n const dispatch = useDispatch();\n const widgetWrapper = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid));\n const isBusy = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetState(state, uniqid)?.busy,\n shallowEqual,\n );\n const indexOrder = useSelector((state: WidgetsRootState) => state.widgets.editableMap[uniqid], shallowEqual);\n const currentEditableWidgetId = useSelector(\n (state: WidgetsRootState) => state.widgets.currentEditableWidgetId,\n shallowEqual,\n );\n const isActive = useSelector(\n (state: WidgetsRootState) => state.widgets.currentEditableWidgetId === uniqid,\n shallowEqual,\n );\n const { ref, isComponentVisible, setIsComponentVisible } = useComponentVisible(false);\n\n React.useEffect(() => {\n if (widget) {\n /*\n Register widget\n */\n dispatch(Widget.slice.actions.registerWidget({ uniqid, widget }));\n }\n }, []);\n\n React.useEffect(() => {\n if (!isComponentVisible) {\n if (uniqid === currentEditableWidgetId) {\n dispatch(Widget.slice.actions.setEditableWidgetId({ uniqid: undefined }));\n }\n }\n }, [isComponentVisible]);\n\n React.useEffect(() => {\n if (isComponentVisible !== isActive) {\n setIsComponentVisible(isActive);\n }\n }, [isActive]);\n\n if (widgetWrapper === undefined) {\n return <>This widget cannot be desplayed</>;\n }\n\n const onClick = () => {\n if (mode === 'edit') {\n registerEditor();\n } else {\n if (widgetWrapper.widget.name === 'widget-article-button') {\n switch (widgetWrapper.widget.content.openingType) {\n case 'link':\n if (widgetWrapper.widget.content.openingTypeLink) {\n window.open(\n widgetWrapper.widget.content.openingTypeLink.url,\n widgetWrapper.widget.content.openingTypeLink.target,\n );\n }\n break;\n }\n }\n }\n };\n\n const registerEditor = () => {\n if (mode === 'view') {\n return;\n }\n /*\n Register editor\n */\n const { widget } = widgetWrapper;\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid: widget.uniqid,\n name: widget.name,\n }),\n );\n };\n\n if (inplace && mode !== 'view') {\n return (\n <div\n style={{ minWidth: width !== undefined ? width : '100%' }}\n ref={ref}\n onClick={() => {\n setIsComponentVisible(true);\n if (indexOrder) {\n dispatch(Widget.slice.actions.setEditableIndex({ index: indexOrder.index }));\n dispatch(Widget.slice.actions.setEditableWidgetId({ uniqid }));\n }\n }}>\n <DisplayWidget\n width={width}\n widget={widgetWrapper.widget}\n inplace={inplace}\n isComponentVisible={isComponentVisible || isBusy || isActive ? true : false}\n mode={mode}\n onClick={onClick}\n />\n <WidgetInplaceWrapper uniqid={uniqid} mode={mode} />\n <WidgetLayer uniqid={uniqid} mode={mode} />\n <WidgetState name={widgetWrapper.widget.name} uniqid={widgetWrapper.widget.uniqid} inplace={inplace} />\n </div>\n );\n }\n\n return (\n <div\n style={{ flex: 1, display: 'flex', minWidth: width !== undefined ? width : '100%' }}\n onClick={registerEditor}>\n <DisplayWidget\n widget={widgetWrapper.widget}\n isComponentVisible={false}\n inplace={inplace}\n mode={mode}\n width={width}\n onClick={onClick}\n />\n <WidgetLayer uniqid={uniqid} mode={mode} />\n <WidgetState name={widgetWrapper.widget.name} uniqid={widgetWrapper.widget.uniqid} inplace={inplace} />\n </div>\n );\n};\n\nexport default WidgetWrapperCore;\n","import styled from 'styled-components';\n\nexport const CSSSquareWidgetWrapper = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n gap: 10px;\n justify-content: center;\n`;\n\nexport const CSSSquareWidget = styled.div<{ available: boolean }>`\n border: 1px solid ${(props) => props.theme.color.grey2};\n border-radius: 8px;\n cursor: pointer;\n padding: 12px;\n position: relative;\n opacity: ${(props) => (props.available ? '1' : '.4')};\n pointer-events: ${(props) => (props.available ? 'all' : 'none')};\n\n .show-on-hover {\n position: absolute;\n inset: 0;\n border-radius: 8px;\n justify-content: center;\n align-items: center;\n display: flex;\n opacity: 0;\n background-color: #ffffffe6;\n }\n\n &:hover {\n .show-on-hover {\n opacity: 1;\n }\n }\n`;\n\nexport const CSSWidgetButton = styled.div<{ open: boolean }>`\n border: 2px solid ${(props) => props.theme.color.primary};\n height: ${(props) => (props.open ? '320' : '54')}px;\n border-radius: 8px;\n display: flex;\n justify-content: top;\n flex-direction: column;\n transition: height 0.4s;\n overflow: hidden;\n flex-direction: column;\n`;\n\nexport const CSSWrapWidgetWrapper = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: center;\n gap: 10px;\n`;\n\nexport const CSSWrapTitle = styled.div`\n min-height: 50px;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n color: ${(props) => props.theme.color.primary};\n`;\n\nexport const CSSWrapWidget = styled.button<{ open: boolean; index: number }>`\n height: 72px;\n display: flex;\n justify-content: center;\n align-items: center;\n width: 40%;\n border: 1px solid ${(props) => props.theme.color.grey2};\n border-radius: 8px;\n transition: opacity 0.4s ease ${(props) => props.index * 40}ms;\n opacity: ${(props) => (props.open ? 1 : 0)};\n`;\n","import React from 'react';\nimport { useIntl } from 'react-intl';\n\nimport { WidgetDefinitionProps, WidgetKeys, WidgetWrapperProps } from 'jamespot-user-api';\n\nimport JRCore from 'App';\nimport { JRCModalProps } from 'jamespot-react-components';\nimport { Widget } from 'jamespot-front-business';\nimport { getBuilderWidgets } from '../namespace';\nimport {\n CSSSquareWidget,\n CSSSquareWidgetWrapper,\n CSSWidgetButton,\n CSSWrapTitle,\n CSSWrapWidget,\n CSSWrapWidgetWrapper,\n} from './WidgetList.style';\n\nconst JRCButton = JRCore.registry.getLazyComponent('Button');\nconst JRCModal = JRCore.registry.getLazyComponent('Modal');\n\ntype WidgetListMode = 'button' | 'list' | 'gallery' | 'custom' | 'article';\n\n/*\n Widget Builder\n*/\nexport const WidgetList = ({\n mode,\n children,\n namespace = 'default',\n onChange,\n}: {\n mode?: WidgetListMode;\n children?: any;\n namespace?: string;\n onChange: (widget: WidgetWrapperProps) => void;\n}) => {\n const [isOpen, setOpen] = React.useState<boolean>(false);\n const widgets = getBuilderWidgets(namespace);\n const intl = useIntl();\n\n const args: JRCModalProps = {\n open: isOpen,\n title: 'widget builder',\n showIconClose: true,\n portalId: 'react-modal',\n isFullHeight: true,\n closeHandler: () => setOpen(false),\n };\n\n const onClick = (name: WidgetKeys) => {\n onChange(Widget.factory(name));\n setOpen(false);\n };\n\n return (\n <>\n <JRCModal {...args}>\n <CSSSquareWidgetWrapper>\n {widgets.map((widget, index: number) => {\n return (\n <CSSSquareWidget\n key={index}\n onClick={() => onClick(widget.name)}\n available={widget.available}>\n <img src={widget.img} />\n <div className=\"show-on-hover\">{intl.formatMessage({ id: widget.label })}</div>\n </CSSSquareWidget>\n );\n })}\n </CSSSquareWidgetWrapper>\n </JRCModal>\n {mode === 'custom' && children ? <div onClick={() => setOpen(true)}>{children}</div> : <></>}\n {mode === 'button' ? (\n <JRCButton onClick={() => setOpen(true)} variant={'outlined'} minWidth={'100%'}>\n {intl.formatMessage({ id: 'WIDGET_Add_Widget' })}\n </JRCButton>\n ) : (\n <></>\n )}\n {mode === 'gallery' ? (\n <CSSSquareWidgetWrapper>\n {widgets.map((widget, index: number) => {\n return (\n <CSSSquareWidget\n key={index}\n onClick={() => onClick(widget.name)}\n available={widget.available}>\n <img src={widget.img} />\n <div className=\"show-on-hover\">{intl.formatMessage({ id: widget.label })}</div>\n </CSSSquareWidget>\n );\n })}\n </CSSSquareWidgetWrapper>\n ) : (\n <></>\n )}\n {mode === 'article' ? <WidgetModeArticle widgets={widgets} onClick={onClick} /> : <></>}\n </>\n );\n};\n\nconst WidgetModeArticle = ({\n widgets,\n onClick,\n}: {\n widgets: WidgetDefinitionProps[];\n onClick: (name: WidgetKeys) => void;\n}) => {\n const [open, isOpen] = React.useState(false);\n const intl = useIntl();\n return (\n <>\n <CSSWidgetButton open={open}>\n <CSSWrapTitle onClick={() => isOpen(!open)}>\n {intl.formatMessage({ id: 'WIDGET_Add_Widget' })}\n </CSSWrapTitle>\n <CSSWrapWidgetWrapper>\n {widgets.map((widget, index) => {\n return (\n <CSSWrapWidget\n key={widget.name}\n open={open}\n index={index}\n onClick={() => onClick(widget.name)}>\n {intl.formatMessage({ id: widget.label })}\n </CSSWrapWidget>\n );\n })}\n </CSSWrapWidgetWrapper>\n </CSSWidgetButton>\n </>\n );\n};\n","import { Widget } from 'jamespot-front-business';\nimport { WidgetDefinitionProps } from 'jamespot-user-api';\n\nexport function getBuilderWidgets(namespace: string): WidgetDefinitionProps[] {\n switch (namespace) {\n case 'widget-article-image':\n return [\n Widget.definition(Widget.const.WIDGET_ARTICLE_TITLE),\n Widget.definition(Widget.const.WIDGET_ARTICLE_BUTTON),\n ];\n default:\n return [\n Widget.definition(Widget.const.WIDGET_ARTICLE_TITLE),\n Widget.definition(Widget.const.WIDGET_ARTICLE_TEXT),\n Widget.definition(Widget.const.WIDGET_ARTICLE_IMAGE),\n Widget.definition(Widget.const.WIDGET_ARTICLE_BUTTON),\n Widget.definition(Widget.const.WIDGET_ARTICLE_GALLERY),\n Widget.definition(Widget.const.WIDGET_ARTICLE_ATTACHMENT),\n ];\n }\n}\n","import styled from 'styled-components';\nimport { EDITOR_MENU_WIDTH, EDITOR_WIDTH } from './const';\n\nconst INPUT_HEIGHT = 50;\nconst RADIUS = 8;\n\nexport const CSSEditorComponentWrapper = styled.div`\n margin-bottom: 24px;\n`;\n\nexport const CSSEditorComponentLabel = styled.div`\n margin-bottom: 4px;\n`;\n\nexport const CSSEditorPortal = styled.div<{ on: boolean }>`\n position: absolute;\n background-color: ${(props) => (props.on ? 'rgba(0,0,0,.1)' : 'transparent')};\n inset: 0;\n pointer-events: ${(props) => (props.on ? 'all' : 'none')};\n flex: 1;\n display: flex;\n overflow: hidden;\n`;\n\nexport const CSSEditorHeader = styled.div`\n flex-direction: row;\n display: flex;\n min-height: 60px;\n border-bottom: 1px solid ${(props) => props.theme.color.grey2};\n`;\n\nexport const CSSEditorAction = styled.div`\n width: 60px;\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nexport const CSSEditorLabel = styled.div`\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nexport const CSSEditor = styled.div<{ visible: boolean }>`\n position: absolute;\n top: 90px;\n right: ${(props) => (props.visible ? '0' : '-1000')}px;\n width: ${EDITOR_WIDTH}px;\n bottom: 0;\n display: flex;\n background-color: ${(props) => props.theme.color.white};\n flex-direction: row;\n transition: all 0.4s;\n box-shadow: -1px 1px 10px 0px rgb(0 0 0 / 20%);\n`;\n\nexport const CSSEditorContent = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n padding: 12px;\n overflow: auto;\n`;\n\nexport const CSSEditorMenu = styled.div`\n width: ${EDITOR_MENU_WIDTH}px;\n padding-top: 60px;\n display: flex;\n flex-direction: column;\n border-right: 1px solid ${(props) => props.theme.color.grey2};\n`;\n\nexport const CSSEditorMenuButton = styled.button<{ on?: boolean }>`\n border-radius: 4px;\n cursor: pointer;\n height: 42px;\n margin: 4px;\n width: 42px;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: ${(props) => (props.on ? props.theme.color.grey1 : props.theme.color.white)};\n &:hover {\n background-color: ${(props) => props.theme.color.grey1};\n }\n`;\n\nexport const CSSInputWrapper = styled.div`\n display: flex;\n border: 1px solid ${(props) => props.theme.color.grey1};\n border-radius: ${RADIUS}px;\n margin-bottom: 24px;\n input {\n width: 100%;\n border: 0;\n height: ${INPUT_HEIGHT}px;\n margin: 0;\n }\n`;\n\nexport const CSSEditorWidget = styled.div`\n display: flex;\n flex-direction: row;\n padding: 12px;\n background-color: ${(props) => props.theme.color.grey0};\n border-radius: 8px;\n margin-bottom: 4px;\n`;\n\nexport const CSSEditorWidgetLabel = styled.div`\n display: flex;\n flex: 1;\n align-items: center;\n`;\n\nexport const CSSEditorWidgetOption = styled.div`\n width: 40px;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nexport const CSSEditorLayer = styled.div`\n flex-direction: row;\n display: flex;\n align-items: center;\n`;\n\nexport const CSSEditorLayerTitle = styled.div`\n flex: 1;\n display: flex;\n align-items: center;\n`;\n","export const EDITOR_TOP = 90;\nexport const EDITOR_WIDTH = 440;\nexport const EDITOR_MENU_WIDTH = 50;\n","import React from 'react';\n\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { JRCButton, JRCIcon } from 'jamespot-react-components';\n\nimport { CSSEditorAction, CSSEditorHeader, CSSEditorLabel, CSSEditorMenuButton } from './style';\nimport { WidgetEditor, EditorsRootState } from 'jamespot-front-business';\n\n/*\n Editor popup (center part)\n*/\nexport const EditorPopup = ({ uniqid }: { uniqid: string }) => {\n const dispatch = useDispatch();\n const editor = useSelector((state: EditorsRootState) => WidgetEditor.selectors.selectEditor(state, uniqid));\n\n const onClick = () => {\n dispatch(WidgetEditor.slice.actions.flushEditorPopup({ uniqid }));\n };\n\n const onSave = () => {\n dispatch(WidgetEditor.slice.actions.flushEditorPopup({ uniqid }));\n };\n\n if (editor && editor.popup && editor.view) {\n return (\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column', backgroundColor: 'white', marginTop: 90 }}>\n <CSSEditorHeader>\n <CSSEditorAction />\n <CSSEditorLabel>Popup</CSSEditorLabel>\n <CSSEditorAction>\n <CSSEditorMenuButton onClick={onClick}>\n <JRCIcon name=\"icon-times\" color=\"grey2\" />\n </CSSEditorMenuButton>\n </CSSEditorAction>\n </CSSEditorHeader>\n <div style={{ flex: 1, display: 'flex' }}>{editor.view}</div>\n <CSSEditorHeader>\n <JRCButton onClick={onSave}>Save</JRCButton>\n </CSSEditorHeader>\n </div>\n );\n }\n\n return <></>;\n};\n","import React from 'react';\n\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { WidgetEditor, Widget } from 'jamespot-front-business';\n\nimport JRCore from 'App';\n\nimport { CombinedWidgetContent, WidgetsRootState, WidgetStateProps } from 'jamespot-user-api';\n\nconst JRCWidgetArticleTitleEditor = JRCore.registry.getLazyComponent('WidgetArticleTitleEditor');\nconst JRCWidgetArticleImageEditor = JRCore.registry.getLazyComponent('WidgetArticleImageEditor');\nconst JRCWidgetArticleTextEditor = JRCore.registry.getLazyComponent('WidgetArticleTextEditor');\nconst JRCWidgetArticleGalleryEditor = JRCore.registry.getLazyComponent('WidgetArticleGalleryEditor');\nconst JRCWidgetArticleButtonEditor = JRCore.registry.getLazyComponent('WidgetArticleButtonEditor');\nconst JRCWidgetArticleAttachmentEditor = JRCore.registry.getLazyComponent('WidgetArticleAttachmentEditor');\n\n/*\n Editor Factory\n*/\nexport const Editor = ({ uniqid }: { uniqid: string }) => {\n const dispatch = useDispatch();\n const token = useSelector(Widget.selectors.selectToken);\n const widgetWrapper = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid));\n\n const onSave = (content: CombinedWidgetContent) => {\n /*\n Update widget & Flush editor\n */\n if (widgetWrapper) {\n dispatch(Widget.slice.actions.updateWidget({ uniqid, content }));\n }\n\n dispatch(WidgetEditor.slice.actions.flushEditor({ uniqid }));\n };\n\n const onChange = (content: CombinedWidgetContent, override?: boolean) =>\n dispatch(Widget.slice.actions.updateWidget({ uniqid, content, override }));\n\n const onStateChange = (states: WidgetStateProps, id?: string) => {\n /*\n Set widget state (busy, loading, initialized)\n */\n if (id !== undefined) {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid: id, ...states }));\n } else {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, ...states }));\n }\n };\n\n const onOpen = (view: React.ReactElement) => {\n /*\n Register popup (central)\n */\n dispatch(WidgetEditor.slice.actions.registerEditorPopup({ uniqid, view }));\n };\n\n switch (widgetWrapper?.widget.name) {\n default:\n return <>cannot display editor</>;\n case Widget.const.WIDGET_ARTICLE_BUTTON:\n return (\n <JRCWidgetArticleButtonEditor\n content={widgetWrapper.widget.content}\n onChange={onChange}\n onSave={onSave}\n onStateChange={onStateChange}\n />\n );\n case Widget.const.WIDGET_ARTICLE_ATTACHMENT:\n return (\n <JRCWidgetArticleAttachmentEditor\n token={token}\n content={widgetWrapper.widget.content}\n onChange={onChange}\n onSave={onSave}\n onStateChange={onStateChange}\n onOpen={onOpen}\n />\n );\n case Widget.const.WIDGET_ARTICLE_GALLERY:\n return (\n <JRCWidgetArticleGalleryEditor\n token={token}\n content={widgetWrapper.widget.content}\n onChange={onChange}\n onSave={onSave}\n onStateChange={onStateChange}\n />\n );\n case Widget.const.WIDGET_ARTICLE_TEXT:\n return (\n <JRCWidgetArticleTextEditor\n onChange={onChange}\n onSave={onSave}\n content={widgetWrapper.widget.content}\n />\n );\n case Widget.const.WIDGET_ARTICLE_IMAGE:\n return (\n <JRCWidgetArticleImageEditor\n content={widgetWrapper.widget.content}\n token={token}\n onChange={onChange}\n onSave={onSave}\n onStateChange={onStateChange}\n />\n );\n case Widget.const.WIDGET_ARTICLE_TITLE:\n return (\n <JRCWidgetArticleTitleEditor\n onChange={onChange}\n onSave={onSave}\n content={widgetWrapper.widget.content}\n onOpen={onOpen}\n />\n );\n }\n};\n","import React from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { WidgetEditor, Widget } from 'jamespot-front-business';\n\nimport { WidgetKeys, WidgetsRootState } from 'jamespot-user-api';\nimport { useIntl } from 'react-intl';\nimport { CSSEditorWidget, CSSEditorWidgetLabel, CSSEditorWidgetOption } from './style';\nimport { BETA_JRCDragAndDrop, JRCIcon } from 'jamespot-react-components';\nimport { WidgetList } from 'registry/coreComponents';\n\n/*\n Editor widgets (widgets)\n*/\nexport const EditorTabWidgets = ({ uniqid }: { uniqid: string; namespace: string }) => {\n const dispatch = useDispatch();\n const intl = useIntl();\n const content = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidgetContent(state, uniqid));\n\n const onClick = (uniqid: string, name: WidgetKeys) => {\n /*\n Register Editor\n */\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name }));\n };\n\n return (\n <div style={{ flex: 1 }}>\n <Layers uniqid={uniqid} />\n {content && content.widgets ? (\n content.widgets.map((widgetWrapper, index: number) => {\n const def = Widget.definition(widgetWrapper.widget.name);\n return (\n <div key={index}>\n <CSSEditorWidget>\n <CSSEditorWidgetLabel\n onClick={() => onClick(widgetWrapper.widget.uniqid, widgetWrapper.widget.name)}>\n {intl.formatMessage({ id: def.label })}\n </CSSEditorWidgetLabel>\n <CSSEditorWidgetOption\n onClick={() => {\n if (content.widgets) {\n dispatch(\n Widget.slice.actions.updateWidget({\n uniqid,\n content: {\n ...content,\n widgets: [\n ...content.widgets.filter((_, n: number) => n !== index),\n ],\n },\n }),\n );\n }\n }}>\n <JRCIcon name={'icon-trash'} />\n </CSSEditorWidgetOption>\n </CSSEditorWidget>\n </div>\n );\n })\n ) : (\n <></>\n )}\n </div>\n );\n};\n\nconst Layers = ({ uniqid }: { uniqid: string }) => {\n const dispatch = useDispatch();\n const layers = useSelector((state: WidgetsRootState) => state.widgets.ids[uniqid].widget.layers, shallowEqual);\n\n //const flushEditor = () => dispatch(WidgetEditor.slice.actions.flushEditor({ uniqid }));\n\n return (\n <>\n <BETA_JRCDragAndDrop\n onDrag={() => {\n //console.log(dragIndex, hoverIndex)\n }}\n renderEl={(layer, index) => {\n return <EditorWidgetLayer uniqid={layer} key={index} />;\n }}\n elms={layers ? layers : []}\n />\n <WidgetList\n namespace={'default'}\n onChange={(widget) => {\n dispatch(Widget.slice.actions.registerLayer({ uniqid, widget }));\n }}\n mode={'button'}\n />\n </>\n );\n};\n\nconst EditorWidgetLayerLock = ({ uniqid }: { uniqid: string }) => {\n const dispatch = useDispatch();\n const layer = useSelector((state: WidgetsRootState) => state.widgets.layers[uniqid]);\n return (\n <div\n onClick={() => {\n dispatch(Widget.slice.actions.updateLayer({ uniqid, props: { locked: !layer.locked } }));\n }}>\n <JRCIcon name={layer.locked ? 'icon-lock' : 'icon-unlock'} />\n </div>\n );\n};\n\nconst EditorWidgetLayerVisibility = ({ uniqid }: { uniqid: string }) => {\n const dispatch = useDispatch();\n const layer = useSelector((state: WidgetsRootState) => state.widgets.layers[uniqid]);\n return (\n <div\n onClick={() => {\n dispatch(Widget.slice.actions.updateLayer({ uniqid, props: { visible: !layer.visible } }));\n }}>\n <JRCIcon name={layer.visible ? 'icon-eye' : 'icon-eye-slash'} />\n </div>\n );\n};\n\nconst EditorWidgetLayerFlush = ({ uniqid, layerId }: { uniqid: string; layerId: string }) => {\n const dispatch = useDispatch();\n return (\n <div\n onClick={() => {\n dispatch(Widget.slice.actions.flushLayer({ uniqid, layerId }));\n }}>\n <JRCIcon name={'icon-trash'} />\n </div>\n );\n};\n\nconst EditorWidgetLayer = ({ uniqid }: { uniqid: string }) => {\n const layer = useSelector((state: WidgetsRootState) => state.widgets.layers[uniqid]);\n return (\n <>\n {layer.title}\n {layer.widgets.map((widget, index) => {\n const def = Widget.definition(widget.widget.name);\n\n return (\n <div style={{ flexDirection: 'row', display: 'flex' }} key={index}>\n <div style={{ flex: 1, alignItems: 'center' }}>{def.label}</div>\n <EditorWidgetLayerLock uniqid={uniqid} />\n <EditorWidgetLayerVisibility uniqid={uniqid} />\n <EditorWidgetLayerFlush uniqid={widget.widget.uniqid} layerId={layer.uniqid} />\n </div>\n );\n })}\n </>\n );\n};\n","import React from 'react';\n\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport JRCore from 'App';\n\nconst JRCButton = JRCore.registry.getLazyComponent('Button');\n\nimport { useIntl } from 'react-intl';\nimport { WidgetEditor, Widget } from 'jamespot-front-business';\nimport { useForm } from 'react-hook-form';\nimport { JRCInputText } from 'jamespot-react-components';\nimport { WidgetsRootState } from 'jamespot-user-api';\n\n/*\n Editor tab wrapper (this is all the properties available on a widget wrapper)\n*/\nexport const EditorTabWrapper = ({ uniqid }: { uniqid: string }) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const wrapper = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid));\n const [title, setTitle] = React.useState<string | undefined>(wrapper?.title);\n\n const onClick = () => {\n if (title !== undefined) {\n /*\n Update editor\n */\n dispatch(Widget.slice.actions.updateWidgetWrapper({ uniqid, title }));\n /*\n Flush editor\n */\n dispatch(WidgetEditor.slice.actions.flushEditor({ uniqid }));\n }\n };\n\n const { control, watch } = useForm({\n defaultValues: { text: title ?? '' },\n criteriaMode: 'all',\n });\n\n React.useEffect(() => {\n const subscription = watch((data: any) => {\n setTitle(data.text);\n });\n return () => subscription.unsubscribe();\n }, [watch]);\n\n return wrapper ? (\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column' }}>\n <JRCInputText\n name={'text'}\n control={control}\n placeholder={intl.formatMessage({ id: 'EDITOR_Widget_Wrapper_Title' })}></JRCInputText>\n <JRCButton onClick={onClick} variant={'outlined'} minWidth={'100%'}>\n {intl.formatMessage({ id: 'EDITOR_Save_Widget' })}\n </JRCButton>\n </div>\n ) : (\n <>No wrapper</>\n );\n};\n","import React from 'react';\n\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { Editor } from './Editor';\n\nimport JRCore from 'App';\n\nconst JRCIcon = JRCore.registry.getLazyComponent('Icon');\n\nimport {\n CSSEditor,\n CSSEditorAction,\n CSSEditorContent,\n CSSEditorHeader,\n CSSEditorLabel,\n CSSEditorMenu,\n CSSEditorMenuButton,\n} from './style';\nimport { EDITOR_WIDTH } from './const';\n\nimport { useIntl } from 'react-intl';\nimport { WidgetEditor, EditorsRootState, Widget } from 'jamespot-front-business';\nimport { EditorTabWidgets } from './EditorTabWidgets';\nimport { EditorTabWrapper } from './EditorTabWrapper';\nimport { WidgetsRootState } from 'jamespot-user-api';\n\n/*\n Editor wrapper (right part)\n*/\nexport const EditorWrapper = ({ uniqid }: { uniqid: string }) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const editor = useSelector((state: EditorsRootState) => WidgetEditor.selectors.selectEditor(state, uniqid));\n\n const def = Widget.definition(editor?.name);\n\n const [visible, isVisibile] = React.useState<boolean>(false);\n const [tab, setTab] = React.useState<string>('default');\n\n const onClose = () => {\n dispatch(WidgetEditor.slice.actions.flushEditor({ uniqid }));\n };\n\n React.useEffect(() => {\n setTimeout(() => {\n isVisibile(true);\n }, 0);\n });\n\n return editor ? (\n <div style={{ width: EDITOR_WIDTH, position: 'relative' }}>\n <CSSEditor visible={visible}>\n <CSSEditorMenu>\n {def.panel.useWrapper ? (\n <CSSEditorMenuButton on={tab === 'wrapper'} onClick={() => setTab('wrapper')}>\n <JRCIcon name=\"icon-font\" color=\"grey2\" />\n </CSSEditorMenuButton>\n ) : (\n <></>\n )}\n {def.panel.useEditor ? (\n <CSSEditorMenuButton on={tab === 'default'} onClick={() => setTab('default')}>\n <JRCIcon name=\"icon-pen\" color=\"grey2\" />\n </CSSEditorMenuButton>\n ) : (\n <></>\n )}\n {def.panel.useWidgets ? (\n <EditorConditonalTab uniqid={uniqid}>\n <CSSEditorMenuButton on={tab === 'widgets'} onClick={() => setTab('widgets')}>\n <JRCIcon name=\"icon-sliders\" color=\"grey2\" />\n </CSSEditorMenuButton>\n </EditorConditonalTab>\n ) : (\n <></>\n )}\n </CSSEditorMenu>\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column' }}>\n <CSSEditorHeader>\n <EditorPositionOption uniqid={uniqid} position={editor.position}></EditorPositionOption>\n <CSSEditorLabel>{intl.formatMessage({ id: def.label })}</CSSEditorLabel>\n <CSSEditorAction>\n <CSSEditorMenuButton onClick={onClose}>\n <JRCIcon name=\"icon-times\" color=\"grey2\" />\n </CSSEditorMenuButton>\n </CSSEditorAction>\n </CSSEditorHeader>\n <CSSEditorContent>\n {tab === 'default' && def.panel.useEditor ? <Editor uniqid={editor.uniqid} /> : <></>}\n {tab === 'wrapper' && def.panel.useWrapper ? (\n <EditorTabWrapper uniqid={editor.uniqid} />\n ) : (\n <></>\n )}\n {tab === 'widgets' && def.panel.useWidgets ? (\n <EditorTabWidgets uniqid={uniqid} namespace={def.name} />\n ) : (\n <></>\n )}\n </CSSEditorContent>\n </div>\n </CSSEditor>\n {editor?.popup ? (\n <div style={{ position: 'absolute', inset: 0, backgroundColor: '#000', opacity: '.7' }}></div>\n ) : (\n <></>\n )}\n </div>\n ) : (\n <></>\n );\n};\n\nconst EditorPositionOption = ({ uniqid, position }: { uniqid: string; position: 'left' | 'right' }) => {\n const dispatch = useDispatch();\n\n const onClick = () => {\n dispatch(\n WidgetEditor.slice.actions.setEditorPosition({ uniqid, position: position === 'left' ? 'right' : 'left' }),\n );\n };\n\n return (\n <CSSEditorAction>\n <CSSEditorMenuButton onClick={onClick}>\n <JRCIcon name={position === 'left' ? 'icon-angle-right' : 'icon-angle-left'} color=\"grey2\" />\n </CSSEditorMenuButton>\n </CSSEditorAction>\n );\n};\n\nconst EditorConditonalTab = ({ uniqid, children }: { uniqid: string; children: React.ReactElement }) => {\n const widgetState = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidgetState(state, uniqid));\n\n if (widgetState?.initialized) {\n return children;\n }\n\n return <></>;\n};\n","import React from 'react';\n\nimport { useSelector } from 'react-redux';\n\nimport { EDITOR_TOP, EDITOR_WIDTH } from './const';\nimport { EditorPopup } from './EditorPopup';\nimport { EditorWrapper } from './EditorWrapper';\nimport { CSSEditorPortal } from './style';\nimport { WidgetEditor } from 'jamespot-front-business';\n\nimport styled from 'styled-components';\n\nexport const CSSEditorPortalWrapper = styled.div`\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 100;\n`;\n\nexport const CSSEditorPortalPopupWrapper = styled.div<{ on: boolean }>`\n flex: 1;\n display: flex;\n margintop: ${EDITOR_TOP}px;\n pointer-events: ${(props) => (props.on ? 'all' : 'none')};\n`;\n\nexport const CSSEditorPortalRow = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n pointer-events: none;\n`;\n\nexport const CSSEditorPortalFreeSpace = styled.div`\n width: ${EDITOR_WIDTH}px;\n pointer-events: none;\n`;\n\n/*\n Editors wrapper (tamplate)\n*/\nexport const EditorsPortal = () => {\n const editors = useSelector(WidgetEditor.selectors.selectEditors);\n return (\n <CSSEditorPortalWrapper>\n {editors.map((editor, index: number) => {\n if (editor.position === 'left') {\n return (\n <CSSEditorPortal on={false} key={index}>\n <CSSEditorPortalRow>\n <EditorWrapper uniqid={editor.uniqid}></EditorWrapper>\n <CSSEditorPortalPopupWrapper on={editor.popup !== undefined}>\n <EditorPopup uniqid={editor.uniqid} />\n </CSSEditorPortalPopupWrapper>\n <CSSEditorPortalFreeSpace />\n </CSSEditorPortalRow>\n </CSSEditorPortal>\n );\n }\n\n return (\n <CSSEditorPortal on={false} key={index}>\n <CSSEditorPortalRow>\n <CSSEditorPortalFreeSpace />\n <CSSEditorPortalPopupWrapper on={editor.popup !== undefined}>\n <EditorPopup uniqid={editor.uniqid} />\n </CSSEditorPortalPopupWrapper>\n <EditorWrapper uniqid={editor.uniqid}></EditorWrapper>\n </CSSEditorPortalRow>\n </CSSEditorPortal>\n );\n })}\n </CSSEditorPortalWrapper>\n );\n};\n"],"names":["FormElm","props","stretch","FieldsetWrapper","DisplayForm","ref","formRef","configuration","defaultValues","useDisplay","fields","type","useForm","criteriaMode","handleSubmit","control","reset","formFn","current","scrollTo","onSubmit","map","Input","conf","key","name","dataCy","readOnly","extraInputs","buttons","Empty","Container","registry","getLazyComponent","AppColumn","MainColumn","TwoColLayout","extensionRoute","routes","description","mode","intl","useIntl","pathname","useLocation","ROUTES_ARRAY","Object","values","activeTab","setActiveTab","tabs","tab","label","formatMessage","id","href","path","group","undefined","activeRoute","find","route","fallback","Outlet","JRCLoader","WidgetState","uniqid","inplace","state","useSelector","selectors","selectWidgetState","def","definition","loading","style","position","inset","backgroundColor","display","flex","justifyContent","alignItems","hover","initialized","src","img","JRCWidgetArticleButton","JRCWidgetArticleGallery","JRCWidgetArticleAttachment","JRCWidgetArticleImage","JRCWidgetArticleTitle","JRCWidgetArticleText","DisplayWidget","widget","width","isComponentVisible","onClick","dispatch","useDispatch","token","selectToken","onChange","content","override","slice","actions","updateWidget","onStateChange","states","setWidgetState","const","WIDGET_ARTICLE_BUTTON","WIDGET_ARTICLE_GALLERY","WIDGET_ARTICLE_ATTACHMENT","WIDGET_ARTICLE_IMAGE","WIDGET_ARTICLE_TITLE","WIDGET_ARTICLE_TEXT","Uploader","accept","multiple","JRCFormFile","WidgetInplaceUpload","initialFiles","allowAutoOpening","isActive","widgets","currentEditableWidgetId","shallowEqual","uploadRef","fileUploadStep","setFileUploadStep","fileCount","setFileCount","fileResponses","setFileResponses","fileResponse","click","mounted","JRCWidgetEmptyInplace","url","height","overflow","onUploadStart","count","prevCount","onUploadSuccess","prevStep","prevFileResponses","apiFileToWidgetFile","CSSUploadFileWrapper","WidgetInplaceWrapper","widgetWrapper","selectWidget","flushAllEditor","registerEditor","galleryFiles","files","marginTop","length","fs","Array","isArray","forEach","file","CSSWidgetLayer","opacity","pointerEvents","WidgetLayer","layers","ids","layer","index","Layer","LayerWidget","layerId","visible","locked","top","y","left","x","DraggableHandler","onMouseUp","updateLayer","BETA_JRCDoubleClick","onDoubleTap","children","mouseIsDown","setMouseDown","mouse","setMouse","start","setStart","child","setChild","handleMouseMove","event","dx","clientX","dy","clientY","handleMouseUp","document","addEventListener","removeEventListener","onMouseDown","nativeEvent","WidgetWrapperCore","isBusy","busy","indexOrder","editableMap","setIsComponentVisible","registerWidget","setEditableWidgetId","openingType","openingTypeLink","window","open","target","minWidth","setEditableIndex","CSSSquareWidgetWrapper","CSSSquareWidget","theme","color","grey2","available","CSSWidgetButton","primary","CSSWrapWidgetWrapper","CSSWrapTitle","CSSWrapWidget","JRCButton","JRCModal","WidgetList","namespace","isOpen","setOpen","getBuilderWidgets","args","title","showIconClose","portalId","isFullHeight","closeHandler","factory","className","variant","WidgetModeArticle","CSSEditorPortal","on","CSSEditorHeader","CSSEditorAction","CSSEditorLabel","CSSEditor","white","CSSEditorContent","CSSEditorMenu","CSSEditorMenuButton","grey1","CSSEditorWidget","grey0","CSSEditorWidgetLabel","CSSEditorWidgetOption","EditorPopup","editor","selectEditor","popup","view","flexDirection","flushEditorPopup","JRCIcon","JRCWidgetArticleTitleEditor","JRCWidgetArticleImageEditor","JRCWidgetArticleTextEditor","JRCWidgetArticleGalleryEditor","JRCWidgetArticleButtonEditor","JRCWidgetArticleAttachmentEditor","Editor","onSave","flushEditor","onOpen","registerEditorPopup","EditorTabWidgets","selectWidgetContent","Layers","filter","_","n","BETA_JRCDragAndDrop","onDrag","renderEl","EditorWidgetLayer","elms","registerLayer","EditorWidgetLayerLock","EditorWidgetLayerVisibility","EditorWidgetLayerFlush","flushLayer","EditorTabWrapper","wrapper","setTitle","watch","text","subscription","data","unsubscribe","JRCInputText","placeholder","updateWidgetWrapper","EditorWrapper","isVisibile","setTab","setTimeout","panel","useWrapper","useEditor","useWidgets","EditorConditonalTab","EditorPositionOption","setEditorPosition","widgetState","CSSEditorPortalWrapper","CSSEditorPortalPopupWrapper","CSSEditorPortalRow","CSSEditorPortalFreeSpace","EditorsPortal","editors","selectEditors"],"sourceRoot":""}
|