jamespot-react-core 1.1.141 → 1.1.142
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/624.bundle.js +322 -0
- package/build/624.bundle.js.map +1 -0
- package/build/app.bundle.js +3206 -3100
- package/build/app.bundle.js.map +1 -1
- package/build/src/components/CommentsBloc.d.ts +4 -0
- package/build/src/components/widgets/Widget.d.ts +6 -1
- package/build/src/components/widgets/WidgetList/WidgetList.d.ts +1 -1
- package/build/src/components/widgets/WidgetList/WidgetList.style.d.ts +5 -0
- package/build/src/components/widgets/WidgetWrapperCore.d.ts +9 -3
- package/build/src/components/widgets/wrapper/JRCWidgetCheckListWrapper.d.ts +17 -0
- package/build/src/registry/core-component-list.d.ts +1 -0
- package/build/src/registry/coreComponents.d.ts +7 -6
- package/build/src/registry/ext-component-list.d.ts +2 -1
- package/build/src/utils/types.d.ts +3 -4
- package/package.json +4 -4
- package/build/39.bundle.js +0 -282
- package/build/39.bundle.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"624.bundle.js","mappings":"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","sources":["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/widgets/wrapper/JRCWidgetApiWrapper.tsx","webpack://ReactCore/./src/components/widgets/components/WidgetUploader.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleAttachmentWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleButtonWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleGalleryWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleImageWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleSliderWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleTextWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleTitleWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetCheckListWrapper.tsx","webpack://ReactCore/./src/components/widgets/Widget.tsx","webpack://ReactCore/./src/components/widgets/WidgetLayer/WidgetLayer.style.tsx","webpack://ReactCore/./src/components/widgets/WidgetLayer/WidgetLayer.tsx","webpack://ReactCore/./src/components/widgets/WidgetState.tsx","webpack://ReactCore/./src/components/widgets/WidgetWrapperCore.tsx","webpack://ReactCore/./src/components/CommentsBloc.tsx","webpack://ReactCore/./src/components/Empty.tsx","webpack://ReactCore/./src/components/TwoColLayout.tsx","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","webpack://ReactCore/./src/hooks/useAI.ts","webpack://ReactCore/./src/components/tinymce/extension/AIModal.tsx","webpack://ReactCore/./src/components/tinymce/JRCInputTinyMCEWithExt.tsx","webpack://ReactCore/./src/components/tinymce/JRCInputTinyMCEWithExtRaw.tsx","webpack://ReactCore/./src/displayer/DisplayForm.component.tsx"],"sourcesContent":["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 &:hover {\n background-color: ${(props) => props.theme.color.grey0};\n }\n`;\n\nexport const CSSWrapWidget = styled.button<{ open: boolean; index: number; full?: boolean }>`\n height: 72px;\n display: flex;\n align-items: center;\n padding: 0 10px;\n gap: 10px;\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 img {\n width: 40px;\n }\n ${(props) => props.full && `flex: 1`}\n`;\n\nexport const Flex = styled.div<{ direction: 'row' | 'column'; gap?: number }>`\n display: flex;\n flex-direction: ${(props) => (props.direction === 'row' ? 'row' : 'column')};\n align-items: ${(props) => (props.direction === 'row' ? 'center' : 'flex-start')};\n justify-content: ${(props) => (props.direction === 'row' ? 'flex-start' : 'center')};\n flex: 1;\n ${(props) => props.gap && `gap:${props.gap}px`}\n`;\n","import React from 'react';\nimport { FormattedMessage, useIntl } from 'react-intl';\n\nimport { WidgetDefinitionProps, WidgetKeys, WidgetWrapperProps } from 'jamespot-user-api';\n\nimport JRCore from 'App';\nimport { Widget } from 'jamespot-front-business';\nimport { JRCModalLayoutProps } from 'jamespot-react-components';\nimport { getBuilderWidgets } from '../namespace';\nimport {\n CSSSquareWidget,\n CSSSquareWidgetWrapper,\n CSSWidgetButton,\n CSSWrapTitle,\n CSSWrapWidget,\n CSSWrapWidgetWrapper,\n Flex,\n} from './WidgetList.style';\n\nconst JRCButton = JRCore.registry.getLazyComponent('Button');\nconst JRCModalLayout = JRCore.registry.getLazyComponent('ModalLayout');\nconst JRCModalContent = JRCore.registry.getLazyComponent('ModalContent');\nconst JRCTooltip = JRCore.registry.getLazyComponent('Tooltip');\nconst JRCIconButton = JRCore.registry.getLazyComponent('IconButton');\n\ntype WidgetListMode = 'button' | 'list' | 'gallery' | 'custom' | 'article' | 'comment';\n\n/*\n Widget Builder\n*/\nexport const WidgetList = ({\n mode,\n view,\n children,\n namespace = 'default',\n onChange,\n}: {\n mode?: WidgetListMode;\n view?: string;\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: JRCModalLayoutProps = {\n open: isOpen,\n portalId: 'react-modal',\n variant: 'full-height',\n closeHandler: () => setOpen(false),\n };\n\n const onClick = (name: WidgetKeys) => {\n onChange(Widget.factory(name));\n setOpen(false);\n };\n return (\n <>\n <JRCModalLayout {...args}>\n <JRCModalContent\n onClickIconClose={args.closeHandler}\n buttons={\n mode === 'comment'\n ? [\n {\n children: <FormattedMessage id=\"GLOBAL_Close\" />,\n color: 'cancel',\n clickHandler: () => setOpen(false),\n },\n ]\n : undefined\n }\n title=\"widget builder\">\n {mode === 'comment' ? (\n <CSSWrapWidgetWrapper>\n {widgets.map((widget, index) => (\n <CSSWrapWidget\n key={widget.name}\n open={true}\n full\n index={index}\n onClick={() => onClick(widget.name)}>\n <Flex direction={'row'} gap={12}>\n <img src={widget.img} />\n <Flex direction={'column'}>\n <h3>{intl.formatMessage({ id: widget.label })}</h3>\n <p>{intl.formatMessage({ id: widget.description })}</p>\n </Flex>\n </Flex>\n </CSSWrapWidget>\n ))}\n </CSSWrapWidgetWrapper>\n ) : (\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 </JRCModalContent>\n </JRCModalLayout>\n {mode === 'custom' && children ? <div onClick={() => setOpen(true)}>{children}</div> : <></>}\n {mode === 'button' && view === 'edit' ? (\n <JRCButton onClick={() => setOpen(true)} variant={'outlined'} minWidth={'100%'}>\n {intl.formatMessage({ id: 'WIDGET_Add_Widget' })}\n </JRCButton>\n ) : (\n <></>\n )}\n {mode === 'gallery' && view === 'edit' ? (\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' && view === 'edit' ? <WidgetModeArticle widgets={widgets} onClick={onClick} /> : <></>}\n {mode === 'comment' && view === 'edit' ? (\n <WidgetModeComment\n onClick={() => {\n setOpen(true);\n }}\n />\n ) : (\n <></>\n )}\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 <img src={widget.img} />\n {intl.formatMessage({ id: widget.label })}\n </CSSWrapWidget>\n );\n })}\n </CSSWrapWidgetWrapper>\n </CSSWidgetButton>\n </>\n );\n};\n\nconst WidgetModeComment = ({ onClick }: { onClick: () => void }) => {\n const intl = useIntl();\n return (\n <>\n <JRCTooltip description={intl.formatMessage({ id: 'COMMENT_Add_Widget' })}>\n <JRCIconButton\n bg={'grey1'}\n bgHover={'grey2'}\n color={'grey5'}\n iconSize={14}\n onClick={() => {\n onClick();\n }}\n icon={'icon-fs-puzzle'}\n />\n </JRCTooltip>\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 [Widget.definition('widget-article-title'), Widget.definition('widget-article-button')];\n case 'comment':\n return [Widget.definition('widget-check-list')];\n default:\n return [\n Widget.definition('widget-article-title'),\n Widget.definition('widget-article-text'),\n Widget.definition('widget-article-image'),\n Widget.definition('widget-article-button'),\n Widget.definition('widget-article-slider'),\n Widget.definition('widget-article-attachment'),\n ];\n }\n}\n","import React from 'react';\n\nimport { WidgetApiType, WidgetDisplayMode } from 'jamespot-user-api';\n\nimport { JRCWidgetApi } from 'jamespot-react-components';\n\nimport styled from 'styled-components';\n\nconst Wrapper = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n min-height: 60px;\n align-items: center;\n`;\n\nfunction isAValidURL(url: string | undefined) {\n if (typeof url === 'string') {\n return url.length !== 0 && url.startsWith('https://');\n }\n\n return false;\n}\n\nexport const JRCWidgetApiWrapper = ({\n widget,\n}: {\n widget: WidgetApiType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const { url, keys, order, orderBy } = widget.content;\n const [data, setData] = React.useState<Array<Record<string, string>>>([]);\n\n React.useEffect(() => {\n if (url && isAValidURL(url)) {\n fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n .then((resp) => resp.json())\n .then((response) => {\n if (!Array.isArray(response.result)) {\n console.warn('resposne must be an array');\n }\n\n setData(response.result);\n });\n } else {\n console.warn(`${url} is not a valid url`);\n }\n }, [url]);\n\n return (\n <Wrapper>\n <JRCWidgetApi data={data} keys={keys ?? []} order={order ?? ''} orderBy={orderBy ?? 'asc'} />\n </Wrapper>\n );\n};\n","import React from 'react';\n\nimport { useSelector } from 'react-redux';\n\nimport { jFileLittle } from 'jamespot-user-api';\n\nimport { Widget } from 'jamespot-front-business';\nimport styled from 'styled-components';\nimport { JRCInputFileAdvancedRaw } from 'jamespot-react-components';\n\nexport const CSSHidden = styled.div`\n width: 0;\n height: 0;\n overflow: hidden;\n`;\n\ntype InplaceUploaderProps = {\n children: React.ReactNode;\n initialFiles: jFileLittle[];\n initialClick?: boolean;\n multiple: boolean;\n accept: string;\n onUploadStart: () => void;\n onUploadEnd: () => void;\n onUploadSuccess: (files: jFileLittle[]) => void;\n};\n\nexport const WidgetUploader = ({\n children,\n initialFiles,\n initialClick,\n multiple,\n accept,\n onUploadStart,\n onUploadEnd,\n onUploadSuccess,\n}: InplaceUploaderProps) => {\n const uploadRef = React.useRef<HTMLInputElement>(null);\n const token = useSelector(Widget.selectors.selectToken);\n const [total, setTotal] = React.useState<number>(0);\n const [files, setFiles] = React.useState<jFileLittle[]>(initialFiles);\n\n React.useEffect(() => {\n if (initialClick) {\n uploadRef.current?.click();\n }\n }, [initialClick]);\n\n React.useEffect(() => {\n if (initialFiles.length !== files.length) {\n setFiles(initialFiles);\n }\n }, [initialFiles]);\n\n React.useEffect(() => {\n onUploadSuccess(files);\n }, [files]);\n\n React.useEffect(() => {\n if (total === 0) {\n onUploadEnd();\n }\n }, [total]);\n\n return (\n <>\n <div\n onClick={() => {\n if (initialClick) {\n uploadRef.current?.click();\n }\n }}>\n {children}\n </div>\n <CSSHidden>\n <JRCInputFileAdvancedRaw\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={(totalFile) => {\n if (totalFile !== undefined) {\n setTotal((prevTotal) => prevTotal + totalFile);\n }\n if (typeof onUploadStart === 'function' && totalFile !== 0) {\n onUploadStart();\n }\n }}\n onUploadSuccess={(fileResponse) => {\n if (fileResponse === undefined) {\n return;\n }\n setTotal((prevTotal) => (prevTotal !== undefined ? prevTotal - 1 : 0));\n setFiles((prevFiles) => (multiple ? [...prevFiles, fileResponse] : [fileResponse]));\n }}\n />\n </CSSHidden>\n </>\n );\n};\n","import React from 'react';\n\nimport styled from 'styled-components';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { useIntl } from 'react-intl';\nimport jamespot, {\n jFileLittle,\n WidgetArticleAttachmentType,\n WidgetDisplayMode,\n WidgetsRootState,\n WidgetArticleAttachmentContent,\n} from 'jamespot-user-api';\n\nimport JRCore from 'App';\nimport { Application, Toast, Widget, updateWidgetContent } from 'jamespot-front-business';\nimport { JRCWidgetEmptyInplace, JRCFileViewerOpenWithOptionsType } from 'jamespot-react-components';\nimport { WidgetUploader } from '../components/WidgetUploader';\n\nconst WidgetAttachment = JRCore.registry.getLazyComponent('WidgetAttachment');\n\nconst FileViewer = JRCore.registry.getLazyComponent('FileViewer');\n\n// DUPLICATE FROM WEDOC\nexport const wedocWindowOpen = (idFile: number, hash: string, target?: '_blank') => {\n window.open(getWedocFilePath(idFile, hash), target);\n};\n\n// DUPLICATE FROM WEDOC\nexport function getWedocFilePath(idFile: number, hash: string) {\n return `/ng/rr/file/${idFile}/${hash}`;\n}\n\nexport const CSSWrapper = styled.div`\n flex: 1;\n`;\n\nexport const JRCWidgetArticleAttachmentWrapper = ({\n widget,\n inplace,\n mode,\n}: {\n widget: WidgetArticleAttachmentType;\n inplace?: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const intl = useIntl();\n const { uniqid } = widget;\n const { files } = widget.content;\n const dispatch = useDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n\n const onError = (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n };\n\n React.useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, mounted: true }));\n }, []);\n\n const onlyOffice = useSelector((state: any) => Application.selectors.selectById(state, 'OnlyOfficeHook'));\n\n const onClick = (file: jFileLittle | undefined) => {\n if (!file) {\n return;\n }\n jamespot.object\n .getAccessHash(`fileArticle/${file.id}`)\n .then((response) => {\n if (response.result === '') {\n throw new Error('result empty');\n }\n const hash = response.result;\n wedocWindowOpen(file.id, hash);\n })\n .catch(() => {\n dispatch(Toast.actions.error({ label: 'WIDGET_Open_Failed' }, 6000));\n });\n };\n\n const option = [\n {\n label: intl.formatMessage({ id: 'WIDGET_Open_With_Wedoc' }),\n onClick: onClick,\n },\n ];\n\n const openWithOptions: JRCFileViewerOpenWithOptionsType = onlyOffice\n ? [\n {\n condition: (f) =>\n [\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n ].includes(f.mimetype),\n options: option,\n },\n ]\n : [];\n\n return files !== undefined ? (\n <CSSWrapper>\n {mode !== 'view' ? (\n <WidgetAttachment files={files} onClick={() => undefined} onError={onError} />\n ) : (\n <FileViewer files={files} openWithOptions={openWithOptions}>\n {(open) => {\n return <WidgetAttachment files={files} onClick={(idFile) => open(idFile)} onError={onError} />;\n }}\n </FileViewer>\n )}\n {inplace && mode !== 'view' && (\n <WidgetUploader\n initialFiles={files}\n initialClick={isActive}\n multiple={true}\n accept={'*'}\n onUploadSuccess={(files) => {\n if (Array.isArray(files)) {\n dispatch(updateWidgetContent<WidgetArticleAttachmentContent>(uniqid, { files }));\n }\n }}\n onUploadStart={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: true }));\n }}\n onUploadEnd={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: false }));\n }}>\n {mode === 'edit' ? (\n <JRCWidgetEmptyInplace\n label={'WIDGET_Article_Attachment_Empty_Label'}\n description={'WIDGET_Article_Attachment_Empty_Description'}\n url={'widget-article-image-placeholder.png'}\n onClick={() => undefined}\n />\n ) : (\n <></>\n )}\n </WidgetUploader>\n )}\n </CSSWrapper>\n ) : (\n <></>\n );\n};\n","import React from 'react';\n\nimport styled from 'styled-components';\n\nimport { WidgetArticleButtonType, WidgetDisplayMode } from 'jamespot-user-api';\n\nimport { JRCWidgetButton } from 'jamespot-react-components';\nimport { useDispatch } from 'react-redux';\nimport { WidgetEditor } from 'jamespot-front-business';\n\nconst CSSButtonWrapper = styled.div`\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n`;\n\nconst CSSPointer = styled.div<{ clickable: boolean }>`\n pointer-events: ${(props) => (props.clickable ? 'all' : 'none')};\n cursor: pointer;\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n`;\n\nexport const JRCWidgetArticleButtonWrapper = ({\n widget,\n mode,\n}: {\n widget: WidgetArticleButtonType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const dispatch = useDispatch();\n const { uniqid } = widget;\n const { text, url, target, color, backgroundColor, buttonSize, borderRadius, variant } = widget.content;\n\n return (\n <CSSButtonWrapper\n onClick={() => {\n if (mode === 'edit') {\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: widget.name }));\n }\n }}>\n <CSSPointer clickable={mode !== 'edit'}>\n <JRCWidgetButton\n text={text}\n url={url}\n target={target}\n color={color}\n backgroundColor={backgroundColor}\n buttonSize={buttonSize}\n borderRadius={borderRadius}\n variant={variant}\n />\n </CSSPointer>\n </CSSButtonWrapper>\n );\n};\n","import React from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\n\nimport {\n WidgetArticleGalleryContent,\n WidgetArticleGalleryType,\n WidgetDisplayMode,\n WidgetsRootState,\n} from 'jamespot-user-api';\n\nimport JRCore from 'App';\nimport { Widget, updateWidgetContent } from 'jamespot-front-business';\nimport { JRCWidgetEmptyInplace } from 'jamespot-react-components';\nimport { WidgetUploader } from '../components/WidgetUploader';\n\nconst JRCWidgetArticleGallery = JRCore.registry.getLazyComponent('WidgetArticleGallery');\n\nconst FileViewer = JRCore.registry.getLazyComponent('FileViewer');\n\nconst CSSImagePointer = styled.button`\n cursor: pointer;\n`;\n\nexport const JRCWidgetArticleGalleryWrapper = ({\n widget,\n inplace,\n mode,\n}: {\n widget: WidgetArticleGalleryType;\n inplace?: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const { uniqid } = widget;\n const { files } = widget.content;\n const dispatch = useDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n\n React.useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, mounted: true }));\n }, []);\n\n return files !== undefined ? (\n <>\n {mode === 'edit' ? (\n <JRCWidgetArticleGallery\n files={files}\n maxWidth={800}\n gap={widget.content.gap ?? '10'}\n column={widget.content.column ?? '3'}\n onClick={() => undefined}\n />\n ) : (\n <FileViewer files={files} openWithOptions={[]}>\n {(open) => {\n return (\n <CSSImagePointer>\n <JRCWidgetArticleGallery\n files={files}\n maxWidth={600}\n gap={widget.content.gap ?? '10'}\n column={widget.content.column ?? '3'}\n onClick={(idFile) => open(idFile)}\n />\n </CSSImagePointer>\n );\n }}\n </FileViewer>\n )}\n {inplace && mode === 'edit' ? (\n <WidgetUploader\n initialFiles={files}\n initialClick={isActive}\n accept={'image/png, image/jpeg, image/jpg'}\n multiple={true}\n onUploadSuccess={(files) => {\n if (Array.isArray(files)) {\n dispatch(updateWidgetContent<WidgetArticleGalleryContent>(uniqid, { files }));\n }\n }}\n onUploadStart={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: true }));\n }}\n onUploadEnd={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: false }));\n }}>\n <JRCWidgetEmptyInplace\n label={'WIDGET_Article_Gallery_Empty_Label'}\n description={'WIDGET_Article_Gallery_Empty_Description'}\n url={'widget-article-image-placeholder.png'}\n onClick={() => undefined}\n />\n </WidgetUploader>\n ) : (\n <></>\n )}\n </>\n ) : (\n <></>\n );\n};\n","import React from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport {\n WidgetArticleImageContent,\n WidgetArticleImageType,\n WidgetDisplayMode,\n WidgetsRootState,\n jFileLittle,\n} from 'jamespot-user-api';\nimport { useIntl } from 'react-intl';\nimport JRCore from 'App';\nimport { Widget, updateWidgetContent } from 'jamespot-front-business';\nimport { JRCWidgetEmptyInplace } from 'jamespot-react-components';\nimport { WidgetUploader } from '../components/WidgetUploader';\n\nconst WidgetImage = JRCore.registry.getLazyComponent('WidgetImage');\nconst FileViewer = JRCore.registry.getLazyComponent('FileViewer');\n\nimport styled from 'styled-components';\n\nconst CSSImageWrapperHover = styled.div`\n position: absolute;\n inset: 0;\n background-color: rgba(0, 0, 0, 0.4);\n pointer-event: none;\n display: flex;\n justify-content: center;\n align-items: center;\n opacity: 0;\n color: ${(props) => props.theme.color.white};\n &:hover {\n opacity: 1;\n }\n`;\n\nconst CSSImagePointer = styled.button`\n cursor: pointer;\n`;\n\nconst mockFileLittle: jFileLittle = {\n id: 0,\n type: '',\n title: '',\n uri: '',\n mimetype: 'application/octet-stream',\n mainType: '',\n dateCreation: '',\n dateModified: '',\n _url: '',\n size: 10,\n};\n\nexport const strToTimestamp = (str: string): undefined | number => {\n if (str) {\n const timestamp = Date.parse(str);\n if (!isNaN(timestamp)) {\n return new Date(timestamp).getTime() / 1000;\n }\n }\n return;\n};\n\nexport const JRCWidgetArticleImageWrapper = ({\n widget,\n width,\n inplace,\n mode,\n}: {\n widget: WidgetArticleImageType;\n inplace?: boolean;\n mode?: WidgetDisplayMode;\n width?: number;\n}) => {\n const { uniqid } = widget;\n const { file, useFilter } = widget.content;\n const dispatch = useDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n const [uri, setUri] = React.useState<string | undefined>(undefined);\n const intl = useIntl();\n\n React.useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, mounted: true }));\n }, []);\n\n React.useEffect(() => {\n if (file) {\n setUri(\n `/imagecache/fitx1200/${file.type}/${file.id}.png?_=${\n file.dateModified ? strToTimestamp(file.dateModified) : Date.now()\n }`,\n );\n }\n }, [file]);\n\n return (\n <>\n {mode === 'edit' ? (\n uri !== undefined ? (\n <WidgetImage maxWidth={width ?? 600} uri={uri} useFilter={useFilter ?? false} />\n ) : (\n <></>\n )\n ) : (\n <FileViewer\n files={[\n {\n ...mockFileLittle,\n path: uri,\n mimetype: 'image/png',\n },\n ]}\n openWithOptions={[]}>\n {(open) => {\n return (\n <CSSImagePointer onClick={() => open(0)}>\n <WidgetImage maxWidth={width ?? 600} uri={uri} useFilter={useFilter ?? false} />\n </CSSImagePointer>\n );\n }}\n </FileViewer>\n )}\n\n {inplace && mode === 'edit' ? (\n <WidgetUploader\n initialFiles={[]}\n initialClick={isActive}\n accept={'image/png, image/jpeg, image/jpg'}\n multiple={false}\n onUploadSuccess={(files) => {\n if (Array.isArray(files) && files[0] !== undefined) {\n dispatch(updateWidgetContent<WidgetArticleImageContent>(uniqid, { file: files[0] }));\n }\n }}\n onUploadStart={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: true }));\n }}\n onUploadEnd={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: false }));\n }}>\n {file !== undefined ? (\n <CSSImageWrapperHover>\n {intl.formatMessage({ id: 'ARTICLE_Widget_Image_Change' })}\n </CSSImageWrapperHover>\n ) : (\n <JRCWidgetEmptyInplace\n label={'WIDGET_Article_Image_Empty_Label'}\n description={'WIDGET_Article_Image_Empty_Description'}\n url={'widget-article-image-placeholder.png'}\n onClick={() => undefined}\n />\n )}\n </WidgetUploader>\n ) : (\n <></>\n )}\n </>\n );\n};\n","import React from 'react';\n\nimport { WidgetArticleSliderType, WidgetDisplayMode, WidgetsRootState, jFileLittle } from 'jamespot-user-api';\nimport JRCore from 'App';\nimport styled from 'styled-components';\nimport { JRCWidgetEmptyInplace, JRCWidgetSlider } from 'jamespot-react-components';\nimport { useAppDispatch } from 'redux/store';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { shallowEqual, useSelector } from 'react-redux';\n\nconst FileViewer = JRCore.registry.getLazyComponent('FileViewer');\n\nconst Wrapper = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n min-height: 60px;\n align-items: center;\n`;\n\nconst mockFileLittle: jFileLittle = {\n id: 0,\n type: '',\n title: '',\n uri: '',\n mimetype: 'application/octet-stream',\n mainType: '',\n dateCreation: '',\n dateModified: '',\n _url: '',\n size: 10,\n};\n\nexport const strToTimestamp = (str: string): undefined | number => {\n if (str) {\n const timestamp = Date.parse(str);\n if (!isNaN(timestamp)) {\n return new Date(timestamp).getTime() / 1000;\n }\n }\n return;\n};\n\nexport const JRCWidgetArticleSliderWrapper = ({\n widget,\n mode,\n width,\n}: {\n widget: WidgetArticleSliderType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n width?: number;\n}) => {\n const { uniqid } = widget;\n const dispatch = useAppDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n const fileViewerFiles = widget.content.slides\n ? [\n ...widget.content.slides.map((slide, index) => {\n return {\n ...mockFileLittle,\n id: slide.file ? slide.file.id : index,\n mimetype: slide.file ? slide.file.mimetype : mockFileLittle.mimetype,\n path: slide.file\n ? `/imagecache/fitx1200/${slide.file.type}/${slide.file.id}.png?_=${\n slide.file.dateModified ? strToTimestamp(slide.file.dateModified) : Date.now()\n }`\n : undefined,\n };\n }),\n ]\n : [];\n\n React.useEffect(() => {\n if (isActive && mode === 'edit') {\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: widget.name }));\n }\n }, [isActive]);\n\n return (\n <Wrapper>\n <FileViewer files={fileViewerFiles} openWithOptions={[]}>\n {(open) => {\n return (\n <JRCWidgetSlider\n slides={\n widget.content.slides !== undefined\n ? [\n ...widget.content.slides.map((slide) => {\n if (slide.file) {\n return {\n ...slide,\n uri: `${J.urlBase}imagecache/fitx1200/${slide.file.type}/${\n slide.file.id\n }.png?_=${\n slide.file.dateModified\n ? strToTimestamp(slide.file.dateModified)\n : Date.now()\n }`,\n };\n } else {\n return {\n ...slide,\n uri: '',\n };\n }\n }),\n ]\n : []\n }\n maxWidth={width ?? 600}\n useDots={widget.content.useDots ?? true}\n loop={widget.content.loop ?? false}\n startAt={0}\n onClickSlide={(index) => {\n if (mode !== 'edit') {\n if (widget.content.slides) {\n const slide = widget.content.slides[index];\n if (slide && slide.file) {\n open(slide.file.id);\n }\n }\n } else {\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: widget.name }));\n }\n }}\n />\n );\n }}\n </FileViewer>\n {mode === 'edit' && Array.isArray(widget.content.slides) && widget.content.slides.length === 0 ? (\n <JRCWidgetEmptyInplace\n label={'WIDGET_Article_Slider_Empty_Label'}\n description={'WIDGET_Article_Slider_Empty_Description'}\n url={'widget-article-image-placeholder.png'}\n onClick={() => {\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid: widget.uniqid,\n name: widget.name,\n }),\n );\n }}\n />\n ) : (\n <></>\n )}\n </Wrapper>\n );\n};\n","import React from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport {\n WidgetArticleTextContent,\n WidgetArticleTextType,\n WidgetDisplayMode,\n WidgetsRootState,\n} from 'jamespot-user-api';\n\nimport { TinyMCE, Widget, updateWidgetContent } from 'jamespot-front-business';\nimport { JRCWidgetArticleText } from 'jamespot-react-components';\n\nimport styled, { useTheme } from 'styled-components';\n\nconst Wrapper = styled.div`\n min-height: 60px;\n cursor: text;\n`;\n\nexport const JRCWidgetArticleTextWrapper = ({\n widget,\n mode,\n}: {\n widget: WidgetArticleTextType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const { uniqid } = widget;\n const theme = useTheme();\n const { text, color, lineHeight, linkColor, fontSize } = widget.content;\n const dispatch = useDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n const token = useSelector(Widget.selectors.selectToken);\n const tinyMCECommonOptions = useSelector(TinyMCE.selectors.selectTinyMCECommonOptions);\n\n return (\n <Wrapper>\n <JRCWidgetArticleText\n autoFocus={isActive}\n text={text ?? ''}\n color={color ?? theme.color.black}\n lineHeight={lineHeight ?? '20'}\n linkColor={linkColor ?? theme.color.primary}\n fontSize={fontSize ?? '20'}\n token={mode === 'edit' && token !== undefined ? token : ''}\n tinyMCECommonOptions={mode === 'edit' ? tinyMCECommonOptions : undefined}\n mode={mode}\n onChange={(text) => {\n dispatch(updateWidgetContent<WidgetArticleTextContent>(uniqid, { text }));\n }}\n />\n </Wrapper>\n );\n};\n","import React from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport {\n WidgetArticleTitleContent,\n WidgetArticleTitleType,\n WidgetDisplayMode,\n WidgetsRootState,\n} from 'jamespot-user-api';\n\nimport { Widget, updateWidgetContent } from 'jamespot-front-business';\nimport { JRCWidgetArticleTitle } from 'jamespot-react-components';\n\nimport styled from 'styled-components';\n\nconst Wrapper = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n min-height: 60px;\n align-items: center;\n`;\n\nconst ToolWrapper = styled.div`\n display: flex;\n flex-direction: row;\n border-radius: 8px;\n overflow: hidden;\n margin: 4px;\n border: 1px solid ${(props) => props.theme.color.grey1};\n`;\n\nconst Tool = styled.button<{ isActive: boolean }>`\n display: flex;\n width: 40px;\n height: 40px;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n opacity: ${(props) => (props.isActive ? '1.0' : '.8')};\n background-color: ${(props) => (props.isActive ? props.theme.color.grey1 : props.theme.color.white)};\n &:hover {\n background-color: ${(props) => props.theme.color.grey1};\n }\n`;\n\nexport const JRCWidgetArticleTitleWrapper = ({\n widget,\n inplace,\n mode,\n}: {\n widget: WidgetArticleTitleType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const { uniqid } = widget;\n const { text, color, heading } = widget.content;\n const dispatch = useDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n\n return (\n <Wrapper>\n <JRCWidgetArticleTitle\n text={text}\n color={color}\n heading={heading}\n autoFocus={isActive}\n inplace={inplace}\n mode={mode}\n onChange={(text) => {\n dispatch(updateWidgetContent<WidgetArticleTitleContent>(uniqid, { text }));\n }}\n />\n {isActive && mode === 'edit' ? (\n <Toolbar\n heading={heading}\n onClick={(heading) => {\n dispatch(updateWidgetContent<WidgetArticleTitleContent>(uniqid, { heading }));\n }}\n />\n ) : (\n <></>\n )}\n </Wrapper>\n );\n};\n\nexport const Toolbar = ({ heading = 'h1', onClick }: { heading?: string; onClick: (size: string) => void }) => {\n const sizes: string[] = ['h1', 'h2', 'h3', 'h4'];\n return (\n <ToolWrapper>\n {sizes.map((sizeValue, index: number) => (\n <Tool key={index} isActive={heading === sizeValue} onClick={() => onClick(sizeValue)}>\n {sizeValue}\n </Tool>\n ))}\n </ToolWrapper>\n );\n};\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Toast, UserCurrent, Widget, updateWidgetContent } from 'jamespot-front-business';\nimport { JRCIconButton, JRCModal } from 'jamespot-react-components';\nimport { JRCWidgetCheckListEntries } from 'jamespot-react-components/build/src/components/Widgets/JRCWidgetCheckList/JRCWidgetCheckList';\nimport jamespot, {\n CombinedWidgetContent,\n WidgetCheckListContent,\n WidgetCheckListContentArr,\n WidgetCheckListContentArrForFront,\n WidgetCheckListType,\n WidgetDisplayMode,\n WidgetsRootState,\n jFileLittle,\n jUserLittle,\n} from 'jamespot-user-api';\nimport { FormattedMessage, useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\nconst WidgetCheckList = J.react.registry.getLazyComponent('WidgetCheckList');\nconst WidgetCheckListEditor = J.react.registry.getLazyComponent('WidgetCheckListEditor');\nconst Typography = J.react.registry.getLazyComponent('Typography');\n\nexport const CSSRowLinkWrapper = styled.div<{ border?: boolean }>`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n border: ${(props) => (props.border ? `1px solid ${props.theme.color.grey2}` : 'none')};\n min-height: 24px;\n border-radius: 4px;\n padding: 4px 8px;\n`;\n\nconst WidgetConfigWrapper = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n border: 1px solid ${(props) => props.theme.color.grey1};\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n padding: 4px;\n margin-bottom: 8px;\n\n div:first-child {\n margin: 0 auto;\n }\n div:last-child {\n align-self: flex-end;\n }\n`;\n\ntype JRCWidgetCheckListWrapperProps = {\n widget: WidgetCheckListType;\n commentId?: number;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n editRight: boolean;\n deleteRight: boolean;\n onRemove?: (uniqid: string) => void;\n onWidgetUpdate?: () => void;\n};\n\nexport const JRCWidgetCheckListWrapper = ({\n widget,\n commentId,\n inplace,\n mode,\n editRight,\n deleteRight,\n onRemove,\n onWidgetUpdate,\n}: JRCWidgetCheckListWrapperProps) => {\n const intl = useIntl();\n const { uniqid, content: widgetContent } = widget;\n const dispatch = useDispatch();\n\n const mountedRef = useRef(true);\n const [entries, setEntries] = useState<JRCWidgetCheckListEntries | undefined>();\n const [openUriModal, setOpenUriModal] = useState(false);\n const [isDeleteModalOpen, setDeleteModalOpen] = useState(false);\n const [currentModalID, setCurrentModalId] = useState<number | null>(null);\n const [selectValue, setSelectValue] = useState<{ label: string; value: string }>({\n label: intl.formatMessage({ id: 'COMMENT_WIDGET_CHECKLIST_Uri_Same_Page' }),\n value: '_self',\n });\n const [newUri, setNewUri] = useState<string>('');\n\n const currentUser = useSelector(UserCurrent.selectors.get);\n const items: (CombinedWidgetContent & WidgetCheckListContent) | undefined = useSelector((state: WidgetsRootState) =>\n Widget.selectors.selectWidgetContent(state, uniqid),\n );\n\n const onError = (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n };\n\n const handleItemChange = (id: number, item: WidgetCheckListContentArr) => {\n const newItems = items?.arr?.map((oldItem, index) => {\n if (index !== id) return oldItem;\n return { ...item };\n });\n const content = {\n arr: newItems,\n };\n dispatch(updateWidgetContent<WidgetCheckListContent>(uniqid, content));\n };\n\n const handleNewItem = () => {\n const newItems = [\n ...(items?.arr || []),\n { title: intl.formatMessage({ id: 'COMMENT_WIDGET_CHECKLIST_Add_New_Task' }), value: false },\n ];\n const content = {\n arr: newItems,\n };\n dispatch(updateWidgetContent<WidgetCheckListContent>(uniqid, content));\n };\n\n const handleTitleChange = (title: string) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ uniqid, title }));\n };\n\n const handleRemoveItem = (id: number) => {\n const tmp = [...(items?.arr ?? [])];\n const newItems = tmp.splice(id, 1);\n const content = {\n arr: newItems,\n };\n dispatch(updateWidgetContent<WidgetCheckListContent>(uniqid, content));\n };\n\n const handleAddUri = (id: number) => {\n setCurrentModalId(id);\n setOpenUriModal(true);\n };\n\n const handleRemoveUri = (idUri: number, idWidget: number) => {\n const content = {\n arr: [\n ...(items?.arr?.map((item, index) => {\n if (index !== idWidget) return item;\n const links = item.links?.filter((_, index) => index !== idUri);\n return { ...item, links };\n }) || []),\n ],\n };\n\n dispatch(updateWidgetContent<WidgetCheckListContent>(uniqid, content));\n };\n\n const handleCloseModal = () => {\n setOpenUriModal(false);\n setCurrentModalId(null);\n };\n\n const handleSwapItems = (content: { arr: WidgetCheckListContentArr[] }) => {\n dispatch(updateWidgetContent<WidgetCheckListContent>(uniqid, content));\n };\n\n const handleCheckItem = (id: string, index: number, items: JRCWidgetCheckListEntries) => {\n if (!commentId) return;\n\n const newItems: WidgetCheckListContentArr[] = items?.map((item) => ({\n title: item.text,\n ...(item.id && { id: item.id }),\n ...(item.links && { links: item.links }),\n ...(item.mimetype && { mimetypes: item.mimetype }),\n ...(currentUser &&\n item.checked && {\n user: {\n id: item.user?.id ?? currentUser.id,\n mainType: 'user',\n type: 'user',\n },\n }),\n ...(item.checked && { value: item.checked }),\n }));\n const content = {\n arr: newItems,\n };\n dispatch(updateWidgetContent<WidgetCheckListContent>(id, content));\n\n jamespot.widget\n .checkListRespond({\n id: commentId,\n type: 'comment',\n idUser: currentUser?.id,\n uniqid: id,\n index: index,\n })\n .then(() => {\n if (onWidgetUpdate) onWidgetUpdate();\n })\n .catch((err) => {\n onError(err.message);\n });\n };\n\n const handleRemoveWidget = () => {\n dispatch(Widget.slice.actions.flushWidget({ uniqid }));\n if (onRemove) onRemove(uniqid);\n setDeleteModalOpen(false);\n };\n\n const apiFetchFile = async (idFile: number) => {\n return jamespot.file.get<jFileLittle>(idFile).then((response) => response.result);\n };\n\n const execute = useCallback(() => {\n const fetchData = async (widget: WidgetCheckListType): Promise<WidgetCheckListContentArrForFront[]> => {\n const item = widget.content;\n\n const getInfos = item.arr?.map(async (w) => {\n let img: jFileLittle | undefined = undefined;\n if (w.id) {\n img = await apiFetchFile(w.id);\n }\n let user: jUserLittle | undefined = undefined;\n if (w.user) {\n const { result } = await jamespot.user.get<jUserLittle>(`${w.user.type}/${w.user.id}`);\n\n user = result;\n }\n return {\n id: w.id || undefined,\n text: w.title || '',\n value: w.value || false,\n ...(img && {\n uri: img._url ? img._url : '',\n mimeType: img.mimetype,\n }),\n ...(w.links && {\n links: w.links,\n }),\n ...(user && {\n user,\n }),\n };\n });\n const result = await Promise.all(getInfos || []);\n return result;\n };\n\n const mapData = async () => {\n const result = await fetchData(widget);\n return result;\n };\n\n return mapData()\n .then((res) => {\n const finalEntries = res.map((item) => {\n return {\n text: item.text ?? '',\n checked: item.value ?? false,\n links: item.links ?? [],\n user: item.user ?? undefined,\n };\n });\n setEntries(finalEntries);\n return finalEntries;\n })\n .catch((err) => {\n if (!mountedRef.current) return null;\n throw err;\n });\n }, [widgetContent]);\n\n useEffect(() => {\n execute();\n\n return () => {\n mountedRef.current = false;\n };\n }, [widgetContent]);\n\n if (mode === 'edit') {\n if (inplace) {\n return (\n <WidgetCheckListEditor\n widget={widget}\n handleTitleChange={handleTitleChange}\n handleItemChange={handleItemChange}\n handleNewItem={handleNewItem}\n handleRemoveItem={handleRemoveItem}\n handleAddUri={handleAddUri}\n handleRemoveUri={handleRemoveUri}\n handleSwapItems={handleSwapItems}\n openUriModal={openUriModal}\n handleCloseModal={handleCloseModal}\n currentModalID={currentModalID}\n selectValue={selectValue}\n setSelectValue={setSelectValue}\n newUri={newUri}\n setNewUri={setNewUri}\n />\n );\n } else {\n return null;\n }\n }\n\n return (\n <>\n {entries && (\n <div key={widget.uniqid} style={{ width: '100%' }}>\n <WidgetCheckList\n title={widget.title}\n limit={10}\n initialEntries={entries}\n onFileClick={() => {\n // we did not use the onClick function\n }}\n onNewItem={() => handleNewItem()}\n onItemCheckListChange={(index, items) => handleCheckItem(widget.uniqid, index, items)}\n />\n {editRight && (\n <WidgetConfigWrapper>\n {editRight && (\n <div>\n <Typography size=\"s\">\n {/* {intl.formatMessage({ id: 'COMMENT_WIDGET_Configure' })} */}\n </Typography>\n </div>\n )}\n {deleteRight && (\n <div>\n <JRCIconButton\n iconSize={14}\n onClick={() => setDeleteModalOpen(true)}\n icon=\"icon-trash\"\n />\n </div>\n )}\n </WidgetConfigWrapper>\n )}\n <JRCModal\n buttons={[\n {\n color: 'cancel',\n clickHandler: () => setDeleteModalOpen(false),\n children: <FormattedMessage id={'GLOBAL_Cancel'} />,\n },\n {\n color: 'danger',\n clickHandler: handleRemoveWidget,\n children: <FormattedMessage id={'GLOBAL_Delete'} />,\n },\n ]}\n open={isDeleteModalOpen}\n closeHandler={() => setDeleteModalOpen(false)}\n title={intl.formatMessage({ id: 'GLOBAL_Delete' })}>\n {intl.formatMessage({ id: 'COMMENT_WIDGET_Delete_Widget' })}\n </JRCModal>\n </div>\n )}\n </>\n );\n};\n","import React from 'react';\n\nimport { CombinedWidgetType, WidgetDisplayMode } from 'jamespot-user-api';\n\nimport { JRCWidgetApiWrapper } from './wrapper/JRCWidgetApiWrapper';\nimport { JRCWidgetArticleAttachmentWrapper } from './wrapper/JRCWidgetArticleAttachmentWrapper';\nimport { JRCWidgetArticleButtonWrapper } from './wrapper/JRCWidgetArticleButtonWrapper';\nimport { JRCWidgetArticleGalleryWrapper } from './wrapper/JRCWidgetArticleGalleryWrapper';\nimport { JRCWidgetArticleImageWrapper } from './wrapper/JRCWidgetArticleImageWrapper';\nimport { JRCWidgetArticleSliderWrapper } from './wrapper/JRCWidgetArticleSliderWrapper';\nimport { JRCWidgetArticleTextWrapper } from './wrapper/JRCWidgetArticleTextWrapper';\nimport { JRCWidgetArticleTitleWrapper } from './wrapper/JRCWidgetArticleTitleWrapper';\nimport { JRCWidgetCheckListWrapper } from './wrapper/JRCWidgetCheckListWrapper';\n\nexport const DisplayWidget = ({\n widget,\n commentId,\n width,\n inplace = false,\n mode = 'view',\n editRight,\n deleteRight,\n onWidgetUpdate,\n onRemove,\n}: {\n widget: CombinedWidgetType;\n commentId?: number;\n width?: number | undefined;\n inplace: boolean;\n mode: WidgetDisplayMode;\n editRight?: boolean;\n deleteRight?: boolean;\n onRemove?: (id: string) => void;\n onWidgetUpdate?: () => void;\n onClick: () => void;\n}) => {\n const { name } = widget;\n\n switch (name) {\n default:\n return <>cannot display widget ({name})</>;\n case 'widget-check-list':\n return (\n <JRCWidgetCheckListWrapper\n widget={widget}\n commentId={commentId}\n inplace={inplace}\n mode={mode}\n editRight={editRight ?? false}\n deleteRight={deleteRight ?? false}\n onRemove={onRemove}\n onWidgetUpdate={onWidgetUpdate}\n />\n );\n case 'widget-article-button':\n return <JRCWidgetArticleButtonWrapper widget={widget} inplace={inplace} mode={mode} />;\n case 'widget-article-gallery':\n return <JRCWidgetArticleGalleryWrapper widget={widget} inplace={inplace} mode={mode} />;\n case 'widget-article-attachment':\n return <JRCWidgetArticleAttachmentWrapper widget={widget} inplace={inplace} mode={mode} />;\n case 'widget-article-image':\n return <JRCWidgetArticleImageWrapper widget={widget} inplace={inplace} mode={mode} width={width ?? 800} />;\n case 'widget-api':\n return <JRCWidgetApiWrapper widget={widget} inplace={inplace} mode={mode} />;\n case 'widget-article-slider':\n return <JRCWidgetArticleSliderWrapper widget={widget} inplace={inplace} mode={mode} width={width ?? 800} />;\n case 'widget-article-title':\n return <JRCWidgetArticleTitleWrapper widget={widget} inplace={inplace} mode={mode} />;\n case 'widget-article-text':\n return <JRCWidgetArticleTextWrapper widget={widget} inplace={inplace} mode={mode} />;\n }\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 } 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, { useEffect } from 'react';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { WidgetDisplayMode, WidgetWrapperProps, WidgetsRootState } from 'jamespot-user-api';\nimport { DisplayWidget } from './Widget';\nimport { WidgetLayer } from './WidgetLayer/WidgetLayer';\nimport { WidgetState } from './WidgetState';\nimport { useComponentVisible } from './hooks';\n\ntype WidgetWrapperCoreProps = {\n uniqid: string;\n commentId?: number;\n widget: WidgetWrapperProps;\n inplace?: boolean;\n mode: WidgetDisplayMode;\n width?: number | undefined;\n editRight?: boolean;\n deleteRight?: boolean;\n onWidgetUpdate?: () => void;\n onRemove?: (id: string) => void;\n};\n\n/*\n This is a widget wrapper\n*/\nexport const WidgetWrapperCore = ({\n uniqid,\n commentId,\n widget,\n inplace = true,\n mode,\n width,\n editRight,\n deleteRight,\n onWidgetUpdate,\n onRemove,\n}: WidgetWrapperCoreProps) => {\n const dispatch = useDispatch();\n const widgetWrapper = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid));\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 useEffect(() => {\n if (widget) {\n /*\n Register widget\n */\n dispatch(Widget.slice.actions.registerWidget({ uniqid, widget }));\n }\n }, []);\n\n useEffect(() => {\n if (!isComponentVisible) {\n if (uniqid === currentEditableWidgetId) {\n dispatch(Widget.slice.actions.setEditableWidgetId({ uniqid: undefined }));\n }\n }\n }, [isComponentVisible]);\n\n 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 mode={mode}\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\n return (\n <div\n style={{ flex: 1, display: 'flex', minWidth: width !== undefined ? width : '100%' }}\n onClick={registerEditor}>\n <DisplayWidget\n widget={{\n ...widgetWrapper.widget,\n ...(widgetWrapper.title && {\n title: widgetWrapper.title,\n }),\n }}\n commentId={commentId}\n inplace={inplace}\n mode={mode}\n width={width}\n onClick={onClick}\n editRight={editRight}\n deleteRight={deleteRight}\n onWidgetUpdate={onWidgetUpdate}\n onRemove={onRemove}\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 { getTinyMCEMentionsQueries } from 'App';\nimport {\n Application,\n ApplicationRootState,\n Comment,\n CommentRootState,\n Faq,\n Hook,\n HookRootState,\n Model,\n Platform,\n TinyMCE,\n Toast,\n UserCurrent,\n Widget,\n} from 'jamespot-front-business';\nimport { DriveOrFilebank, JRCCommentsBloc } from 'jamespot-react-components';\nimport jamespot, {\n AddCommentParams,\n AddRemoveActionParams,\n CombinedWidgetType,\n UpdateCommentParams,\n WidgetDisplayMode,\n WidgetWrapperProps,\n jUserView,\n} from 'jamespot-user-api';\nimport { jCommentList } from 'jamespot-user-api/lib/src/types/comment';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\nimport styled, { useTheme } from 'styled-components';\nimport { WidgetList } from './widgets/WidgetList/WidgetList';\nimport WidgetWrapperCore from './widgets/WidgetWrapperCore';\n\nconst CommentsBlocWrapper = styled.div`\n display: flex;\n flex-direction: column;\n gap: 4px;\n flex: 1;\n width: 100%;\n margin-top: 10px;\n`;\n\nexport const CommentsBloc = ({ articleId }: { articleId: number }) => {\n const intl = useIntl();\n const theme = useTheme();\n const dispatch = useDispatch();\n\n const [token, setToken] = useState<string>();\n const [loading, setLoading] = useState(false);\n const [widgets, setWidgets] = useState<WidgetWrapperProps<CombinedWidgetType>[]>([]);\n\n const [tokenLoading, setTokenLoading] = useState(false);\n\n const currentUser = useSelector(UserCurrent.selectors.get);\n const widgetIds = useSelector(Widget.selectors.selectWidgets);\n const tinyMCECommonOptions = useSelector(TinyMCE.selectors.selectTinyMCECommonOptions);\n const models = useSelector(Model.selectors.selectAll);\n const { _displayComment } = useSelector(Faq.selectors.selectFaqConfig);\n const platformConfig = useSelector(Platform.selectors.selectPlatformConfig);\n const onlyOffice = useSelector((state: any) => Application.selectors.selectById(state, 'OnlyOfficeHook'));\n const commentsList = useSelector((state: CommentRootState) => Comment.selectors.commentList(state, articleId));\n const driveHook = useSelector((state: HookRootState) => Hook.selectors.selectHook(state, 'DriveHook'));\n const fileBank = useSelector((state: ApplicationRootState) =>\n Application.selectors.selectById(state, 'FileBankHook'),\n );\n const widgetHook = useSelector((state: HookRootState) => Hook.selectors.selectHook(state, 'WidgetHook'));\n\n const displayComments = _displayComment === '1';\n\n const onError = (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n };\n\n const onComment = useCallback(\n async (params: Pick<AddCommentParams, 'content' | 'alertAuthor' | 'sendAlert'>) => {\n if (token) {\n setLoading(true);\n const finalWidget: WidgetWrapperProps[] = Object.keys(widgetIds)\n .map((id) => {\n if (widgets?.some((w) => w.widget.uniqid === id)) {\n return widgetIds[id];\n }\n return null;\n })\n .filter((w): w is WidgetWrapperProps => w !== null);\n\n try {\n // TODO : passer par le store pour avoir une réactivité directe après ajout (confirmée ensuite par retour RT)\n // -> état intermédiaire PENDING à gérer.\n await jamespot.article\n .addComment({\n ...params,\n widgets: finalWidget,\n token,\n idArticle: articleId,\n })\n .then(() => {\n widgets.forEach((widget) => {\n dispatch(Widget.slice.actions.flushWidget({ uniqid: widget.widget.uniqid }));\n });\n setWidgets([]);\n });\n fetchToken();\n } catch (e: any) {\n onError(e.errorMsg);\n } finally {\n setLoading(false);\n }\n }\n },\n [articleId, token, widgetIds],\n );\n\n const onCommentUpdate = async (args: UpdateCommentParams) => {\n const commentToUpdate: jCommentList | undefined = commentsList?.list.find((item) => item.id === args.idComment);\n if (!commentToUpdate) return;\n return jamespot.article\n .updateComment({\n idComment: args.idComment,\n description: args.description ?? commentToUpdate.description ?? undefined,\n token: args.token,\n widgets: args.widgets,\n })\n .then(() => {\n dispatch(Comment.actions.fetchComments({ idArticle: articleId }));\n fetchToken();\n })\n .catch((e) => {\n onError(e.errorMsg);\n });\n };\n\n const onCommentDelete = async (idComment: number) => {\n // TODO : passer par le store pour avoir une réactivité directe après suppression (confirmée ensuite par retour RT)\n // -> état intermédiaire PENDING à gérer.\n jamespot.article.deleteComment(idComment).catch(onError);\n };\n\n const onWidgetUpdate = () => {\n dispatch(Comment.actions.fetchComments({ idArticle: articleId }));\n fetchToken();\n };\n\n const fetchToken = useCallback(() => {\n if (!token && !tokenLoading) {\n setTokenLoading(true);\n jamespot.network\n .token()\n .then((res) => {\n setToken(res.result);\n setTokenLoading(false);\n })\n .catch((e) => {\n onError(e.errorMsg);\n });\n }\n }, [token, tokenLoading]);\n\n useEffect(() => {\n fetchToken();\n }, [fetchToken]);\n\n const handleSocialAdd = ({\n targetId,\n targetType,\n type,\n }: AddRemoveActionParams): ReturnType<typeof jamespot.socialAction.add> =>\n jamespot.socialAction.add({\n targetType,\n targetId,\n type,\n });\n\n const handleSocialRemove = ({\n targetId,\n targetType,\n type,\n }: AddRemoveActionParams): ReturnType<typeof jamespot.socialAction.remove> =>\n jamespot.socialAction.remove({\n targetType,\n targetId,\n type,\n });\n\n const handleSocialGetUsers = ({\n targetId,\n targetType,\n type,\n }: AddRemoveActionParams): ReturnType<typeof jamespot.socialAction.getUsers<jUserView>> =>\n jamespot.socialAction.getUsers({\n targetType,\n targetId,\n type,\n });\n const handleFetchUser = (id: string): ReturnType<typeof jamespot.user.get<jUserView>> => jamespot.user.get(id);\n\n const handleFetchUserField = (id: number, type: 'popover'): ReturnType<typeof jamespot.user.getFields> =>\n jamespot.user.getFields(id, type);\n\n return (\n <>\n {tinyMCECommonOptions && displayComments && (\n <>\n <CommentsBlocWrapper>\n <JRCCommentsBloc\n loading={loading}\n token={token}\n comments={commentsList?.list}\n onComment={onComment}\n onCommentUpdate={onCommentUpdate}\n onCommentDelete={onCommentDelete}\n isWidgetActive={\n !!(\n widgetHook?.isActive &&\n widgetHook?.create &&\n widgetHook?.autorize?.includes('comment')\n )\n }\n widgetListComponent={\n <WidgetList\n mode={'comment'}\n namespace={'comment'}\n onChange={(widget) => {\n setWidgets([...widgets, widget]);\n dispatch(\n Widget.slice.actions.registerWidget({\n uniqid: widget.widget.uniqid,\n widget: widget,\n }),\n );\n }}\n view={'edit'}\n />\n }\n newWidgetsWrapperComponent={\n <>\n {widgets.map(\n (widget) =>\n widget && (\n <div key={widget.widget.uniqid}>\n <WidgetWrapperCore\n uniqid={widget.widget.uniqid}\n widget={widget}\n inplace\n mode={'edit'}\n />\n </div>\n ),\n )}\n </>\n }\n existingWidgetsWrapperComponent={(\n content: WidgetWrapperProps<CombinedWidgetType>[],\n mode: WidgetDisplayMode,\n inplace = true,\n idComment: number,\n editRight = false,\n deleteRight = false,\n ) => (\n <>\n {content?.map(\n (widget) =>\n widget && (\n <div key={widget.widget.uniqid}>\n <WidgetWrapperCore\n uniqid={widget.widget.uniqid}\n commentId={idComment}\n widget={widget}\n inplace={inplace}\n mode={mode}\n editRight={editRight}\n deleteRight={deleteRight}\n onWidgetUpdate={onWidgetUpdate}\n onRemove={(id) => {\n jamespot.widget\n .removeWidget({\n id: idComment,\n type: 'comment',\n uniqid: id,\n })\n .then(() => {\n dispatch(\n Comment.actions.fetchComments({\n idArticle: articleId,\n }),\n );\n fetchToken();\n })\n .catch((e) => {\n onError(e.errorMsg);\n });\n }}\n />\n </div>\n ),\n )}\n </>\n )}\n currentUser={currentUser}\n tinyMCEConfig={{\n commonOptions: tinyMCECommonOptions,\n mentionsQueries: getTinyMCEMentionsQueries(models, theme, onError),\n }}\n onError={onError}\n highlightFields={platformConfig.userHighlightFields}\n userAccountStatus={platformConfig.userAccountStatus}\n userModel={models.find((m) => m.type === 'user')}\n isWedocActive={!!onlyOffice}\n onGetHashError={(message?: string) =>\n dispatch(\n Toast.actions.error({\n label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }),\n }),\n )\n }\n activeDrives={\n // TODO : cf. https://github.com/Jamespot/jamespot-react-extensions/pull/487/\n J.debug.UploadFromDrives\n ? ([\n ...(fileBank && driveHook ? ['fileBank'] : []),\n ...Hook.utils.buildDrivesArrayFromObject(driveHook?.drives),\n ] as DriveOrFilebank[])\n : []\n }\n socialActionAdd={handleSocialAdd}\n deleteFile={async (articleId) => {\n if (!token) return;\n await jamespot.file.deleteFile(articleId, 'attachment', token);\n }}\n fetchUser={handleFetchUser}\n fetchUserFields={handleFetchUserField}\n fetchSocialActionUserList={handleSocialGetUsers}\n removeLike={handleSocialRemove}\n />\n </CommentsBlocWrapper>\n </>\n )}\n </>\n );\n};\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 absolutePath?: boolean;\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: tab.absolutePath ? tab.path : `/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, ROUTES_ARRAY]);\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 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<{ isActive: boolean }>`\n position: absolute;\n background-color: ${(props) => (props.isActive ? 'rgba(0,0,0,.1)' : 'transparent')};\n inset: 0;\n pointer-events: ${(props) => (props.isActive ? '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 margin-bottom: 12px;\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<{ isActive?: 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.isActive ? 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, updateWidgetContent } from 'jamespot-front-business';\n\nimport JRCore from 'App';\n\nimport {\n CombinedWidgetContent,\n WidgetApiContent,\n WidgetArticleAttachmentContent,\n WidgetArticleButtonContent,\n WidgetArticleGalleryContent,\n WidgetArticleImageContent,\n WidgetArticleSliderContent,\n WidgetArticleTextContent,\n WidgetArticleTitleContent,\n WidgetsRootState,\n WidgetStateProps,\n} from 'jamespot-user-api';\n\nconst WidgetArticleTitleEditor = JRCore.registry.getLazyComponent('WidgetArticleTitleEditor');\nconst WidgetArticleTextEditor = JRCore.registry.getLazyComponent('WidgetArticleTextEditor');\nconst WidgetArticleGalleryEditor = JRCore.registry.getLazyComponent('WidgetArticleGalleryEditor');\nconst WidgetArticleAttachmentEditor = JRCore.registry.getLazyComponent('WidgetArticleAttachmentEditor');\nconst WidgetArticleSliderEditor = JRCore.registry.getLazyComponent('WidgetArticleSliderEditor');\n\nconst WidgetArticleImageEditor = JRCore.registry.getLazyComponent('WidgetArticleImageEditor');\nconst WidgetButtonEditor = JRCore.registry.getLazyComponent('WidgetButtonEditor');\nconst WidgetApiEditor = JRCore.registry.getLazyComponent('WidgetApiEditor');\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: Partial<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 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-article-button':\n return (\n <>\n <WidgetButtonEditor\n {...widgetWrapper.widget.content}\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleButtonContent>(uniqid, content, false));\n }}\n onSave={() => onSave({})}\n />\n </>\n );\n case 'widget-article-attachment':\n return (\n <WidgetArticleAttachmentEditor\n token={token}\n content={widgetWrapper.widget.content}\n onChange={(content) =>\n dispatch(updateWidgetContent<WidgetArticleAttachmentContent>(uniqid, content, false))\n }\n onSave={onSave}\n onStateChange={onStateChange}\n onOpen={onOpen}\n />\n );\n case 'widget-article-gallery':\n return (\n <WidgetArticleGalleryEditor\n token={token}\n content={widgetWrapper.widget.content}\n onChange={(content) =>\n dispatch(updateWidgetContent<WidgetArticleGalleryContent>(uniqid, content, false))\n }\n onSave={onSave}\n onStateChange={onStateChange}\n />\n );\n case 'widget-article-text':\n return (\n <WidgetArticleTextEditor\n onChange={(content) =>\n dispatch(updateWidgetContent<WidgetArticleTextContent>(uniqid, content, false))\n }\n onSave={onSave}\n content={widgetWrapper.widget.content}\n />\n );\n case 'widget-article-image':\n return (\n <WidgetArticleImageEditor\n content={widgetWrapper.widget.content}\n token={token}\n onChange={(content) =>\n dispatch(updateWidgetContent<WidgetArticleImageContent>(uniqid, content, false))\n }\n onSave={onSave}\n onStateChange={onStateChange}\n />\n );\n case 'widget-api':\n return (\n <WidgetApiEditor\n onChange={(content) => dispatch(updateWidgetContent<WidgetApiContent>(uniqid, content, false))}\n provider={async (url: string) => {\n return fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n .then((resp) => resp.json())\n .then((response) => {\n return response.result;\n });\n }}\n initialUrl={widgetWrapper.widget.content.url ?? ''}\n order={widgetWrapper.widget.content.order ?? ''}\n orderBy={widgetWrapper.widget.content.orderBy ?? 'asc'}\n />\n );\n case 'widget-article-title':\n return (\n <WidgetArticleTitleEditor\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleTitleContent>(uniqid, content, false));\n }}\n onSave={onSave}\n content={widgetWrapper.widget.content}\n onOpen={onOpen}\n />\n );\n case 'widget-article-slider':\n return token !== undefined ? (\n <WidgetArticleSliderEditor\n slides={widgetWrapper.widget.content.slides ?? []}\n loop={widgetWrapper.widget.content.loop ?? false}\n useDots={widgetWrapper.widget.content.useDots ?? true}\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleSliderContent>(uniqid, content, false));\n }}\n token={token}\n onSave={onSave}\n />\n ) : (\n <>Token is mandatory</>\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 isActive={tab === 'wrapper'} onClick={() => setTab('wrapper')}>\n <JRCIcon name=\"icon-font\" color=\"grey2\" />\n </CSSEditorMenuButton>\n ) : (\n <></>\n )}\n {def.panel.useEditor ? (\n <CSSEditorMenuButton isActive={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 isActive={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<{ isActive: boolean }>`\n flex: 1;\n display: flex;\n margintop: ${EDITOR_TOP}px;\n pointer-events: ${(props) => (props.isActive ? '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 isActive={false} key={index}>\n <CSSEditorPortalRow>\n <EditorWrapper uniqid={editor.uniqid}></EditorWrapper>\n <CSSEditorPortalPopupWrapper isActive={editor.popup !== undefined}>\n <EditorPopup uniqid={editor.uniqid} />\n </CSSEditorPortalPopupWrapper>\n <CSSEditorPortalFreeSpace />\n </CSSEditorPortalRow>\n </CSSEditorPortal>\n );\n }\n\n return (\n <CSSEditorPortal isActive={false} key={index}>\n <CSSEditorPortalRow>\n <CSSEditorPortalFreeSpace />\n <CSSEditorPortalPopupWrapper isActive={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","import { JTinyMCEExtensionsBuilders } from 'jamespot-react-components';\nimport { useCallback, useMemo, useState } from 'react';\nimport { useIntl } from 'react-intl';\n\nexport type JiaTextEnhanceQuery = {\n resolve: (value: string | PromiseLike<string>) => void;\n reject: (reason?: any) => void;\n capability: 'develop' | 'summarize' | 'tldr';\n text: string;\n};\n\nexport const useAI = () => {\n const [query, setQuery] = useState<JiaTextEnhanceQuery | undefined>();\n const intl = useIntl();\n\n const PrepareAndSetQuery = useCallback((query: JiaTextEnhanceQuery) => {\n const internalResolve = (value: string | PromiseLike<string>) => {\n query.resolve(value);\n setQuery(undefined);\n };\n const internalReject = (value: any) => {\n query.reject(value);\n setQuery(undefined);\n };\n setQuery({\n ...query,\n reject: internalReject,\n resolve: internalResolve,\n });\n }, []);\n\n const AICapabilities = useMemo(() => {\n return {\n develop: (text: string) => {\n return new Promise<string>((resolve, reject) => {\n PrepareAndSetQuery({\n reject,\n resolve,\n text,\n capability: 'develop',\n });\n });\n },\n summarize: (text: string) => {\n return new Promise<string>((resolve, reject) => {\n PrepareAndSetQuery({\n reject,\n resolve,\n text,\n capability: 'summarize',\n });\n });\n },\n tldr: (text: string) => {\n return new Promise<string>((resolve, reject) => {\n PrepareAndSetQuery({\n reject,\n resolve,\n text,\n capability: 'tldr',\n });\n });\n },\n };\n }, []);\n\n const ext = useMemo(() => JTinyMCEExtensionsBuilders.jia(AICapabilities, intl), []);\n\n return [query, ext] as const;\n};\n","import { JiaTextEnhanceQuery } from 'hooks/useAI';\nimport { JRCLoader, JRCModal, JRCTypography } from 'jamespot-react-components';\nimport jamespot from 'jamespot-user-api';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { useIntl } from 'react-intl';\n\nexport type AIModalProps = {\n query: JiaTextEnhanceQuery | undefined;\n};\n\ntype ResponseType = {\n response: string | undefined;\n loading: boolean;\n error: string | undefined;\n};\n\nconst loadingResponse: ResponseType = {\n response: undefined,\n loading: true,\n error: undefined,\n};\n\nexport const AIModal = ({ query }: AIModalProps) => {\n const intl = useIntl();\n const [response, setResponse] = useState<ResponseType>(loadingResponse);\n\n const sendAIRequest = useCallback((query: JiaTextEnhanceQuery) => {\n setResponse(loadingResponse);\n jamespot.jia\n .textEnhancement({ text: query.text, capacity: query.capability })\n .then((response) => {\n if (response.error) {\n setResponse({\n error: `${intl.formatMessage({ id: 'JIA_ERROR_AI_CALL' })}${\n response.errorMsg && ': ' + response.errorMsg\n }`,\n loading: false,\n response: undefined,\n });\n return;\n }\n const textResponse = response.result.text;\n setResponse({\n error: undefined,\n loading: false,\n response: textResponse,\n });\n })\n .catch((_) => {\n setResponse({\n error: intl.formatMessage({ id: 'JIA_ERROR_AI_CALL' }),\n loading: false,\n response: undefined,\n });\n });\n }, []);\n\n useEffect(() => {\n if (query && query.text.trim().length > 0) {\n sendAIRequest(query);\n }\n }, [query]);\n\n return (\n <JRCModal\n zIndex={50010}\n open={!!query}\n closeHandler={() => {\n query?.reject();\n }}\n buttons={[\n {\n children: intl.formatMessage({ id: 'GLOBAL_Try_Again' }),\n clickHandler: () => {\n query && sendAIRequest(query);\n },\n },\n {\n children: intl.formatMessage({ id: 'GLOBAL_Validation' }),\n clickHandler: () => response.response && query?.resolve(response.response),\n },\n {\n children: intl.formatMessage({ id: 'GLOBAL_Cancel' }),\n clickHandler: () => query?.reject(),\n },\n ]}>\n {response.loading && (\n <>\n <JRCLoader />\n <JRCTypography align=\"center\">{intl.formatMessage({ id: 'JIA_WAITING_WARNIG' })}</JRCTypography>\n </>\n )}\n {!response.loading && response.error && <p>{response.error}</p>}\n {!response.loading && response.response && <p>{response.response}</p>}\n </JRCModal>\n );\n};\n","import { Model, Toast } from 'jamespot-front-business';\nimport React, { useCallback, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useIntl } from 'react-intl';\nimport { useTheme } from 'styled-components';\nimport { useAI } from 'hooks/useAI';\nimport { getTinyMCEMentionsQueries } from 'App';\nimport { JRCInputTinyMCE, JRCInputTinyMCEProps } from 'jamespot-react-components';\nimport { FieldValues } from 'react-hook-form/dist/types';\nimport { AIModal } from './extension/AIModal';\nimport JRCore from 'App';\n\nexport type JRCInputTinyMCEWithExtProps<T extends FieldValues> = Omit<\n JRCInputTinyMCEProps<T>,\n 'commonOptions' | 'mentionsQueries' | 'additionalExtensions'\n>;\n\nexport const JRCInputTinyMCEWithExt = <T extends FieldValues = FieldValues>(props: JRCInputTinyMCEWithExtProps<T>) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const theme = useTheme();\n const models = useSelector(Model.selectors.selectAll);\n const [query, extAI] = useAI();\n\n const isAIActive = useMemo(() => {\n return J.hooks?.JIAHook?.isActive && J.debug['JIABETA'];\n }, []);\n\n const extArray = useMemo(() => {\n return isAIActive ? [extAI] : [];\n }, [extAI, isAIActive]);\n\n const onMentionsQueryError = useCallback((message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n }, []);\n\n const tinyMentionsQueries = useMemo(() => {\n return getTinyMCEMentionsQueries(models, theme, onMentionsQueryError);\n }, []);\n\n const commonOptions = useMemo(() => JRCore.tinymceCommonOptions, [JRCore.tinymceCommonOptions]);\n\n return (\n <>\n {commonOptions && (\n <JRCInputTinyMCE\n commonOptions={commonOptions}\n additionalExtensions={extArray}\n mentionsQueries={tinyMentionsQueries}\n {...props}\n />\n )}\n <AIModal query={query} />\n </>\n );\n};\n","import { Model, Toast } from 'jamespot-front-business';\nimport React, { useCallback, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useIntl } from 'react-intl';\nimport { useTheme } from 'styled-components';\nimport { useAI } from 'hooks/useAI';\nimport { getTinyMCEMentionsQueries } from 'App';\nimport { JRCInputTinyMCERaw, JRCInputTinyMCERawProps } from 'jamespot-react-components';\nimport { AIModal } from './extension/AIModal';\nimport JRCore from 'App';\n\nexport type JRCInputTinyMCEWithExtProps = Omit<\n JRCInputTinyMCERawProps,\n 'commonOptions' | 'mentionsQueries' | 'additionalExtensions'\n>;\n\nexport const JRCInputTinyMCEWithExtRaw = (props: JRCInputTinyMCEWithExtProps) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const theme = useTheme();\n const models = useSelector(Model.selectors.selectAll);\n const [query, extAI] = useAI();\n\n const isAIActive = useMemo(() => {\n return J.hooks?.JIAHook?.isActive && J.debug['JIABETA'];\n }, []);\n\n const extArray = useMemo(() => {\n return isAIActive ? [extAI] : [];\n }, [extAI, isAIActive]);\n\n const onMentionsQueryError = useCallback((message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n }, []);\n\n const tinyMentionsQueries = useMemo(() => {\n return getTinyMCEMentionsQueries(models, theme, onMentionsQueryError);\n }, []);\n\n const commonOptions = useMemo(() => JRCore.tinymceCommonOptions, [JRCore.tinymceCommonOptions]);\n\n return (\n <>\n {commonOptions && (\n <JRCInputTinyMCERaw\n commonOptions={commonOptions}\n additionalExtensions={extArray}\n mentionsQueries={tinyMentionsQueries}\n {...props}\n />\n )}\n <AIModal query={query} />\n </>\n );\n};\n","import * as React from 'react';\nimport { DisplayFormRef, FieldsWith } from './types';\nimport { useForm, Control, FieldValues } from 'react-hook-form';\nimport { useDisplayForm } from './useDisplay';\nimport styled, { css } from 'styled-components';\nimport { FormEventHandler, ReactNode, Ref } from 'react';\n\nconst StretchContainer = css`\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n`;\n\nconst Container = styled.div<{ stretch?: boolean }>`\n ${({ stretch }) => stretch && StretchContainer}\n`;\n\nconst Form = styled.form<{ stretch?: boolean }>`\n ${({ stretch }) => stretch && StretchContainer}\n`;\n\nconst FormElm = React.forwardRef(\n (\n props: {\n stretch?: boolean;\n onSubmit?: FormEventHandler<HTMLFormElement>;\n children: ReactNode;\n },\n ref: React.ForwardedRef<HTMLFormElement | HTMLDivElement>,\n ) => {\n return props.onSubmit ? (\n <Form stretch={props.stretch} onSubmit={props.onSubmit} ref={ref as Ref<HTMLFormElement>}>\n {props.children}\n </Form>\n ) : (\n <Container stretch={props.stretch} ref={ref as Ref<HTMLDivElement>}>\n {props.children}\n </Container>\n );\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 | HTMLDivElement>(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\n stretch={props.stretch}\n onSubmit={props.onSubmit ? handleSubmit(props.onSubmit) : undefined}\n 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"],"names":["CSSSquareWidgetWrapper","CSSSquareWidget","props","theme","color","grey2","available","CSSWidgetButton","primary","open","CSSWrapWidgetWrapper","CSSWrapTitle","grey0","CSSWrapWidget","index","full","Flex","direction","gap","JRCButton","registry","getLazyComponent","JRCModalLayout","JRCModalContent","JRCTooltip","JRCIconButton","WidgetList","mode","view","children","namespace","onChange","isOpen","setOpen","widgets","definition","getBuilderWidgets","intl","useIntl","args","portalId","variant","closeHandler","onClick","name","factory","onClickIconClose","buttons","FormattedMessage","id","clickHandler","undefined","title","map","widget","key","src","img","formatMessage","label","description","className","minWidth","WidgetModeArticle","WidgetModeComment","bg","bgHover","iconSize","icon","Wrapper","JRCWidgetApiWrapper","url","keys","order","orderBy","content","data","setData","length","startsWith","isAValidURL","fetch","method","headers","then","resp","json","response","Array","isArray","result","console","warn","JRCWidgetApi","CSSHidden","WidgetUploader","initialFiles","initialClick","multiple","accept","onUploadStart","onUploadEnd","onUploadSuccess","uploadRef","token","useSelector","selectors","selectToken","total","setTotal","files","setFiles","current","click","JRCInputFileAdvancedRaw","ref","totalFile","prevTotal","fileResponse","prevFiles","WidgetAttachment","FileViewer","CSSWrapper","JRCWidgetArticleAttachmentWrapper","inplace","uniqid","dispatch","useDispatch","isActive","state","shallowEqual","onError","message","actions","error","slice","setWidgetState","mounted","onlyOffice","selectById","option","file","getAccessHash","Error","hash","idFile","target","window","getWedocFilePath","wedocWindowOpen","catch","openWithOptions","condition","f","includes","mimetype","options","loading","JRCWidgetEmptyInplace","CSSButtonWrapper","CSSPointer","clickable","JRCWidgetArticleButtonWrapper","text","backgroundColor","buttonSize","borderRadius","registerEditor","JRCWidgetButton","JRCWidgetArticleGallery","CSSImagePointer","JRCWidgetArticleGalleryWrapper","maxWidth","column","WidgetImage","CSSImageWrapperHover","white","mockFileLittle","type","uri","mainType","dateCreation","dateModified","_url","size","JRCWidgetArticleImageWrapper","width","useFilter","setUri","str","timestamp","Date","parse","isNaN","getTime","strToTimestamp","now","path","JRCWidgetArticleSliderWrapper","fileViewerFiles","slides","slide","JRCWidgetSlider","J","urlBase","useDots","loop","startAt","onClickSlide","JRCWidgetArticleTextWrapper","useTheme","lineHeight","linkColor","fontSize","tinyMCECommonOptions","selectTinyMCECommonOptions","JRCWidgetArticleText","autoFocus","black","ToolWrapper","grey1","Tool","JRCWidgetArticleTitleWrapper","heading","JRCWidgetArticleTitle","Toolbar","sizeValue","WidgetCheckList","react","WidgetCheckListEditor","Typography","WidgetConfigWrapper","border","JRCWidgetCheckListWrapper","commentId","editRight","deleteRight","onRemove","onWidgetUpdate","widgetContent","mountedRef","useRef","entries","setEntries","useState","openUriModal","setOpenUriModal","isDeleteModalOpen","setDeleteModalOpen","currentModalID","setCurrentModalId","selectValue","setSelectValue","value","newUri","setNewUri","currentUser","get","items","selectWidgetContent","handleNewItem","arr","execute","useCallback","getInfos","w","user","mimeType","links","Promise","all","fetchData","res","finalEntries","item","checked","err","useEffect","handleTitleChange","updateWidgetWrapper","handleItemChange","oldItem","handleRemoveItem","splice","handleAddUri","handleRemoveUri","idUri","idWidget","filter","_","handleSwapItems","handleCloseModal","style","limit","initialEntries","onFileClick","onNewItem","onItemCheckListChange","mimetypes","checkListRespond","idUser","handleCheckItem","JRCModal","flushWidget","DisplayWidget","CSSWidgetLayer","opacity","pointerEvents","WidgetLayer","layers","ids","layer","Layer","widgetWrapper","LayerWidget","layerId","visible","locked","position","top","y","left","x","DraggableHandler","onMouseUp","updateLayer","BETA_JRCDoubleClick","onDoubleTap","mouseIsDown","setMouseDown","mouse","setMouse","start","setStart","child","setChild","handleMouseMove","event","dx","clientX","dy","clientY","handleMouseUp","document","addEventListener","removeEventListener","onMouseDown","nativeEvent","JRCLoader","WidgetState","selectWidgetState","def","inset","display","flex","justifyContent","alignItems","hover","initialized","WidgetWrapperCore","selectWidget","indexOrder","editableMap","currentEditableWidgetId","isComponentVisible","setIsComponentVisible","registerWidget","setEditableWidgetId","openingType","openingTypeLink","setEditableIndex","CommentsBlocWrapper","CommentsBloc","articleId","setToken","setLoading","setWidgets","tokenLoading","setTokenLoading","widgetIds","selectWidgets","models","selectAll","_displayComment","selectFaqConfig","platformConfig","selectPlatformConfig","commentsList","commentList","driveHook","selectHook","fileBank","widgetHook","displayComments","onComment","params","finalWidget","Object","some","addComment","idArticle","forEach","fetchToken","e","errorMsg","fetchComments","JRCCommentsBloc","comments","list","onCommentUpdate","commentToUpdate","find","idComment","updateComment","onCommentDelete","deleteComment","isWidgetActive","create","autorize","widgetListComponent","newWidgetsWrapperComponent","existingWidgetsWrapperComponent","removeWidget","tinyMCEConfig","commonOptions","mentionsQueries","getTinyMCEMentionsQueries","highlightFields","userHighlightFields","userAccountStatus","userModel","m","isWedocActive","onGetHashError","activeDrives","debug","UploadFromDrives","utils","buildDrivesArrayFromObject","drives","socialActionAdd","targetId","targetType","add","deleteFile","fetchUser","fetchUserFields","getFields","fetchSocialActionUserList","getUsers","removeLike","remove","Empty","Container","AppColumn","MainColumn","TwoColLayout","extensionRoute","routes","pathname","useLocation","ROUTES_ARRAY","values","activeTab","setActiveTab","tabs","tab","href","absolutePath","group","activeRoute","route","fallback","Outlet","CSSEditorPortal","CSSEditorHeader","CSSEditorAction","CSSEditorLabel","CSSEditor","CSSEditorContent","CSSEditorMenu","CSSEditorMenuButton","CSSEditorWidget","CSSEditorWidgetLabel","CSSEditorWidgetOption","EditorPopup","editor","selectEditor","popup","flexDirection","marginTop","flushEditorPopup","JRCIcon","WidgetArticleTitleEditor","WidgetArticleTextEditor","WidgetArticleGalleryEditor","WidgetArticleAttachmentEditor","WidgetArticleSliderEditor","WidgetArticleImageEditor","WidgetButtonEditor","WidgetApiEditor","Editor","onSave","updateWidget","flushEditor","onStateChange","states","onOpen","registerEditorPopup","provider","initialUrl","EditorTabWidgets","Layers","n","BETA_JRCDragAndDrop","onDrag","renderEl","EditorWidgetLayer","elms","registerLayer","EditorWidgetLayerLock","EditorWidgetLayerVisibility","EditorWidgetLayerFlush","flushLayer","EditorTabWrapper","wrapper","setTitle","control","watch","useForm","defaultValues","criteriaMode","subscription","unsubscribe","JRCInputText","placeholder","EditorWrapper","isVisibile","setTab","setTimeout","panel","useWrapper","useEditor","useWidgets","EditorConditonalTab","EditorPositionOption","setEditorPosition","widgetState","CSSEditorPortalWrapper","CSSEditorPortalPopupWrapper","CSSEditorPortalRow","CSSEditorPortalFreeSpace","EditorsPortal","editors","selectEditors","useAI","query","setQuery","PrepareAndSetQuery","reject","resolve","AICapabilities","useMemo","develop","capability","summarize","tldr","JTinyMCEExtensionsBuilders","jia","loadingResponse","AIModal","setResponse","sendAIRequest","textEnhancement","capacity","textResponse","trim","zIndex","JRCTypography","align","JRCInputTinyMCEWithExt","extAI","isAIActive","hooks","JIAHook","extArray","onMentionsQueryError","tinyMentionsQueries","tinymceCommonOptions","JRCInputTinyMCE","additionalExtensions","JRCInputTinyMCEWithExtRaw","JRCInputTinyMCERaw","StretchContainer","css","stretch","Form","FormElm","onSubmit","FieldsetWrapper","DisplayForm","formRef","configuration","useDisplay","fields","handleSubmit","reset","formFn","scrollTo","Input","conf","dataCy","readOnly","extraInputs"],"sourceRoot":""}
|