jamespot-react-core 1.1.170 → 1.1.172

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.
@@ -1 +1 @@
1
- {"version":3,"file":"823.bundle.js","mappings":"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","sources":["webpack://ReactCore/./src/components/Avatar.tsx","webpack://ReactCore/./src/components/Audience.tsx","webpack://ReactCore/./src/components/tinymce/extension/AIModal.tsx","webpack://ReactCore/./src/components/widgets/components/WidgetEditorPanel.tsx","webpack://ReactCore/./src/components/widgets/WidgetList/WidgetList.style.tsx","webpack://ReactCore/./src/components/widgets/WidgetList/WidgetList.tsx","webpack://ReactCore/./src/components/widgets/namespace.ts","webpack://ReactCore/./src/components/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/components/WidgetRemove.tsx","webpack://ReactCore/./src/components/widgets/wrapper/components/WidgetFooterView.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetCheckListWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/utils.ts","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetDatasourceTableWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetExcelDatasourceTableWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetPresenceWrapperClosing.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetPresenceWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/components/WidgetTitle.tsx","webpack://ReactCore/./src/components/widgets/wrapper/components/WidgetTitleEdit.tsx","webpack://ReactCore/./src/components/widgets/wrapper/components/WidgetHeaderEdit.tsx","webpack://ReactCore/./src/components/widgets/Widget.tsx","webpack://ReactCore/./src/components/widgets/Widget.style.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/comments/CommentsBloc.styles.ts","webpack://ReactCore/./src/components/comments/CommentsBlocAddCommentWidgetsWrapper.tsx","webpack://ReactCore/./src/components/comments/CommentsBlocCommentWidgetsWrapper.tsx","webpack://ReactCore/./src/components/CommentsBloc.tsx","webpack://ReactCore/./src/hooks/useCommentsLikeRT.ts","webpack://ReactCore/./src/displayer/DisplayForm.component.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/EditorPosition.tsx","webpack://ReactCore/./src/components/editors/EditorTabWidgets.tsx","webpack://ReactCore/./src/components/editors/EditorTabWrapper.tsx","webpack://ReactCore/./src/components/editors/states/EditorIsBusy.tsx","webpack://ReactCore/./src/components/editors/states/EditorIsInitialize.tsx","webpack://ReactCore/./src/components/editors/states/EditorIsLocked.tsx","webpack://ReactCore/./src/components/editors/EditorWrapper.tsx","webpack://ReactCore/./src/components/editors/EditorsPortal.tsx","webpack://ReactCore/./src/components/Empty.tsx","webpack://ReactCore/./src/hooks/useAI.ts","webpack://ReactCore/./src/components/tinymce/JRCInputTinyMCEWithExt.tsx","webpack://ReactCore/./src/components/tinymce/JRCInputTinyMCEWithExtRaw.tsx","webpack://ReactCore/./src/components/modals/ModalAudience.tsx","webpack://ReactCore/./src/components/TwoColLayout.tsx"],"sourcesContent":["import { JRCAvatarProps } from 'jamespot-react-components';\r\nimport { Network } from 'jamespot-front-business';\r\nimport { useSelector } from 'react-redux';\r\nimport React from 'react';\r\nimport { useTheme } from 'styled-components';\r\nimport JRCore from 'App';\r\n\r\nconst JRCAvatar = JRCore.registry.getLazyComponent('JRCAvatar');\r\nconst JRCIcon = JRCore.registry.getLazyComponent('Icon');\r\n\r\nconst BASE_MULTIPLE = 8;\r\n\r\nexport const Avatar = (props: JRCAvatarProps) => {\r\n const theme = useTheme();\r\n const networkPublic = useSelector(Network.selectors.selectNetworkPublic);\r\n\r\n if (props.uri === networkPublic?.uri) {\r\n return (\r\n <JRCIcon\r\n name={'icon-fs-wall'}\r\n size={(props.size ?? 3) * BASE_MULTIPLE}\r\n color={theme.color.primary}\r\n variant={'circle'}\r\n />\r\n );\r\n }\r\n\r\n return <JRCAvatar {...props} />;\r\n};\r\n","import React, { useState } from 'react';\nimport styled, { useTheme } from 'styled-components';\nimport { useIntl } from 'react-intl';\nimport { Utils } from 'jamespot-react-components';\nimport { Avatar } from './Avatar';\nimport { jObjectLittle } from 'jamespot-user-api';\nimport JRCore from '../App';\n\nconst JRCFlexBox = JRCore.registry.getLazyComponent('FlexBox');\nconst JRCModalContent = JRCore.registry.getLazyComponent('ModalContent');\nconst JRCModalLayout = JRCore.registry.getLazyComponent('ModalLayout');\nconst JRCStyledHref = JRCore.registry.getLazyComponent('StyledHref');\nconst JRCTooltip = JRCore.registry.getLazyComponent('Tooltip');\nconst JRCTypography = JRCore.registry.getLazyComponent('Typography');\n\nexport type AudienceProps<T extends jObjectLittle> = {\n audience: T[];\n limit?: number;\n};\n\nconst LIMIT = 2;\n\nconst AudienceWrapper = styled.div`\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin-bottom: 24px;\n`;\n\nexport const AvatarLink = styled.a<{ overlap?: boolean }>`\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n width: 40px;\n height: 40px;\n border-radius: 40px;\n overflow: hidden;\n color: ${(props) => props.theme.color.white};\n background-color: ${(props) => props.theme.color.lavender};\n border: 4px solid ${(props) => props.theme.color.white};\n margin-left: ${(props) => (props.overlap ? '-18px' : '0')};\n cursor: pointer;\n`;\n\nexport const Audience = <T extends jObjectLittle>({ audience, limit = LIMIT }: AudienceProps<T>) => {\n const intl = useIntl();\n const theme = useTheme();\n const [isModalOpen, setModalOpen] = useState(false);\n\n return (\n <>\n <JRCFlexBox>\n {[...audience].splice(0, limit).map((item, index) => (\n <AvatarLink overlap={index !== 0} href={item._url} target={'_blank'} key={item.id}>\n <JRCTooltip description={item.title === undefined ? ' ' : item.title} position=\"left\">\n <Avatar\n uri={item.uri}\n size={4}\n variant=\"circle\"\n alt=\"image\"\n timestamp={item.dateModified ? Utils.date.strToTimestamp(item.dateModified) : undefined}\n focusable\n />\n </JRCTooltip>\n </AvatarLink>\n ))}\n {audience.length > limit && (\n <AvatarLink onClick={() => setModalOpen(true)} overlap={true}>\n +{audience.length - limit}\n </AvatarLink>\n )}\n </JRCFlexBox>\n {audience.length > limit && (\n <JRCModalLayout\n closeHandler={() => setModalOpen(false)}\n enableClickAwayCloseModal\n open={isModalOpen}\n variant={'fixed-height'}\n maxHeight={'800px'}>\n <JRCModalContent\n title={intl.formatMessage({ id: 'GLOBAL_Audience' })}\n overflow={'scroll'}\n onClickIconClose={() => setModalOpen(false)}>\n <AudienceWrapper>\n {audience.map((item, i) => (\n <JRCFlexBox key={`audience-${i}`} y={'center'} gap={theme.space.l}>\n <Avatar size={5} uri={`${item.type}/${item.id}`} />\n <JRCStyledHref href={`${item.type}/${item.id}`}>\n <JRCTypography>{item.title}</JRCTypography>\n </JRCStyledHref>\n </JRCFlexBox>\n ))}\n </AudienceWrapper>\n </JRCModalContent>\n </JRCModalLayout>\n )}\n </>\n );\n};\n","import { JiaTextEnhanceQuery } from 'hooks/useAI';\nimport jamespot from 'jamespot-user-api';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport JRCore from 'App';\n\nimport styled, { useTheme } from 'styled-components';\n\nconst JRCLoader = JRCore.registry.getLazyComponent('Loader');\nconst JRCModalContent = JRCore.registry.getLazyComponent('ModalContent');\nconst JRCModalLayout = JRCore.registry.getLazyComponent('ModalLayout');\nconst JRCTypography = JRCore.registry.getLazyComponent('Typography');\n\nconst TextWrapper = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n`;\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 const theme = useTheme();\n\n const sendAIRequest = useCallback(\n (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((_err) => {\n setResponse({\n error: intl.formatMessage({ id: 'JIA_ERROR_AI_CALL' }),\n loading: false,\n response: undefined,\n });\n });\n },\n [intl],\n );\n\n useEffect(() => {\n if (query && query.text.trim().length > 0) {\n sendAIRequest(query);\n }\n }, [query, sendAIRequest]);\n\n return (\n <JRCModalLayout\n zIndex={theme.zIndex.tinyMCEModal}\n open={!!query}\n closeHandler={() => {\n query?.reject();\n }}>\n <JRCModalContent\n overflow=\"scroll\"\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 isFull>\n <TextWrapper>\n {response.loading && (\n <>\n <JRCLoader />\n <JRCTypography align=\"center\">\n {intl.formatMessage({ id: 'JIA_WAITING_WARNIG' })}\n </JRCTypography>\n </>\n )}\n {!response.loading && response.error && <p>{response.error}</p>}\n {!response.loading && response.response && <p>{response.response}</p>}\n </TextWrapper>\n </JRCModalContent>\n </JRCModalLayout>\n );\n};\n","import React, { useMemo } from 'react';\nimport { createPortal } from 'react-dom';\nimport { v4 as uuidv4 } from 'uuid';\nimport JRCore from 'App';\n\nconst EditorsPortal = JRCore.registry.getLazyComponent('EditorsPortal');\nconst JRCThemeProvider = JRCore.registry.getLazyComponent('ThemeProvider');\n\nconst createPortalElement = (parent: HTMLElement): HTMLDivElement => {\n let portal = document.getElementById('react-portals') as HTMLDivElement;\n\n if (!portal) {\n portal = document.createElement('div');\n portal.id = uuidv4();\n parent.appendChild(portal);\n }\n\n return portal;\n};\nexport const EditorsPanel = () => {\n const portalDiv = document.getElementById('react-portals');\n const portal = useMemo(() => portalDiv && createPortalElement(portalDiv), [portalDiv]);\n\n if (!portal) {\n return null;\n }\n return createPortal(\n <JRCThemeProvider>\n <EditorsPortal />\n </JRCThemeProvider>,\n portal,\n );\n};\n","import styled from 'styled-components';\n\nexport const CSSSquareWidgetWrapper = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n gap: 10px;\n justify-content: center;\n`;\n\nexport const CSSSquareWidget = styled.div<{ available: boolean }>`\n border: 1px solid ${(props) => props.theme.color.grey2};\n border-radius: 8px;\n cursor: pointer;\n padding: 12px;\n position: relative;\n opacity: ${(props) => (props.available ? '1' : '.4')};\n pointer-events: ${(props) => (props.available ? 'all' : 'none')};\n\n .show-on-hover {\n position: absolute;\n inset: 0;\n border-radius: 8px;\n justify-content: center;\n align-items: center;\n display: flex;\n opacity: 0;\n background-color: #ffffffe6;\n }\n\n &:hover {\n .show-on-hover {\n opacity: 1;\n }\n }\n`;\n\nexport const CSSWidgetButton = styled.div<{ open: boolean; height: number }>`\n border: 2px solid ${(props) => props.theme.color.primary};\n height: ${(props) => (props.open ? props.height : '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<{ column?: boolean }>`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: center;\n gap: 10px;\n ${(props) => props.column && `flex-direction: column;`}\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; parentIsColumn?: 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; width: 100%;`}\n ${(props) => props.parentIsColumn && `flex-basis: 72px;`}\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, { useMemo } 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={intl.formatMessage({ id: 'WIDGET_Builder' })}>\n {mode === 'comment' ? (\n <CSSWrapWidgetWrapper column>\n {widgets.map((widget, index) => (\n <CSSWrapWidget\n key={widget.name}\n open={true}\n full\n parentIsColumn\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 HEIGHT_CLOSED = 50;\nconst HEIGHT = 80;\nconst MARGIN_BOTTOM = 10;\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\n const calcHeight = useMemo(() => {\n return Math.ceil(widgets.length / 2) * HEIGHT + HEIGHT_CLOSED + MARGIN_BOTTOM;\n }, [widgets]);\n\n return (\n <>\n <CSSWidgetButton open={open} height={calcHeight}>\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={22}\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, WidgetsName } from 'jamespot-user-api';\n\nexport function getBuilderWidgets(namespace: string): WidgetDefinitionProps[] {\n switch (namespace) {\n case 'widget-article-image':\n return [Widget.definition(WidgetsName.ArticleTitle), Widget.definition(WidgetsName.ArticleButton)];\n case 'comment':\n return [Widget.definition(WidgetsName.CheckList), Widget.definition(WidgetsName.Presence)];\n default:\n return [\n Widget.definition(WidgetsName.ArticleTitle),\n Widget.definition(WidgetsName.ArticleText),\n Widget.definition(WidgetsName.ArticleImage),\n Widget.definition(WidgetsName.ArticleButton),\n Widget.definition(WidgetsName.ArticleSlider),\n Widget.definition(WidgetsName.ArticleAttachment),\n Widget.definition(WidgetsName.Presence),\n ];\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 JRCore from 'App';\n\nconst JRCInputFileAdvancedRaw = JRCore.registry.getLazyComponent('InputFileAdvancedRaw');\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 // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialFiles]);\n\n React.useEffect(() => {\n onUploadSuccess(files);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [files]);\n\n React.useEffect(() => {\n if (total === 0) {\n onUploadEnd();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\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, { useEffect } 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 { JRCFileViewerOpenWithOptionsType } from 'jamespot-react-components';\nimport { WidgetUploader } from '../components/WidgetUploader';\n\nconst WidgetAttachment = JRCore.registry.getLazyComponent('WidgetAttachment');\nconst JRCWidgetEmptyInplace = JRCore.registry.getLazyComponent('WidgetEmptyInplace');\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 useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, mounted: true }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !files || files.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [files]);\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, { useEffect } from 'react';\n\nimport styled from 'styled-components';\n\nimport { WidgetArticleButtonType, WidgetDisplayMode } from 'jamespot-user-api';\n\nimport { useDispatch } from 'react-redux';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport JRCore from 'App';\n\nconst JRCWidgetButton = JRCore.registry.getLazyComponent('WidgetButton');\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 useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !text || text.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [text]);\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 { WidgetUploader } from '../components/WidgetUploader';\n\nconst JRCWidgetArticleGallery = JRCore.registry.getLazyComponent('WidgetArticleGallery');\nconst JRCWidgetEmptyInplace = JRCore.registry.getLazyComponent('WidgetEmptyInplace');\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 // eslint-disable-next-line react-hooks/exhaustive-deps\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, { useEffect, useState } from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport {\n WidgetArticleImageContent,\n WidgetArticleImageType,\n WidgetDisplayMode,\n WidgetsRootState,\n formatImgUrl,\n jFileLittle,\n} from 'jamespot-user-api';\nimport { useIntl } from 'react-intl';\nimport JRCore from 'App';\nimport { Widget, updateWidgetContent } from 'jamespot-front-business';\nimport { WidgetUploader } from '../components/WidgetUploader';\n\nconst WidgetImage = JRCore.registry.getLazyComponent('WidgetImage');\nconst FileViewer = JRCore.registry.getLazyComponent('FileViewer');\nconst JRCWidgetEmptyInplace = JRCore.registry.getLazyComponent('WidgetEmptyInplace');\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] = useState<string | undefined>(undefined);\n const intl = useIntl();\n\n useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, mounted: true }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, empty: !file }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [file]);\n\n useEffect(() => {\n if (file) {\n setUri(\n formatImgUrl({\n timestamp: file.dateModified ? strToTimestamp(file.dateModified) : Date.now(),\n from: 'imagecache',\n size: 'fitx1200',\n uri: file.uri,\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, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport {\n WidgetArticleSliderType,\n WidgetDisplayMode,\n WidgetsRootState,\n formatImgUrl,\n jFileLittle,\n} from 'jamespot-user-api';\nimport JRCore from 'App';\nimport styled from 'styled-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');\nconst JRCWidgetEmptyInplace = JRCore.registry.getLazyComponent('WidgetEmptyInplace');\nconst JRCWidgetSlider = JRCore.registry.getLazyComponent('WidgetSlider');\n\nconst Wrapper = styled.div<{ maxWidth: number }>`\n flex: 1;\n display: flex;\n flex-direction: row;\n min-height: 60px;\n align-items: center;\n width: ${(props) => props.maxWidth}px;\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 maxWidth = width ?? 600;\n const [dynamicWidth, setDynamicWidth] = useState<number | undefined>(undefined);\n const ref = useRef<HTMLDivElement>(null);\n const fileViewerFiles = useMemo(\n () =>\n 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: formatImgUrl({\n size: 'fitx1200',\n uri: slide.file ? slide.file.uri : '',\n from: 'imagecache',\n timestamp:\n slide.file && slide.file.dateModified\n ? strToTimestamp(slide.file.dateModified)\n : Date.now(),\n }),\n };\n }),\n ]\n : [],\n [widget.content.slides],\n );\n\n const slides = useMemo(\n () =>\n widget.content.slides !== undefined\n ? [\n ...widget.content.slides.map((slide) => {\n if (slide.file) {\n return {\n ...slide,\n uri: formatImgUrl({\n timestamp: slide.file.dateModified\n ? strToTimestamp(slide.file.dateModified)\n : Date.now(),\n size: `fitx${dynamicWidth && dynamicWidth < maxWidth ? dynamicWidth : maxWidth}`,\n from: 'imagecache',\n uri: slide.file.uri,\n }),\n };\n } else {\n return {\n ...slide,\n uri: '',\n };\n }\n }),\n ]\n : [],\n [widget.content.slides, dynamicWidth, maxWidth],\n );\n\n useEffect(() => {\n if (isActive && mode === 'edit') {\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: widget.name }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isActive]);\n\n useEffect(() => {\n const handleResize = () => {\n if (ref.current) {\n setDynamicWidth(ref.current ? ref.current.offsetWidth : maxWidth);\n }\n };\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref]);\n\n useEffect(() => {\n setDynamicWidth(ref.current ? ref.current.offsetWidth : maxWidth);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref]);\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !widget.content.slides || widget.content.slides.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [widget.content.slides]);\n\n const isEditable = useMemo(\n () => mode === 'edit' && Array.isArray(widget.content.slides) && widget.content.slides.length === 0,\n [widget.content.slides, mode],\n );\n\n const handleEditor = useCallback(() => {\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid: widget.uniqid,\n name: widget.name,\n }),\n );\n }, [dispatch, widget.uniqid, widget.name]);\n\n /** small hack to catch the real width of the div */\n if (dynamicWidth === undefined) {\n return <div ref={ref} style={{ width: '100%' }}></div>;\n }\n\n return (\n <Wrapper maxWidth={dynamicWidth && dynamicWidth < maxWidth ? dynamicWidth : maxWidth}>\n <FileViewer files={fileViewerFiles} openWithOptions={[]}>\n {(open) => {\n return (\n <JRCWidgetSlider\n slides={slides}\n maxWidth={dynamicWidth && dynamicWidth < maxWidth ? dynamicWidth : maxWidth}\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 {isEditable ? (\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={handleEditor}\n />\n ) : (\n <></>\n )}\n </Wrapper>\n );\n};\n","import React, { useCallback, useEffect, useMemo } from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport JRCore from 'App';\nimport { useIntl } from 'react-intl';\nimport {\n WidgetArticleTextContent,\n WidgetArticleTextType,\n WidgetDisplayMode,\n WidgetsRootState,\n} from 'jamespot-user-api';\n\nimport { Model, TinyMCE, Toast, Widget, updateWidgetContent } from 'jamespot-front-business';\n\nconst WidgetArticleText = JRCore.registry.getLazyComponent('WidgetArticleText');\n\nimport { getTinyMCEMentionsQueries } from 'App';\n\nimport styled, { useTheme } from 'styled-components';\n\nconst CSSTextWrapper = styled.div`\n cursor: text;\n p {\n word-wrap: break-word;\n }\n a {\n word-wrap: break-word;\n }\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 } = widget.content;\n const dispatch = useDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n const isBusy = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidgetState(state, uniqid)?.busy);\n const token = useSelector(Widget.selectors.selectToken);\n const tinyMCECommonOptions = useSelector(TinyMCE.selectors.selectTinyMCECommonOptions);\n const models = useSelector(Model.selectors.selectAll);\n\n const intl = useIntl();\n\n const onError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !text || text.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [text]);\n\n const tinyMentionsQueries = useMemo(() => {\n return getTinyMCEMentionsQueries(models, theme, onError);\n }, [models, onError, theme]);\n\n // small hack to hide and redraw tinymce to avoid initialization issue\n if (isBusy) {\n return <></>;\n }\n\n return (\n <CSSTextWrapper>\n <WidgetArticleText\n autoFocus={isActive}\n text={text ?? ''}\n token={mode === 'edit' && token !== undefined ? token : ''}\n tinyMCECommonOptions={\n mode === 'edit' && tinyMCECommonOptions\n ? {\n tinymceScriptSrc: 'https://ecosysteme.jamespot.pro/js/tinymce/tinymce.min.js',\n commonOptions: tinyMCECommonOptions,\n mentionsQueries: tinyMentionsQueries,\n }\n : undefined\n }\n mode={mode}\n onChange={(text) => {\n dispatch(updateWidgetContent<WidgetArticleTextContent>(uniqid, { text }));\n }}\n />\n </CSSTextWrapper>\n );\n};\n","import React, { useEffect } from 'react';\n\nimport JRCore from 'App';\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';\n\nconst WidgetArticleTitle = JRCore.registry.getLazyComponent('WidgetArticleTitle');\n\nimport styled from 'styled-components';\n\nconst CSSTextWrapper = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n align-items: center;\n cursor: text;\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 useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !text || text.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [text]);\n\n return (\n <CSSTextWrapper>\n <WidgetArticleTitle\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 </CSSTextWrapper>\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, { useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport jamespot from 'jamespot-user-api';\n\nimport styled from 'styled-components';\n\nimport { useDispatch } from 'react-redux';\nimport { Toast, Widget } from 'jamespot-front-business';\nimport JRCore from 'App';\nimport { JRCIconButton } from 'jamespot-react-components';\n\nconst JRCButton = JRCore.registry.getLazyComponent('Button');\nconst JRCModalLayout = JRCore.registry.getLazyComponent('ModalLayout');\nconst JRCModalContent = JRCore.registry.getLazyComponent('ModalContent');\n\nexport const Button = styled.button`\n padding: ${(props) => props.theme.space.md}px;\n`;\n\nexport const Footer = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n display: flex;\n flex-direction: row-reverse;\n`;\n\nexport const WidgetRemove = ({ id, type, uniqid }: { id: number; type: string; uniqid: string }) => {\n const dispatch = useDispatch();\n const intl = useIntl();\n const [isOpen, setIsOpen] = useState<boolean>(false);\n\n const handleRemove = () => {\n jamespot.widget\n .removeWidget({ id, type, uniqid })\n .then(() => {\n dispatch(Widget.slice.actions.flushWidget({ uniqid }));\n })\n .catch(() => dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Error' })));\n };\n\n return (\n <>\n <JRCIconButton iconSize={14} onClick={() => setIsOpen(true)} icon=\"icon-trash\" />\n {isOpen && (\n <JRCModalLayout enableClickAwayCloseModal={true} open={isOpen} closeHandler={() => setIsOpen(false)}>\n <JRCModalContent\n overflow={'scroll'}\n title={intl.formatMessage({ id: 'WIDGET_Remove_Widget' })}\n onClickIconClose={() => setIsOpen(false)}>\n {intl.formatMessage({ id: 'WIDGET_Delete_Widget_Confirmation' })}\n </JRCModalContent>\n <Footer>\n <JRCButton label={intl.formatMessage({ id: 'GLOBAL_Confirm' })} onClick={handleRemove} />\n </Footer>\n </JRCModalLayout>\n )}\n </>\n );\n};\n","import React, { useCallback, useMemo } from 'react';\nimport { useIntl } from 'react-intl';\nimport jamespot, {\n WidgetsRootState,\n WidgetsName,\n ensureWidgetPresenceContent,\n ensureWidgetObjectHasMinimumProperties,\n Rights,\n WidgetDisplayMode,\n} from 'jamespot-user-api';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport styled from 'styled-components';\nimport { Toast, Widget, WidgetEditor } from 'jamespot-front-business';\nimport { WidgetRemove } from './WidgetRemove';\n\nexport const Footer = styled.div`\n display: flex;\n flex: 1;\n flex-direction: row;\n border-top: 1px solid ${(props) => props.theme.color.grey1};\n`;\n\nexport const Button = styled.button`\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n background-color: ${(props) => props.theme.color.white};\n &:hover {\n background-color: ${(props) => props.theme.color.grey0};\n }\n`;\n\nexport const WidgetFooterView = ({\n name,\n uniqid,\n mode,\n collaborationRights,\n handleOpenEditor,\n}: {\n name: WidgetsName;\n uniqid: string;\n mode?: WidgetDisplayMode;\n collaborationRights?: Pick<Rights, 'update'>;\n handleOpenEditor?: () => void;\n}) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const widgetObject = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObject(state, uniqid),\n shallowEqual,\n );\n const widgetObjectRights = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObjectRights(state, uniqid),\n shallowEqual,\n );\n\n const canUpdate = useMemo(\n () =>\n (widgetObject && widgetObjectRights && widgetObjectRights.update) ||\n (collaborationRights && collaborationRights.update),\n [widgetObject, widgetObjectRights, collaborationRights],\n );\n\n const canDelete = useMemo(\n () => widgetObject && widgetObjectRights && widgetObjectRights.delete,\n [widgetObject, widgetObjectRights],\n );\n\n const handleOnClick = useCallback(() => {\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid,\n name,\n onSave: (content) => {\n if (\n widgetObject &&\n widgetObject.id &&\n widgetObject.type &&\n ensureWidgetPresenceContent(content) &&\n mode === 'view'\n ) {\n jamespot.widget\n .updateWidget({\n id: widgetObject.id,\n type: widgetObject.type,\n uniqid,\n content,\n v2: true,\n })\n .catch(() => dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Error' })));\n }\n },\n }),\n );\n }, [uniqid, dispatch, name, widgetObject, mode]);\n\n return canUpdate && ensureWidgetObjectHasMinimumProperties(widgetObject) ? (\n <Footer>\n <Button onClick={handleOpenEditor ?? handleOnClick}>\n {intl.formatMessage({ id: 'WIDGET_Set_Widget' })}\n </Button>\n {canDelete && <WidgetRemove id={widgetObject.id} type={widgetObject.type} uniqid={uniqid} />}\n </Footer>\n ) : (\n <></>\n );\n};\n","import { Toast, updateWidgetContent, UserCurrent, Widget, WidgetEditor } from 'jamespot-front-business';\nimport { JRCWidgetCheckListEntries } from 'jamespot-react-components';\nimport jamespot, {\n CombinedWidgetContent,\n WidgetCheckListContent,\n WidgetCheckListContentArr,\n WidgetCheckListType,\n WidgetDisplayMode,\n WidgetsName,\n WidgetsRootState,\n} from 'jamespot-user-api';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\nimport JRCore from 'App';\nimport { WidgetFooterView } from './components/WidgetFooterView';\n\nconst WidgetCheckList = JRCore.registry.getLazyComponent('WidgetCheckList');\nconst WidgetCheckListEditor = JRCore.registry.getLazyComponent('WidgetCheckListEditor');\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 CommentContainer = styled.div`\n width: 100%;\n display: flex;\n gap: 14px;\n padding: 16px;\n`;\n\nexport const FormItemContainer = styled.div<{ border?: boolean }>`\n width: 100%;\n padding-bottom: 12px;\n border-bottom: ${(props) => (props.border ? `1px solid ${props.theme.color.grey1}` : 0)};\n`;\n\ntype JRCWidgetCheckListWrapperProps = {\n widget: WidgetCheckListType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n onWidgetUpdate?: () => void;\n};\n\nexport const JRCWidgetCheckListWrapper = ({\n widget,\n inplace,\n mode,\n onWidgetUpdate,\n}: JRCWidgetCheckListWrapperProps) => {\n const intl = useIntl();\n const { uniqid, content: widgetContent } = widget;\n const dispatch = useDispatch();\n\n const [entries, setEntries] = useState<JRCWidgetCheckListEntries | undefined>();\n\n const [token, setToken] = useState<string>();\n const [tokenLoading, setTokenLoading] = useState(false);\n\n const currentUser = useSelector(UserCurrent.selectors.get);\n\n const widgetObject = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObject(state, widget.uniqid),\n shallowEqual,\n );\n\n const widgetObjectRights = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObjectRights(state, uniqid),\n shallowEqual,\n );\n\n const canEditCollaboration = useMemo(() => {\n return widgetObjectRights && widgetObjectRights.update;\n }, [widgetObjectRights]);\n\n const onError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const onChange = (uniqid: string, content: CombinedWidgetContent) => {\n dispatch(updateWidgetContent(uniqid, content));\n };\n\n const onChangeWrapper = (content: { uniqid: string; title?: string }) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ ...content }));\n };\n\n const handleCheckItem = (id: string, index: number, items: JRCWidgetCheckListEntries) => {\n if (!widgetObject || !widgetObject.id) 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: widgetObject.id,\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 openEditorPanel = (token: string) => {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n dispatch(Widget.slice.actions.setToken({ token }));\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid: widget.uniqid,\n name: WidgetsName.CheckList,\n }),\n );\n };\n\n useEffect(() => {\n const finalEntries: JRCWidgetCheckListEntries | undefined = widget.content.arr?.map((item) => ({\n text: item.title ?? '',\n checked: item.value ?? false,\n ...(item.links && {\n links: item.links,\n }),\n ...(item.user && { user: item.user ?? undefined }),\n ...(item.id && { id: item.id, mimetype: 'image/png' }),\n }));\n\n setEntries(finalEntries);\n }, [widget.content.arr, widgetContent]);\n\n useEffect(() => {\n if (token || tokenLoading) return;\n const fetchToken = () => {\n setTokenLoading(true);\n return 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 fetchToken();\n }, [onError, token, tokenLoading]);\n\n if (mode === 'edit') {\n if (inplace) {\n return (\n <>\n <CommentContainer>\n <WidgetCheckListEditor\n token={token}\n uniqid={uniqid}\n content={widgetContent}\n onChangeContent={onChange}\n onChangeWrapper={onChangeWrapper}\n canEditCollaboration={false}\n />\n </CommentContainer>\n </>\n );\n }\n }\n\n return (\n <>\n {entries && (\n <div key={widget.uniqid} style={{ width: '100%' }}>\n <WidgetCheckList\n limit={10}\n initialEntries={entries}\n onFileClick={() => {\n // we did not use the onClick function\n }}\n onItemCheckListChange={(index, items) => handleCheckItem(widget.uniqid, index, items)}\n />\n {(widgetContent.edit || canEditCollaboration) && (\n <WidgetFooterView\n uniqid={widget.uniqid}\n name={widget.name}\n collaborationRights={{\n update: !!(widgetContent.edit || canEditCollaboration),\n }}\n mode={mode}\n handleOpenEditor={() => {\n if (token) {\n openEditorPanel(token);\n } else {\n onError(intl.formatMessage({ id: 'GLOBAL_Error' }));\n }\n }}\n />\n )}\n </div>\n )}\n </>\n );\n};\n","import { WidgetTableColumn, WidgetTableColumnsData } from 'jamespot-user-api';\n\nexport const getVisibleColumns = (tableColumnsData: WidgetTableColumnsData, columns: WidgetTableColumn[]) => {\n const toRet: WidgetTableColumn[] = [];\n tableColumnsData\n .filter((data) => data.isVisible)\n .forEach((data) => {\n const column = columns.find((el) => el.name === data.name);\n if (column) {\n toRet.push(column);\n }\n });\n\n return toRet;\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport JRCore from 'App';\nconst WidgetTable = JRCore.registry.getLazyComponent('WidgetTable');\n\nimport { FormattedMessage } from 'react-intl';\n\nconst Loader = JRCore.registry.getLazyComponent('Loader');\n\nimport jamespot, {\n DatasourceResultSort,\n DatasourceType,\n Format,\n WidgetDatasourceValues,\n WidgetDisplayMode,\n WidgetsName,\n WidgetTableColumn,\n} from 'jamespot-user-api';\n\nimport styled from 'styled-components';\nimport { WidgetDatasourceTableContent } from 'jamespot-user-api';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { useAppDispatch } from 'redux/store';\nimport { getVisibleColumns } from './utils';\nimport { FitType, useArticleRT } from '../hooks';\n\nconst JRCButton = JRCore.registry.getLazyComponent('Button');\nconst JRCHtml = JRCore.registry.getLazyComponent('Html');\n\nexport const Wrapper = styled.div``;\n\nexport const AbsoluteWrapper = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: ${(props) => props.theme.space.md}px;\n`;\n\nexport const WrapperEditMode = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n gap: ${(props) => props.theme.space.md}px;\n color: ${(props) => props.theme.color.primary};\n cursor: pointer;\n opacity: 0;\n border: 1px solid ${(props) => props.theme.color.primary};\n &:hover {\n background-color: ${(props) => props.theme.color.grey2};\n opacity: 0.9;\n }\n`;\n\nexport const WidgetDatasourceTableWrapper = ({\n uniqid,\n uri,\n limit,\n tableHeadColor,\n tableHeadTextColor,\n tableHeadIconColor,\n tableRowColor,\n tableRowTextColor,\n tableColumnsData = [],\n tableBorderRadius,\n tableSizedColumns,\n tableSizedColumnsWidth,\n mode,\n}: WidgetDatasourceTableContent & { uniqid: string; mode: WidgetDisplayMode }) => {\n const intl = useIntl();\n const dispatch = useAppDispatch();\n const [isEditorOpenOnFirstRender, setIsEditorOpenOnFirstRender] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [datasourceData, setDatasourceData] = useState<Record<string, WidgetDatasourceValues>[]>([]);\n const [datasourceModel, setDatasourceModel] = useState<WidgetTableColumn[]>([]);\n const [datasourceSort, setDatasourceSort] = useState<DatasourceResultSort>({ order: 'ascending', name: 'unknown' });\n const [datasourceType, setDatasourceType] = useState<DatasourceType | undefined>(undefined);\n const [datasourceIdentifier, setDatasourceIdentifier] = useState<string>('');\n\n const definition = useMemo(() => Widget.definition(WidgetsName.DatasourceTable), []);\n const rtConditions = useMemo<FitType[]>(() => {\n if (datasourceType === 'studio') {\n return [{ type: [datasourceIdentifier] }];\n }\n\n return [];\n }, [datasourceType, datasourceIdentifier]);\n const rtAudience = useMemo<string[]>(() => {\n if (datasourceType === 'doc') {\n return [datasourceIdentifier];\n }\n\n return [];\n }, [datasourceType, datasourceIdentifier]);\n\n const { rtLastObject } = useArticleRT(rtConditions, rtAudience);\n\n const fetchDatasource = useCallback(() => {\n if (!uri) {\n return;\n }\n\n setIsLoading(true);\n jamespot.datasource\n .get(uri, Format.VIEW)\n .then((response) => {\n setDatasourceModel(response.result.model);\n setDatasourceData(response.result.data);\n setDatasourceSort(response.result.sort);\n setDatasourceType(response.result.datasource.datasourceType);\n setDatasourceIdentifier(response.result.datasource.datasourceIdentifier);\n })\n .finally(() => setIsLoading(false));\n }, [uri]);\n\n useEffect(() => {\n if (uri !== undefined && tableColumnsData.length !== 0 && datasourceModel.length === 0) {\n fetchDatasource();\n }\n }, [uri, tableColumnsData, datasourceModel, fetchDatasource]);\n\n useEffect(() => {\n if (!rtLastObject) {\n return;\n }\n\n fetchDatasource();\n }, [rtLastObject, fetchDatasource]);\n\n useEffect(() => {\n if (!uri) {\n setDatasourceModel([]);\n }\n }, [uri]);\n\n const registerEditor = useCallback(() => {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n setTimeout(() => {\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: WidgetsName.DatasourceTable }));\n }, 0);\n }, [dispatch, uniqid]);\n\n useEffect(() => {\n if (mode === 'view' || mode === 'preview') {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n }\n }, [mode, dispatch]);\n\n useEffect(() => {\n if (!isEditorOpenOnFirstRender && !uri && mode === 'edit') {\n registerEditor();\n setIsEditorOpenOnFirstRender(true);\n }\n }, [dispatch, uniqid, isEditorOpenOnFirstRender, uri, registerEditor, mode]);\n\n const columns = useMemo(\n () => getVisibleColumns(tableColumnsData, datasourceModel),\n [tableColumnsData, datasourceModel],\n );\n\n if (tableColumnsData.length === 0 && !isLoading && mode === 'edit') {\n return (\n <>\n <AbsoluteWrapper onClick={registerEditor}>\n <img src={`/img/fast-intranet/${WidgetsName.DatasourceTable}.png`} alt=\"\" />\n <FormattedMessage id={definition.label} />\n <JRCButton label=\"GLOBAL_Settings\" />\n </AbsoluteWrapper>\n <WrapperEditMode onClick={registerEditor}>\n <JRCHtml\n __html={`${intl.formatMessage({ id: 'WIDGET_Set_Widget' })} <b>${intl.formatMessage({\n id: definition.label,\n })}</b>`}\n />\n </WrapperEditMode>\n </>\n );\n }\n\n return isLoading ? (\n <AbsoluteWrapper>\n <Loader />\n </AbsoluteWrapper>\n ) : (\n <>\n {!isLoading && datasourceData.length === 0 ? (\n <AbsoluteWrapper>\n <img src={`/img/fast-intranet/${WidgetsName.DatasourceTable}.png`} alt=\"\" />\n <FormattedMessage id={'WIDGET_Datasource_No_Results'} />\n </AbsoluteWrapper>\n ) : (\n <WidgetTable\n rows={datasourceData}\n columns={columns}\n limit={limit}\n tableHeadColor={tableHeadColor}\n tableHeadTextColor={tableHeadTextColor}\n tableHeadIconColor={tableHeadIconColor}\n tableRowColor={tableRowColor}\n tableRowTextColor={tableRowTextColor}\n tableBorderRadius={tableBorderRadius}\n tableColumnsData={tableColumnsData}\n tableSizedColumns={tableSizedColumns}\n tableSizedColumnsWidth={tableSizedColumnsWidth}\n tableDefaultSortOrder={datasourceSort.order}\n tableDefaultSortName={datasourceSort.name}\n />\n )}\n {mode === 'edit' ? (\n <WrapperEditMode onClick={registerEditor}>\n <JRCHtml\n __html={`${intl.formatMessage({ id: 'WIDGET_Set_Widget' })} <b>${intl.formatMessage({\n id: definition.label,\n })}</b>`}\n />\n </WrapperEditMode>\n ) : (\n <></>\n )}\n </>\n );\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport JRCore from 'App';\nconst WidgetTable = JRCore.registry.getLazyComponent('WidgetTable');\n\nimport { FormattedMessage } from 'react-intl';\n\nconst Loader = JRCore.registry.getLazyComponent('Loader');\n\nimport jamespot, {\n Format,\n WidgetDatasourceValues,\n WidgetDisplayMode,\n WidgetExcelDatasourceTableContent,\n WidgetsName,\n WidgetTableColumn,\n} from 'jamespot-user-api';\n\nimport styled from 'styled-components';\n\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { useAppDispatch } from 'redux/store';\nimport { getVisibleColumns } from './utils';\n\nconst JRCButton = JRCore.registry.getLazyComponent('Button');\nconst JRCHtml = JRCore.registry.getLazyComponent('Html');\nexport const Wrapper = styled.div``;\n\nexport const AbsoluteWrapper = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: ${(props) => props.theme.space.md}px;\n`;\n\nexport const WrapperEditMode = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n gap: ${(props) => props.theme.space.md}px;\n color: ${(props) => props.theme.color.primary};\n cursor: pointer;\n opacity: 0;\n border: 1px solid ${(props) => props.theme.color.primary};\n &:hover {\n background-color: ${(props) => props.theme.color.grey2};\n opacity: 0.9;\n }\n`;\n\nexport const WidgetExcelDatasourceTableWrapper = ({\n uniqid,\n uri,\n limit,\n tableHeadColor,\n tableHeadTextColor,\n tableHeadIconColor,\n tableRowColor,\n tableRowTextColor,\n tableColumnsData = [],\n tableBorderRadius,\n tableSizedColumns,\n tableSizedColumnsWidth,\n mode,\n}: WidgetExcelDatasourceTableContent & { uniqid: string; mode: WidgetDisplayMode }) => {\n const intl = useIntl();\n const dispatch = useAppDispatch();\n const [isEditorOpenOnFirstRender, setIsEditorOpenOnFirstRender] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [datasourceData, setDatasourceData] = useState<Record<string, WidgetDatasourceValues>[]>([]);\n const [datasourceModel, setDatasourceModel] = useState<WidgetTableColumn[]>([]);\n\n const definition = useMemo(() => Widget.definition(WidgetsName.ExcelDatasourceTable), []);\n\n useEffect(() => {\n if (uri !== undefined && tableColumnsData.length !== 0 && datasourceModel.length === 0) {\n setIsLoading(true);\n jamespot.datasource\n .get(uri, Format.VIEW)\n .then((response) => {\n setDatasourceModel(response.result.model);\n setDatasourceData(response.result.data);\n })\n .finally(() => setIsLoading(false));\n }\n }, [uri, tableColumnsData, datasourceModel]);\n\n useEffect(() => {\n if (!uri) {\n setDatasourceModel([]);\n }\n }, [uri]);\n\n const registerEditor = useCallback(() => {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n setTimeout(\n () =>\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: WidgetsName.ExcelDatasourceTable })),\n 0,\n );\n }, [dispatch, uniqid]);\n\n useEffect(() => {\n if (mode === 'view' || mode === 'preview') {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n }\n }, [mode, dispatch]);\n\n useEffect(() => {\n if (!isEditorOpenOnFirstRender && !uri && mode === 'edit') {\n registerEditor();\n setIsEditorOpenOnFirstRender(true);\n }\n }, [dispatch, uniqid, isEditorOpenOnFirstRender, uri, registerEditor, mode]);\n\n const columns = useMemo(\n () => getVisibleColumns(tableColumnsData, datasourceModel),\n [tableColumnsData, datasourceModel],\n );\n\n if (tableColumnsData.length === 0 && !isLoading && mode === 'edit') {\n return (\n <>\n <AbsoluteWrapper onClick={registerEditor}>\n <img src={`/img/fast-intranet/${WidgetsName.ExcelDatasourceTable}.png`} alt=\"\" />\n <FormattedMessage id={definition.label} />\n <JRCButton label=\"GLOBAL_Settings\" />\n </AbsoluteWrapper>\n <WrapperEditMode onClick={registerEditor}>\n <JRCHtml\n __html={`${intl.formatMessage({ id: 'WIDGET_Set_Widget' })} <b>${intl.formatMessage({\n id: definition.label,\n })}</b>`}\n />\n </WrapperEditMode>\n </>\n );\n }\n\n return isLoading ? (\n <AbsoluteWrapper>\n <Loader />\n </AbsoluteWrapper>\n ) : (\n <>\n {!isLoading && datasourceData.length === 0 ? (\n <AbsoluteWrapper>\n <img src={`/img/fast-intranet/${WidgetsName.ExcelDatasourceTable}.png`} alt=\"\" />\n <FormattedMessage id={'WIDGET_Datasource_No_Results'} />\n </AbsoluteWrapper>\n ) : (\n <WidgetTable\n rows={datasourceData}\n columns={columns}\n limit={limit}\n tableHeadColor={tableHeadColor}\n tableHeadTextColor={tableHeadTextColor}\n tableHeadIconColor={tableHeadIconColor}\n tableRowColor={tableRowColor}\n tableRowTextColor={tableRowTextColor}\n tableBorderRadius={tableBorderRadius}\n tableColumnsData={tableColumnsData}\n tableSizedColumns={tableSizedColumns}\n tableSizedColumnsWidth={tableSizedColumnsWidth}\n />\n )}\n {mode === 'edit' ? (\n <WrapperEditMode onClick={registerEditor}>\n <JRCHtml\n __html={`${intl.formatMessage({ id: 'WIDGET_Set_Widget' })} <b>${intl.formatMessage({\n id: definition.label,\n })}</b>`}\n />\n </WrapperEditMode>\n ) : (\n <></>\n )}\n </>\n );\n};\n","import React, { useCallback, useMemo } from 'react';\n\nimport jamespot, {\n WidgetDisplayMode,\n WidgetsRootState,\n ensureWidgetObjectHasMinimumProperties,\n WidgetPresenceContent,\n} from 'jamespot-user-api';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nexport const CSSPaddingMd = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n`;\n\nexport const CSSHref = styled.a`\n cursor: pointer;\n color: ${(props) => props.theme.color.secondary};\n`;\n\nexport const CSSHorizontalAlign = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nimport { Toast, Widget } from 'jamespot-front-business';\n\nexport const WidgetPresenceWrapperClosing = ({\n mode,\n uniqid,\n isClosed,\n}: { mode?: WidgetDisplayMode; uniqid: string } & Pick<WidgetPresenceContent, 'isClosed'>) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n\n const widgetObject = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObject(state, uniqid),\n shallowEqual,\n );\n\n const widgetObjectRights = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObjectRights(state, uniqid),\n shallowEqual,\n );\n\n const canUpdate = useMemo(() => {\n return widgetObject && widgetObjectRights && widgetObjectRights.update;\n }, [widgetObject, widgetObjectRights]);\n\n const handleClosing = useCallback(() => {\n if (mode === 'edit' || !canUpdate) {\n return;\n }\n if (!ensureWidgetObjectHasMinimumProperties(widgetObject)) {\n return;\n }\n\n const content = { isClosed: !isClosed };\n\n jamespot.widget\n .updateWidget({\n id: widgetObject.id,\n type: widgetObject.type,\n uniqid,\n content,\n v2: true,\n })\n .then(() => dispatch(Widget.slice.actions.updateWidget({ uniqid, content })))\n .catch(() => dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Error' })));\n }, [isClosed, mode, uniqid, canUpdate, widgetObject, dispatch]);\n\n return (\n <CSSPaddingMd>\n <CSSHorizontalAlign>\n <CSSHref onClick={handleClosing}>{intl.formatMessage({ id: 'WIDGET_Presence_Closing' })}</CSSHref>\n </CSSHorizontalAlign>\n </CSSPaddingMd>\n );\n};\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport jamespot, {\n ensureWidgetPresenceResponsePayload,\n WidgetPresenceResponse,\n WidgetDisplayMode,\n WidgetPresenceType,\n WidgetsRootState,\n ensureWidgetObjectHasMinimumProperties,\n} from 'jamespot-user-api';\nimport { RTProvider } from 'App';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport JRCore from 'App';\n\nimport styled from 'styled-components';\n\nconst JRCLoader = JRCore.registry.getLazyComponent('Loader');\nconst JRCWidgetPresence = JRCore.registry.getLazyComponent('WidgetPresence');\n\nexport const CSSWidgetPresenceWrapper = styled.div`\n display: flex;\n flex: 1;\n position: relative;\n flex-direction: column;\n`;\n\nexport const CSSWidgetPresenceState = styled.div`\n position: absolute;\n inset: 0;\n background-color: rgba(255, 255, 255, 0.7);\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n`;\n\nimport { Toast, Widget } from 'jamespot-front-business';\nimport { WidgetFooterView } from './components/WidgetFooterView';\nimport { useWidgetRT } from '../hooks';\nimport { WidgetPresenceWrapperClosing } from './JRCWidgetPresenceWrapperClosing';\n\nexport const JRCWidgetPresenceWrapper = ({\n widget,\n mode,\n}: {\n widget: WidgetPresenceType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const dispatch = useDispatch();\n const { limit, limitValue, closing, isClosed } = widget.content;\n const [response, setResponse] = useState<WidgetPresenceResponse>({\n userValue: -1,\n userAvailableList: [],\n userUnavailableList: [],\n userAvailableTotal: 0,\n userUnavailableTotal: 0,\n });\n const [isPendingResponse, setIsPendingResponse] = useState<boolean>(false);\n const [abortController] = useState<AbortController>(new AbortController());\n const ref = useRef<AbortController>(abortController);\n\n const widgetObject = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObject(state, widget.uniqid),\n shallowEqual,\n );\n\n const allRt = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectAllWidgetRTObject(state, widget.uniqid),\n shallowEqual,\n );\n\n const handleClickAvailable = () => (response.userValue === 1 ? handleCancelRespond() : handleRespond(1));\n const handleClickUnavailable = () => (response.userValue === 0 ? handleCancelRespond() : handleRespond(0));\n\n const handleError = useCallback(\n () => dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Error' })),\n [dispatch],\n );\n\n const lockedRespondHandler = useMemo(() => {\n return (closing && isClosed) || mode === 'edit';\n }, [closing, isClosed, mode]);\n\n const handleCancelRespond = useCallback(() => {\n if (lockedRespondHandler) {\n return;\n }\n if (!ensureWidgetObjectHasMinimumProperties(widgetObject)) {\n handleError();\n return;\n }\n\n setIsPendingResponse(true);\n jamespot.widget\n .presenceCancel({ id: Number(widgetObject.id), type: widgetObject.type, uniqid: widget.uniqid })\n .catch(handleError)\n .finally(() => setIsPendingResponse(false));\n }, [widgetObject, widget, handleError, lockedRespondHandler]);\n\n const handleRespond = useCallback(\n (responseValue: 1 | 0) => {\n if (lockedRespondHandler) {\n return;\n }\n if (!ensureWidgetObjectHasMinimumProperties(widgetObject)) {\n handleError();\n return;\n }\n\n setIsPendingResponse(true);\n const payload = {\n id: Number(widgetObject.id),\n type: widgetObject.type,\n uniqid: widget.uniqid,\n value: responseValue,\n };\n if (!ensureWidgetPresenceResponsePayload(payload)) {\n setIsPendingResponse(false);\n dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Payload_Error' }));\n return;\n }\n jamespot.widget\n .presenceRespond(payload, ref.current.signal)\n .catch(handleError)\n .finally(() => setIsPendingResponse(false));\n },\n [widgetObject, dispatch, widget, handleError, lockedRespondHandler],\n );\n\n const handleResponse = useCallback(\n (id: number, type: string, uniqid: string) => {\n if (mode === 'edit') {\n return;\n }\n if (limit && limitValue && response.userAvailableTotal >= limitValue) {\n dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Limit_Response_Error' }));\n return;\n }\n\n jamespot.widget\n .presenceGetResponse({ id, type, uniqid }, ref.current.signal)\n .then((response) => {\n setResponse(response.result);\n })\n .catch((err) => !err.aborted && handleError());\n },\n [dispatch, response.userAvailableTotal, limit, limitValue, handleError, mode],\n );\n\n useEffect(() => {\n return () => {\n if (ref && ref.current) {\n ref.current.abort();\n }\n };\n }, []);\n\n useEffect(() => {\n if (!ensureWidgetObjectHasMinimumProperties(widgetObject)) {\n return;\n }\n\n handleResponse(widgetObject.id, widgetObject.type, widget.uniqid);\n }, [handleResponse, widgetObject, widget]);\n\n useEffect(() => {\n if (!Array.isArray(allRt)) {\n return;\n }\n const lastRt = allRt.at(-1);\n if (!lastRt) {\n return;\n }\n\n if (lastRt.object.id === Number(widgetObject?.id) && lastRt.uniqid === widget.uniqid && !isPendingResponse) {\n handleResponse(lastRt.object.id, lastRt.object.type, widget.uniqid);\n }\n }, [allRt, widgetObject, handleResponse, widget, isPendingResponse]);\n\n return (\n <RTProvider\n useRT={() => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useWidgetRT(widget.uniqid);\n }}>\n <CSSWidgetPresenceWrapper>\n <JRCWidgetPresence\n limit={limit}\n limitValue={limitValue}\n userAvailableList={response.userAvailableList}\n userUnavailableList={response.userUnavailableList}\n userValue={response.userValue}\n userAvailableTotal={response?.userAvailableTotal}\n userUnavailableTotal={response?.userUnavailableTotal}\n isClosed={closing && isClosed}\n handleClickAvailable={handleClickAvailable}\n handleClickUnavailable={handleClickUnavailable}\n />\n {isPendingResponse && (\n <CSSWidgetPresenceState>\n <JRCLoader size={'l'} />\n </CSSWidgetPresenceState>\n )}\n {closing && !isClosed && (\n <WidgetPresenceWrapperClosing mode={mode} uniqid={widget.uniqid} isClosed={isClosed} />\n )}\n {mode === 'view' && <WidgetFooterView uniqid={widget.uniqid} name={widget.name} mode={mode} />}\n </CSSWidgetPresenceWrapper>\n </RTProvider>\n );\n};\n","import React from 'react';\n\nimport { Widget } from 'jamespot-front-business';\nimport { WidgetsRootState } from 'jamespot-user-api';\nimport { shallowEqual, useSelector } from 'react-redux';\n\nimport styled from 'styled-components';\n\nexport const CSSWidgetTitle = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n border-bottom: 1px solid ${(props) => props.theme.color.grey1};\n`;\n\nexport const WidgetTitle = ({ uniqid }: { uniqid: string }) => {\n const widgetWrapper = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid),\n shallowEqual,\n );\n return <CSSWidgetTitle>{widgetWrapper?.title}</CSSWidgetTitle>;\n};\n","import { Widget } from 'jamespot-front-business';\nimport { JRCInputText } from 'jamespot-react-components';\nimport { WidgetsRootState } from 'jamespot-user-api';\nimport React, { useState, useEffect } from 'react';\n\nimport { useForm } from 'react-hook-form';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nconst DELAY_DEBOUNCE_VALUE = 800;\n\nexport const WidgetTitleEdit = ({ uniqid }: { uniqid: string }) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const [title, setTitle] = useState<string>('');\n const widgetWrapper = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid),\n shallowEqual,\n );\n\n const { control, watch } = useForm({\n defaultValues: { widgetTitle: widgetWrapper?.title ?? '' },\n criteriaMode: 'all',\n });\n\n useEffect(() => {\n const delayDebounce = setTimeout(() => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ uniqid, title }));\n }, DELAY_DEBOUNCE_VALUE);\n\n return () => clearTimeout(delayDebounce);\n }, [title, dispatch, uniqid]);\n\n useEffect(() => {\n const subscription = watch((data) => {\n setTitle(data.widgetTitle ?? '');\n });\n return () => subscription.unsubscribe();\n }, [watch, dispatch, uniqid]);\n\n return (\n <JRCInputText\n name={'widgetTitle'}\n control={control}\n placeholder={intl.formatMessage({ id: 'GLOBAL_Title' })}\n width=\"100%\"\n />\n );\n};\n","import React, { useCallback, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\nimport { WidgetTitleEdit } from './WidgetTitleEdit';\nimport { JRCIconButton } from 'jamespot-react-components';\nimport { useAppDispatch } from 'redux/store';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { WidgetsName } from 'jamespot-user-api';\n\nimport JRCore from 'App';\n\nconst JRCButton = JRCore.registry.getLazyComponent('Button');\nconst JRCModalLayout = JRCore.registry.getLazyComponent('ModalLayout');\nconst JRCModalContent = JRCore.registry.getLazyComponent('ModalContent');\n\nexport const CSSModalFooter = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n display: flex;\n flex-direction: row-reverse;\n`;\n\nexport const CSSWidgetHeaderEdit = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n gap: ${(props) => props.theme.space.sm}px;\n padding: ${(props) => props.theme.space.sm}px;\n border-bottom: 1px solid ${(props) => props.theme.color.grey1};\n`;\n\nexport const CSSWidgetHeaderEditTitle = styled.div`\n flex: 1;\n display: flex;\n :first-child {\n margin: 0px !important;\n }\n`;\n\nexport const CSSWidgetHeaderEditActions = styled.div`\n display: flex;\n gap: ${(props) => props.theme.space.sm}px;\n`;\n\nexport const WidgetHeaderEdit = ({\n uniqid,\n name,\n handleOpenEditor,\n}: {\n uniqid: string;\n name: WidgetsName;\n handleOpenEditor?: () => void;\n}) => {\n const dispatch = useAppDispatch();\n const intl = useIntl();\n const [isOpen, setIsOpen] = useState<boolean>(false);\n\n const handleOnClick = useCallback(() => {\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid,\n name,\n }),\n );\n }, [uniqid, dispatch, name]);\n\n const handleRemoveWidget = useCallback(() => {\n dispatch(Widget.slice.actions.flushWidget({ uniqid }));\n }, [uniqid, dispatch]);\n\n return (\n <>\n <CSSWidgetHeaderEdit>\n <CSSWidgetHeaderEditTitle>\n <WidgetTitleEdit uniqid={uniqid} />\n </CSSWidgetHeaderEditTitle>\n <CSSWidgetHeaderEditActions>\n <JRCIconButton\n icon=\"icon-pencil\"\n bg={'grey1'}\n bgHover={'grey2'}\n color={'grey5'}\n iconSize={14}\n onClick={handleOpenEditor ?? handleOnClick}\n title={intl.formatMessage({ id: 'BUTTON_Title_Open_Edit_Panel' })}\n />\n <JRCIconButton\n icon=\"icon-trash\"\n bg={'grey1'}\n bgHover={'grey2'}\n color={'grey5'}\n iconSize={14}\n onClick={() => setIsOpen(true)}\n title={intl.formatMessage({ id: 'BUTTON_Title_Open_Remove_Widget' })}\n />\n </CSSWidgetHeaderEditActions>\n </CSSWidgetHeaderEdit>\n {isOpen && (\n <JRCModalLayout enableClickAwayCloseModal={true} open={isOpen} closeHandler={() => setIsOpen(false)}>\n <JRCModalContent\n overflow={'scroll'}\n title={intl.formatMessage({ id: 'WIDGET_Remove_Widget' })}\n onClickIconClose={() => setIsOpen(false)}>\n {intl.formatMessage({ id: 'WIDGET_Delete_Widget_Confirmation' })}\n </JRCModalContent>\n <CSSModalFooter>\n <JRCButton label={intl.formatMessage({ id: 'GLOBAL_Confirm' })} onClick={handleRemoveWidget} />\n </CSSModalFooter>\n </JRCModalLayout>\n )}\n </>\n );\n};\n","import React from 'react';\n\nimport {\n CombinedWidgetType,\n ensureWidgetArticleAttachmentType,\n ensureWidgetArticleButtonType,\n ensureWidgetArticleGalleryType,\n ensureWidgetArticleImageType,\n ensureWidgetArticleSliderType,\n ensureWidgetArticleTextType,\n ensureWidgetArticleTitleType,\n ensureWidgetCheckListType,\n ensureWidgetDatasourceTableType,\n ensureWidgetExcelDatasourceTableType,\n ensureWidgetPresenceType,\n WidgetDisplayMode,\n} from 'jamespot-user-api';\n\nimport styled from 'styled-components';\n\nexport const CSSWidgetWithTitle = styled.div`\n display: flex;\n flex: 1;\n flex-direction: column;\n`;\n\nexport const CSSWidgetEditTitle = styled.div`\n padding: 0 ${(props) => props.theme.space.md}px;\n border-bottom: 1px solid ${(props) => props.theme.color.grey1};\n`;\n\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';\nimport { WidgetDatasourceTableWrapper } from './wrapper/JRCWidgetDatasourceTableWrapper';\nimport { WidgetExcelDatasourceTableWrapper } from './wrapper/JRCWidgetExcelDatasourceTableWrapper';\nimport { JRCWidgetPresenceWrapper } from './wrapper/JRCWidgetPresenceWrapper';\n\nimport { WidgetTitle } from './wrapper/components/WidgetTitle';\n\nimport { WidgetHeaderEdit } from './wrapper/components/WidgetHeaderEdit';\n\nexport const DisplayWidget = ({\n widget,\n width,\n inplace = false,\n mode = 'view',\n onWidgetUpdate,\n cannotDisplayComponent,\n}: {\n widget: CombinedWidgetType;\n width?: number | undefined;\n inplace: boolean;\n mode: WidgetDisplayMode;\n onWidgetUpdate?: () => void;\n onClick: () => void;\n cannotDisplayComponent?: (widget: string) => React.ReactNode;\n}) => {\n const { name } = widget;\n\n if (ensureWidgetArticleButtonType(widget)) {\n return <JRCWidgetArticleButtonWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetArticleGalleryType(widget)) {\n return <JRCWidgetArticleGalleryWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetArticleAttachmentType(widget)) {\n return <JRCWidgetArticleAttachmentWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetArticleImageType(widget)) {\n return <JRCWidgetArticleImageWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetArticleSliderType(widget)) {\n return <JRCWidgetArticleSliderWrapper widget={widget} inplace={inplace} mode={mode} width={width ?? 800} />;\n } else if (ensureWidgetArticleTitleType(widget)) {\n return <JRCWidgetArticleTitleWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetArticleTextType(widget)) {\n return <JRCWidgetArticleTextWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetExcelDatasourceTableType(widget)) {\n return (\n <CSSWidgetWithTitle>\n <WidgetTitle uniqid={widget.uniqid} />\n <WidgetExcelDatasourceTableWrapper {...widget.content} uniqid={widget.uniqid} mode={mode} />\n </CSSWidgetWithTitle>\n );\n } else if (ensureWidgetDatasourceTableType(widget)) {\n return (\n <CSSWidgetWithTitle>\n <WidgetTitle uniqid={widget.uniqid} />\n <WidgetDatasourceTableWrapper {...widget.content} uniqid={widget.uniqid} mode={mode} />\n </CSSWidgetWithTitle>\n );\n } else if (ensureWidgetCheckListType(widget)) {\n return (\n <CSSWidgetWithTitle>\n {mode === 'edit' ? (\n <WidgetHeaderEdit name={widget.name} uniqid={widget.uniqid} />\n ) : (\n <WidgetTitle uniqid={widget.uniqid} />\n )}\n <JRCWidgetCheckListWrapper\n widget={widget}\n inplace={inplace}\n mode={mode}\n onWidgetUpdate={onWidgetUpdate}\n />\n </CSSWidgetWithTitle>\n );\n } else if (ensureWidgetPresenceType(widget)) {\n return (\n <CSSWidgetWithTitle>\n {mode === 'edit' ? (\n <WidgetHeaderEdit name={widget.name} uniqid={widget.uniqid} />\n ) : (\n <WidgetTitle uniqid={widget.uniqid} />\n )}\n <JRCWidgetPresenceWrapper widget={widget} inplace={inplace} mode={mode} />\n </CSSWidgetWithTitle>\n );\n } else {\n return cannotDisplayComponent ? <>{cannotDisplayComponent(name)}</> : <>cannot display widget ({name})</>;\n }\n};\n","import styled from 'styled-components';\n\nconst INPUT_HEIGHT = 50;\nconst RADIUS = 8;\n\nexport const CSSHiddenDiv = styled.div`\n height: 0;\n overflow: hidden;\n`;\n\nexport const CSSEmptyText = styled.div`\n color: ${(props) => props.theme.color.grey3};\n font-style: italic;\n`;\n\nexport const CSSWrapperText = styled.div<{ color?: string }>`\n display: flex;\n flex: 1;\n width: 100%;\n border: 0;\n min-height: ${INPUT_HEIGHT}px;\n margin: 0;\n align-items: center;\n border-radius: ${RADIUS}px;\n padding: 8px;\n cursor: pointer;\n gap: 10px;\n color: ${(props) => (props.color ? props.color : props.theme.font.color)};\n transition: opacity 0.4s;\n\n &:hover {\n img {\n filter: grayscale(0);\n opacity: 1;\n }\n }\n\n img {\n filter: grayscale(1);\n opacity: 0.4;\n }\n`;\n\nexport const CSSUploadFileWrapper = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n min-height: 200px;\n`;\n\nexport const CSSWidgetWrapper = styled.div`\n display: flex;\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, { useCallback } 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 JRCore from 'App';\n\nconst BETA_JRCDoubleClick = JRCore.registry.getLazyComponent('DoubleClick');\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 = useCallback(\n (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 [child.x, child.y],\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 [mouse.x, mouse.y, mouseIsDown, start.x, start.y],\n );\n\n const handleMouseUp = useCallback(() => {\n setMouseDown(false);\n onMouseUp({ x: child.x, y: child.y });\n }, [child.x, child.y, onMouseUp]);\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, handleMouseUp]);\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 {\n ensureWidgetArticleButtonType,\n jCommentList,\n WidgetDisplayMode,\n WidgetsRootState,\n WidgetWrapperProps,\n} from 'jamespot-user-api';\nimport { useComponentVisible } from './hooks';\nimport { DisplayWidget } from './Widget';\nimport { CSSWidgetWrapper } from './Widget.style';\nimport { WidgetLayer } from './WidgetLayer/WidgetLayer';\nimport { WidgetState } from './WidgetState';\n\ntype WidgetWrapperCoreProps = {\n uniqid: string;\n widgetObject?: Partial<jCommentList>;\n widget: WidgetWrapperProps;\n inplace?: boolean;\n mode: WidgetDisplayMode;\n width?: number | undefined;\n onWidgetUpdate?: () => void;\n cannotDisplayComponent?: (widget: string) => React.ReactNode;\n};\n\n/*\n This is a widget wrapper\n*/\nexport const WidgetWrapperCore = ({\n uniqid,\n widgetObject,\n widget,\n inplace = true,\n mode,\n width,\n onWidgetUpdate,\n cannotDisplayComponent,\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 (widgetObject) {\n dispatch(Widget.slice.actions.registerWidgetObject({ uniqid, object: widgetObject }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (widget) {\n /*\n Register widget\n */\n dispatch(Widget.slice.actions.registerWidget({ uniqid, widget }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (!isComponentVisible) {\n if (uniqid === currentEditableWidgetId) {\n dispatch(Widget.slice.actions.setEditableWidgetId({ uniqid: undefined }));\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isComponentVisible]);\n\n useEffect(() => {\n if (isComponentVisible !== isActive) {\n setIsComponentVisible(isActive);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isActive]);\n\n if (widgetWrapper === undefined) {\n return <>This widget cannot be displayed</>;\n }\n\n const _widget = widgetWrapper.widget;\n\n const onClick = () => {\n if (mode === 'edit') {\n registerEditor();\n } else {\n if (ensureWidgetArticleButtonType(_widget)) {\n switch (_widget.content.openingType) {\n case 'link':\n if (_widget.content.openingTypeLink) {\n window.open(_widget.content.openingTypeLink.url, _widget.content.openingTypeLink.target);\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 <CSSWidgetWrapper\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={{\n ...widgetWrapper.widget,\n ...(widgetWrapper.title && {\n title: widgetWrapper.title,\n }),\n }}\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 </CSSWidgetWrapper>\n );\n }\n\n return (\n <CSSWidgetWrapper onClick={registerEditor}>\n <DisplayWidget\n widget={{\n ...widgetWrapper.widget,\n ...(widgetWrapper.title && {\n title: widgetWrapper.title,\n }),\n }}\n inplace={inplace}\n mode={mode}\n width={width}\n onClick={onClick}\n onWidgetUpdate={onWidgetUpdate}\n cannotDisplayComponent={cannotDisplayComponent}\n />\n <WidgetLayer uniqid={uniqid} mode={mode} />\n <WidgetState name={widgetWrapper.widget.name} uniqid={widgetWrapper.widget.uniqid} inplace={inplace} />\n </CSSWidgetWrapper>\n );\n};\n\nexport default WidgetWrapperCore;\n","import styled from 'styled-components';\nexport const CSSCommentsBlocWidgetWrapper = styled.div`\n border-radius: ${(props) => props.theme.space.sm}px;\n border: 1px solid ${(props) => props.theme.color.grey1};\n background-color: ${(props) => props.theme.color.white};\n overflow: hidden;\n`;\n","import { Widget } from 'jamespot-front-business';\n\nimport { WidgetWrapperProps } from 'jamespot-user-api';\n\nimport React from 'react';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual, useSelector } from 'react-redux';\n\nimport WidgetWrapperCore from '../widgets/WidgetWrapperCore';\nimport JRCore from 'App';\nimport { CSSCommentsBlocWidgetWrapper } from './CommentsBloc.styles';\n\nconst JRCMessage = JRCore.registry.getLazyComponent('Message');\n\nexport const CommentsBlocAddCommentWidgetsWrapper = ({ widgets }: { widgets: WidgetWrapperProps[] }) => {\n const intl = useIntl();\n const flushedWidgets = useSelector(Widget.selectors.selectFlushedWidgets, shallowEqual);\n\n return (\n <>\n {widgets\n .filter((el) => !flushedWidgets.includes(el.widget.uniqid))\n .map(\n (widget) =>\n widget &&\n widget.widget && (\n <CSSCommentsBlocWidgetWrapper key={widget.widget.uniqid}>\n <WidgetWrapperCore\n uniqid={widget.widget.uniqid}\n widget={widget}\n inplace\n mode={'edit'}\n cannotDisplayComponent={(widget) => (\n <JRCMessage\n variant={'info'}\n message={intl.formatMessage({ id: 'WIDGET_Cannot_Display' }, { widget })}\n />\n )}\n />\n </CSSCommentsBlocWidgetWrapper>\n ),\n )}\n </>\n );\n};\n","import { Widget } from 'jamespot-front-business';\n\nimport { WidgetDisplayMode, WidgetWrapperProps } from 'jamespot-user-api';\nimport { jCommentList } from 'jamespot-user-api/lib/src/types/comment';\nimport React from 'react';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual, useSelector } from 'react-redux';\nimport { CSSCommentsBlocWidgetWrapper } from './CommentsBloc.styles';\n\nimport WidgetWrapperCore from '../widgets/WidgetWrapperCore';\nimport JRCore from 'App';\n\nconst JRCMessage = JRCore.registry.getLazyComponent('Message');\n\nexport const CommentsBlocCommentWidgetsWrapper = (props: {\n comment: jCommentList;\n widgets: WidgetWrapperProps[];\n mode: WidgetDisplayMode;\n inplace: boolean;\n handleWidgetUpdate: () => void;\n handleWidgetRemove: () => void;\n}) => {\n const intl = useIntl();\n const { widgets, comment, inplace, mode, handleWidgetUpdate } = props;\n const flushedWidgets = useSelector(Widget.selectors.selectFlushedWidgets, shallowEqual);\n\n return (\n <>\n {widgets\n .filter((el) => !flushedWidgets.includes(el.widget.uniqid))\n .map(\n (widget) =>\n widget && (\n <CSSCommentsBlocWidgetWrapper key={widget.widget.uniqid}>\n <WidgetWrapperCore\n uniqid={widget.widget.uniqid}\n widgetObject={comment}\n widget={widget}\n inplace={inplace}\n mode={mode}\n onWidgetUpdate={handleWidgetUpdate}\n cannotDisplayComponent={(widget) => (\n <JRCMessage\n variant={'info'}\n message={intl.formatMessage({ id: 'WIDGET_Cannot_Display' }, { widget })}\n />\n )}\n />\n </CSSCommentsBlocWidgetWrapper>\n ),\n )}\n </>\n );\n};\n","import { getTinyMCEMentionsQueries } from 'App';\nimport {\n Application,\n ApplicationRootState,\n Comment,\n CommentRootState,\n Hook,\n HookRootState,\n Model,\n Platform,\n TinyMCE,\n Toast,\n UserCurrent,\n Widget,\n} from 'jamespot-front-business';\nimport { DriveOrFilebank } from 'jamespot-react-components';\nimport jApi, { AddCommentParams, UpdateCommentParams, WidgetWrapperProps } 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 useCommentRT from '../hooks/useCommentRT';\nimport useCommentsLikeRT from '../hooks/useCommentsLikeRT';\nimport { EditorsPanel } from './widgets/components/WidgetEditorPanel';\nimport { WidgetList } from './widgets/WidgetList/WidgetList';\n\nimport JRCore from 'App';\nimport { CommentsBlocAddCommentWidgetsWrapper } from './comments/CommentsBlocAddCommentWidgetsWrapper';\nimport { CommentsBlocCommentWidgetsWrapper } from './comments/CommentsBlocCommentWidgetsWrapper';\n\nconst JRCCommentsBloc = JRCore.registry.getLazyComponent('JRCCommentsBloc');\n\nexport type CommentsBlocProps = {\n articleId: number;\n variant?: 'modal' | 'inline';\n canComment: boolean;\n commentType?: 'comment' | 'commentResponse';\n socialQuestion?: {\n isResolved: boolean;\n responseId?: number;\n canSelectResponse: boolean;\n };\n};\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 CSSCommentsBlocWidgetWrapper = styled.div`\n border-radius: ${(props) => props.theme.space.sm}px;\n border: 1px solid ${(props) => props.theme.color.grey1};\n background-color: ${(props) => props.theme.color.white};\n overflow: hidden;\n`;\n\nexport const CommentsBloc = ({\n articleId,\n variant = 'inline',\n canComment,\n commentType = 'comment',\n socialQuestion,\n}: CommentsBlocProps) => {\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[]>([]);\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 tinyMCEExtendedOptions = useSelector(TinyMCE.selectors.selectTinyMCEExtendedOptions);\n const models = useSelector(Model.selectors.selectAll);\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 const [socialQuestionOptions, setSocialQuestionOptions] = useState(socialQuestion);\n\n useCommentRT(articleId);\n\n useCommentsLikeRT(\n commentsList?.list.map((c) => c.id),\n articleId,\n );\n\n const onError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\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 jApi.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 jApi.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 jApi.network\n .token()\n .then((res) => {\n setToken(res.result);\n setTokenLoading(false);\n })\n .catch((e) => {\n onError(e.errorMsg);\n });\n }\n }, [onError, token, tokenLoading]);\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 jApi.article\n .addComment({\n ...params,\n widgets: finalWidget,\n token,\n idArticle: articleId,\n type: commentType,\n })\n .then(() => {\n setWidgets([]);\n });\n fetchToken();\n } catch (e: any) {\n onError(e.errorMsg);\n } finally {\n setLoading(false);\n }\n }\n },\n [articleId, fetchToken, onError, commentType, token, widgetIds, widgets],\n );\n\n useEffect(() => {\n fetchToken();\n }, [fetchToken]);\n\n useEffect(() => {\n dispatch(Comment.actions.fetchComments({ idArticle: articleId }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (!commentsList || !commentsList.list) {\n return;\n }\n commentsList.list.forEach((comment) => {\n comment._widgets?.forEach((widget) => {\n dispatch(Widget.slice.actions.registerWidgetObject({ uniqid: widget.widget.uniqid, object: comment }));\n dispatch(\n Widget.slice.actions.registerWidgetObjectRights({\n uniqid: widget.widget.uniqid,\n rights: comment._right,\n }),\n );\n });\n });\n }, [commentsList, dispatch]);\n\n return (\n <>\n {tinyMCECommonOptions && tinyMCEExtendedOptions && (\n <>\n <CommentsBlocWrapper>\n <JRCCommentsBloc\n canComment={canComment} // todo: convert to hlandlers\n loading={loading}\n token={token}\n comments={commentsList?.list}\n onComment={onComment} // todo: convert to hlandlers\n onCommentUpdate={onCommentUpdate} // todo: convert to hlandlers\n onCommentDelete={onCommentDelete} // todo: convert to hlandlers\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([widget]); // COMMENT DO NOT SUPPORT MULTI 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={<CommentsBlocAddCommentWidgetsWrapper widgets={widgets} />}\n existingWidgetsWrapperComponent={(comment, widgets, mode, inplace = true) => (\n <CommentsBlocCommentWidgetsWrapper\n comment={comment}\n widgets={widgets}\n mode={mode}\n inplace={inplace}\n handleWidgetUpdate={onWidgetUpdate}\n handleWidgetRemove={fetchToken}\n />\n )}\n currentUser={currentUser}\n tinyMCEConfig={{\n commonOptions: {\n ...tinyMCECommonOptions,\n toolbar: tinyMCEExtendedOptions.commentsToolbar,\n },\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 [\n ...(fileBank && driveHook ? ['fileBank'] : []),\n ...Hook.utils.buildDrivesArrayFromObject(driveHook?.drives),\n ] as DriveOrFilebank[]\n }\n deleteFile={async (articleId) => {\n if (!token) return;\n await jApi.file.deleteFile(articleId, 'attachment', token);\n }} // TODO - HANDLERS\n variant={variant}\n handlers={{\n drive: jApi.drive,\n filebank: jApi.filebank,\n file: jApi.file,\n user: jApi.user,\n socialAction: jApi.socialAction,\n questionAnswer: jApi.questionAnswer,\n }}\n socialQuestion={\n socialQuestionOptions\n ? {\n ...socialQuestionOptions,\n onSelectResponse: (responseId: number) => {\n setSocialQuestionOptions({\n ...socialQuestionOptions,\n responseId,\n isResolved: true,\n });\n },\n onUnselectResponse: () => {\n setSocialQuestionOptions({\n ...socialQuestionOptions,\n responseId: undefined,\n isResolved: false,\n });\n },\n }\n : undefined\n }\n articleId={articleId}\n />\n <EditorsPanel />\n </CommentsBlocWrapper>\n </>\n )}\n </>\n );\n};\n","import { useDispatch } from 'react-redux';\nimport JRCore from '../App';\nimport { useEffect, useMemo } from 'react';\nimport { Comment } from 'jamespot-front-business';\n\nconst useCommentsLikeRT = (idComments: number[] | undefined, idArticle: number) => {\n const dispatch = useDispatch();\n const socket = useMemo(() => JRCore.socket, []);\n const rtHandlers = useMemo(\n () => Comment.getCommentsLikeRTHandlers(dispatch, idComments, idArticle),\n [dispatch, idComments, idArticle],\n );\n\n useEffect(() => {\n rtHandlers.forEach((handler) => {\n socket.onMessage(handler.namespace, handler.function, handler.handler);\n });\n return () => {\n rtHandlers.forEach((handler) => {\n socket.offMessage(handler.namespace, handler.function, handler.handler);\n });\n };\n }, [rtHandlers, socket]);\n};\n\nexport default useCommentsLikeRT;\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, useCallback } from 'react';\nimport { AudienceAutocomplete } from 'jamespot-user-api';\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 FormElement = (\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};\nconst FormElm = React.forwardRef(FormElement);\n\nconst FieldsetWrapper = styled.div<{ stretch?: boolean }>`\n ${(props) =>\n props.stretch &&\n `\n flex: 1;\n`}\n`;\n\nexport type DisplayFormFieldsConfig<TFieldValues extends FieldValues> = 'all' | FieldsWith<'input', TFieldValues>;\n\nexport type DisplayFormProps<TFieldValues extends FieldValues> = {\n type: string;\n fields: DisplayFormFieldsConfig<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 forceMandatory?: boolean;\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, props.forceMandatory);\n\n const { handleSubmit, control, reset, ...formFn } = useForm({\n defaultValues: {\n ...defaultValues,\n ...props.defaultValues,\n },\n criteriaMode: 'all',\n });\n\n const formatValuesForSubmit = useCallback(\n (values: any) => {\n const toRet: any = {};\n Object.keys(values).forEach((k) => {\n const widget = configuration.find((c) => c.name === k)?.widget;\n switch (widget?.type) {\n case 'audience':\n toRet[k] = values[k].map((v: AudienceAutocomplete) => v.uri).join(',');\n break;\n case 'taxonomy':\n toRet[k] = values[k].map((v: any) => v.title).join(',');\n break;\n default:\n toRet[k] = values[k];\n break;\n }\n });\n return toRet;\n },\n [configuration],\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 getFormattedValues: () => {\n return formatValuesForSubmit(formFn.getValues());\n },\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\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","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\n// This is a mask to hide top shadow. EDITOR_WIDTH + 20 is used to keep the left shadow\nexport const CSSEditorMask = styled.div`\n position: relative;\n overflow: hidden;\n top: 91px;\n width: ${EDITOR_WIDTH + 20}px;\n`;\n\nexport const CSSEditor = styled.div<{ position: 'left' | 'right' }>`\n position: absolute;\n top: 0;\n ${(props) => (props.position === 'left' ? 'left: 0px;' : '')}\n ${(props) => (props.position === 'right' ? 'right: -1000px;' : '')}\n width: ${EDITOR_WIDTH}px;\n bottom: 90px;\n display: flex;\n background-color: ${(props) => props.theme.color.white};\n flex-direction: row;\n transition: all 0.4s;\n box-shadow: -4px 0px 20px 0px #00000017;\n\n &.animate {\n right: 0px;\n }\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 position: relative;\n`;\n\nexport const CSSEditorIsBusy = styled.div`\n position: absolute;\n inset: 0;\n background-color: rgba(255, 255, 255, 0.8);\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nexport const CSSEditorIsLocked = styled.div`\n position: absolute;\n inset: 0;\n background-color: ${(props) => props.theme.color.white};\n padding: ${(props) => props.theme.space.md}px;\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;\nexport const EDITOR_CONTENT_WIDTH = EDITOR_WIDTH - EDITOR_MENU_WIDTH;\n","import React from 'react';\n\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { CSSEditorAction, CSSEditorHeader, CSSEditorLabel, CSSEditorMenuButton } from './style';\nimport { WidgetEditor, EditorsRootState } from 'jamespot-front-business';\nimport JRCore from 'App';\n\nconst JRCButton = JRCore.registry.getLazyComponent('Button');\nconst JRCIcon = JRCore.registry.getLazyComponent('Icon');\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 JRCore from 'App';\nimport { EditorsRootState, Hook, Toast, updateWidgetContent, Widget, WidgetEditor } from 'jamespot-front-business';\nimport jamespot, {\n CombinedWidgetContent,\n ensureWidgetArticleAttachmentType,\n ensureWidgetArticleButtonType,\n ensureWidgetArticleGalleryType,\n ensureWidgetArticleImageType,\n ensureWidgetArticleSliderType,\n ensureWidgetArticleTextType,\n ensureWidgetArticleTitleType,\n ensureWidgetCheckListType,\n ensureWidgetDatasourceTableType,\n ensureWidgetExcelDatasourceTableType,\n ensureWidgetPresenceType,\n HookListType,\n jObjectLittle,\n WidgetArticleAttachmentContent,\n WidgetArticleButtonContent,\n WidgetArticleGalleryContent,\n WidgetArticleImageContent,\n WidgetArticleSliderContent,\n WidgetArticleTextContent,\n WidgetArticleTitleContent,\n WidgetDatasourceTableContent,\n WidgetPresenceContent,\n WidgetsRootState,\n WidgetStateProps,\n} from 'jamespot-user-api';\nimport React, { useMemo } from 'react';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\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 WidgetCheckListEditor = JRCore.registry.getLazyComponent('WidgetCheckListEditor');\n\nconst WidgetDatasourceTableEditor = JRCore.registry.getLazyComponent('WidgetDatasourceTableEditor');\nconst WidgetExcelDatasourceTableEditor = JRCore.registry.getLazyComponent('WidgetExcelDatasourceTableEditor');\n\nconst WidgetPresenceEditor = JRCore.registry.getLazyComponent('WidgetPresenceEditor');\n\n/*\n Editor Factory\n*/\nexport const Editor = ({ uniqid }: { uniqid: string }) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const token = useSelector(Widget.selectors.selectToken);\n const widgetWrapper = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid),\n shallowEqual,\n );\n const widgetObject = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObject(state, uniqid),\n shallowEqual,\n );\n\n const onSaveCallback = useSelector(\n (state: EditorsRootState) => WidgetEditor.selectors.selectEditor(state, uniqid)?.onSave,\n shallowEqual,\n );\n\n const handleHookIsActive = (name: keyof HookListType) => {\n return Hook.selectors.selectHook(JRCore.store.getState(), name)?.isActive;\n };\n\n const widgetObjectRights = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObjectRights(state, uniqid),\n shallowEqual,\n );\n const canUpdate = useMemo(() => {\n return widgetObjectRights && widgetObjectRights.update;\n }, [widgetObjectRights]);\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 if (onSaveCallback) {\n onSaveCallback(content);\n }\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 const validateWidgetObject = (object?: Partial<jObjectLittle>): object is jObjectLittle => {\n return object !== undefined && object.id !== undefined && object.type !== undefined;\n };\n\n const widget = widgetWrapper?.widget;\n\n if (!widget) return null;\n\n if (ensureWidgetArticleButtonType(widget)) {\n return (\n <WidgetButtonEditor\n {...widget.content}\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleButtonContent>(uniqid, content, false));\n }}\n onSave={() => onSave({})}\n />\n );\n } else if (ensureWidgetArticleGalleryType(widget)) {\n return (\n <WidgetArticleGalleryEditor\n token={token}\n content={widget.content}\n onChange={(content) =>\n dispatch(updateWidgetContent<WidgetArticleGalleryContent>(uniqid, content, false))\n }\n onSave={onSave}\n onStateChange={onStateChange}\n />\n );\n } else if (ensureWidgetArticleAttachmentType(widget)) {\n return (\n <WidgetArticleAttachmentEditor\n token={token}\n content={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 } else if (ensureWidgetArticleImageType(widget)) {\n return (\n <WidgetArticleImageEditor\n content={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 } else if (ensureWidgetArticleSliderType(widget)) {\n return token !== undefined ? (\n <WidgetArticleSliderEditor\n slides={widget.content.slides ?? []}\n loop={widget.content.loop ?? false}\n useDots={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 } else if (ensureWidgetArticleTitleType(widget)) {\n return (\n <WidgetArticleTitleEditor\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleTitleContent>(uniqid, content, false));\n }}\n onSave={onSave}\n content={widget.content}\n onOpen={onOpen}\n />\n );\n } else if (ensureWidgetArticleTextType(widget)) {\n return (\n <WidgetArticleTextEditor\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleTextContent>(uniqid, content, false));\n }}\n onSave={onSave}\n content={widget.content}\n />\n );\n } else if (ensureWidgetPresenceType(widget)) {\n return (\n <WidgetPresenceEditor\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetPresenceContent>(uniqid, content, false));\n }}\n onSave={onSave}\n onStateChange={onStateChange}\n {...widget.content}\n />\n );\n } else if (ensureWidgetCheckListType(widget)) {\n return (\n <WidgetCheckListEditor\n token={token}\n uniqid={widget.uniqid}\n content={widget.content}\n onChangeContent={(uniqid, content) => {\n dispatch(updateWidgetContent(uniqid, content, false));\n }}\n onChangeWrapper={(content) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ ...content }));\n }}\n onSave={(uniqid, content) => {\n if (!validateWidgetObject(widgetObject)) {\n onSave(content);\n return;\n }\n\n jamespot.widget\n .updateWidget({\n id: widgetObject.id,\n uniqid: uniqid,\n type: widgetObject.type,\n title: widgetWrapper.title,\n content,\n })\n .then(() => {\n onSave(content);\n })\n .catch((e: any) => {\n dispatch(\n Toast.actions.error({\n label: e.errorMsg ?? intl.formatMessage({ id: 'GLOBAL_Error' }),\n }),\n );\n });\n }}\n canEditCollaboration={canUpdate ?? false}\n />\n );\n } else if (ensureWidgetExcelDatasourceTableType(widget)) {\n return (\n <WidgetExcelDatasourceTableEditor\n {...widget.content}\n uri={widget.content.uri}\n limit={widget.content.limit ?? 20}\n hook={{ isActive: handleHookIsActive }}\n handlers={{\n jamespot: {\n datasource: jamespot.datasource,\n network: jamespot.network,\n filebank: jamespot.filebank,\n wedoc: jamespot.wedoc,\n },\n handleStart: () => onStateChange({ busy: true }),\n handleCatch: (err) => dispatch(Toast.actions.error({ label: err.errorMsg })),\n handleFinally: () => onStateChange({ busy: false }),\n }}\n onSave={onSave}\n onChange={(content, override) =>\n dispatch(updateWidgetContent<WidgetDatasourceTableContent>(uniqid, content, override ?? false))\n }\n onStateChange={onStateChange}\n onError={(label) => dispatch(Toast.actions.error({ label }))}\n />\n );\n } else if (ensureWidgetDatasourceTableType(widget)) {\n return (\n <WidgetDatasourceTableEditor\n {...widget.content}\n uri={widget.content.uri}\n limit={widget.content.limit ?? 20}\n hook={{ isActive: handleHookIsActive }}\n handlers={{\n jamespot: {\n datasource: jamespot.datasource,\n network: jamespot.network,\n application: jamespot.application,\n filebank: jamespot.filebank,\n },\n handleStart: () => onStateChange({ busy: true }),\n handleCatch: (err) => dispatch(Toast.actions.error({ label: err.errorMsg })),\n handleFinally: () => onStateChange({ busy: false }),\n }}\n onSave={onSave}\n onChange={(content, override) =>\n dispatch(updateWidgetContent<WidgetDatasourceTableContent>(uniqid, content, override ?? false))\n }\n onStateChange={onStateChange}\n onError={(label) => {\n dispatch(Toast.actions.error({ label }));\n }}\n />\n );\n } else {\n return <>cannot display editor</>;\n }\n};\n","import React from 'react';\n\nimport { useDispatch } from 'react-redux';\n\nimport JRCore from 'App';\n\nconst Icon = JRCore.registry.getLazyComponent('Icon');\n\nimport { CSSEditorAction, CSSEditorMenuButton } from './style';\n\nimport { WidgetEditor } from 'jamespot-front-business';\n\nexport const EditorPosition = ({ 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 <Icon name={position === 'left' ? 'icon-angle-right' : 'icon-angle-left'} color=\"grey2\" />\n </CSSEditorMenuButton>\n </CSSEditorAction>\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 { ensureWidgetWrapperProps, WidgetKeys, WidgetsRootState, WidgetWrapperProps } from 'jamespot-user-api';\nimport { useIntl } from 'react-intl';\nimport { CSSEditorWidget, CSSEditorWidgetLabel, CSSEditorWidgetOption } from './style';\nimport { WidgetList } from 'registry/coreComponents';\nimport JRCore from 'App';\n\nconst BETA_JRCDragAndDrop = JRCore.registry.getLazyComponent('BETA_DragAndDrop');\nconst JRCIcon = JRCore.registry.getLazyComponent('Icon');\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 widget = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid))?.widget;\n\n const onClick = (uniqid: string, name: WidgetKeys) => {\n /*\n Register Editor\n */\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name }));\n };\n\n const widgets =\n widget?.content && 'widgets' in widget.content && widget.content.widgets ? widget.content.widgets : [];\n\n return (\n <div style={{ flex: 1 }}>\n <Layers uniqid={uniqid} />\n {widget ? (\n 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 dispatch(\n Widget.slice.actions.updateWidget({\n uniqid,\n content: {\n ...widget.content,\n widgets: [\n ...widgets\n .filter((_, n: number) => n !== index)\n .map((w) => {\n if (ensureWidgetWrapperProps(w)) {\n return w;\n } else {\n // TODO remonter le log (centry ?)\n console.error('Zozod', w);\n return w as WidgetWrapperProps;\n }\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 { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { WidgetsRootState } from 'jamespot-user-api';\nimport { useForm } from 'react-hook-form';\nimport { useIntl } from 'react-intl';\n\nconst JRCInputText = JRCore.registry.getLazyComponent('InputText');\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', justifyContent: 'space-between' }}>\n <JRCInputText\n name={'text'}\n control={control}\n placeholder={intl.formatMessage({ id: 'WIDGET_Title' })}></JRCInputText>\n <JRCButton onClick={onClick} minWidth={'100%'}>\n {intl.formatMessage({ id: 'GLOBAL_Save' })}\n </JRCButton>\n </div>\n ) : (\n <>No wrapper</>\n );\n};\n","import React from 'react';\n\nimport { shallowEqual, useSelector } from 'react-redux';\n\nimport JRCore from 'App';\n\nconst Loader = JRCore.registry.getLazyComponent('Loader');\n\nimport { CSSEditorIsBusy } from '../style';\n\nimport { Widget } from 'jamespot-front-business';\nimport { WidgetsRootState } from 'jamespot-user-api';\n\nexport const EditorIsBusy = ({ uniqid }: { uniqid: string }) => {\n const isBusy = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetState(state, uniqid),\n shallowEqual,\n )?.busy;\n return (\n <>\n {isBusy && (\n <CSSEditorIsBusy>\n <Loader size={'l'} />\n </CSSEditorIsBusy>\n )}\n </>\n );\n};\n","import React from 'react';\n\nimport { useSelector } from 'react-redux';\n\nimport { Widget } from 'jamespot-front-business';\nimport { WidgetsRootState } from 'jamespot-user-api';\n\nexport const EditorIsInitialize = ({ uniqid, children }: { uniqid: string; children: React.ReactElement }) => {\n const isInitializes = useSelector((state: WidgetsRootState) =>\n Widget.selectors.selectWidgetState(state, uniqid),\n )?.initialized;\n\n return isInitializes ? children : <></>;\n};\n","import React from 'react';\n\nimport { useIntl } from 'react-intl';\nimport { CSSEditorIsLocked } from '../style';\nimport { shallowEqual, useSelector } from 'react-redux';\nimport { WidgetsRootState } from 'jamespot-user-api';\nimport { Widget } from 'jamespot-front-business';\n\nexport const EditorIsLocked = ({ uniqid }: { uniqid: string }) => {\n const intl = useIntl();\n const isLocked = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetState(state, uniqid),\n shallowEqual,\n )?.locked;\n return isLocked ? (\n <CSSEditorIsLocked>{intl.formatMessage({ id: 'INTRANET_Panel_Change_Off' })}</CSSEditorIsLocked>\n ) : (\n <></>\n );\n};\n","import React, { useEffect, useRef } from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { Editor } from './Editor';\n\nimport JRCore from 'App';\n\nconst Icon = JRCore.registry.getLazyComponent('Icon');\n\nimport {\n CSSEditor,\n CSSEditorAction,\n CSSEditorContent,\n CSSEditorHeader,\n CSSEditorLabel,\n CSSEditorMask,\n CSSEditorMenu,\n CSSEditorMenuButton,\n} from './style';\n\nimport { EditorsRootState, Widget, WidgetEditor } from 'jamespot-front-business';\n\nimport { useIntl } from 'react-intl';\nimport { EDITOR_CONTENT_WIDTH } from './const';\nimport { EditorPosition } from './EditorPosition';\nimport { EditorTabWidgets } from './EditorTabWidgets';\nimport { EditorTabWrapper } from './EditorTabWrapper';\nimport { EditorIsBusy } from './states/EditorIsBusy';\nimport { EditorIsInitialize } from './states/EditorIsInitialize';\nimport { EditorIsLocked } from './states/EditorIsLocked';\n\n/*\n Editor wrapper (right part)\n*/\nexport const EditorWrapper = ({ uniqid, position }: { uniqid: string; position: 'left' | 'right' }) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const ref = useRef<HTMLDivElement>(null);\n const editor = useSelector(\n (state: EditorsRootState) => WidgetEditor.selectors.selectEditor(state, uniqid),\n shallowEqual,\n );\n const def = Widget.definition(editor?.name);\n\n const [tab, setTab] = React.useState<string>('default');\n\n const onClose = () => {\n dispatch(WidgetEditor.slice.actions.flushEditor({ uniqid }));\n };\n\n useEffect(() => {\n setTimeout(() => {\n if (ref && ref.current) {\n ref.current.className = ref.current.className + ' animate';\n }\n }, 0);\n }, []);\n\n return editor ? (\n <CSSEditorMask>\n <CSSEditor ref={ref} position={position}>\n {(def.panel.useWrapper || def.panel.useEditor || def.panel.useWidgets) && (\n <CSSEditorMenu>\n {def.panel.useWrapper ? (\n <CSSEditorMenuButton isActive={tab === 'wrapper'} onClick={() => setTab('wrapper')}>\n <Icon name=\"icon-font\" color=\"grey2\" />\n </CSSEditorMenuButton>\n ) : (\n <></>\n )}\n {def.panel.useEditor ? (\n <CSSEditorMenuButton isActive={tab === 'default'} onClick={() => setTab('default')}>\n <Icon name=\"icon-pen\" color=\"grey2\" />\n </CSSEditorMenuButton>\n ) : (\n <></>\n )}\n {def.panel.useWidgets ? (\n <EditorIsInitialize uniqid={uniqid}>\n <CSSEditorMenuButton isActive={tab === 'widgets'} onClick={() => setTab('widgets')}>\n <Icon name=\"icon-sliders\" color=\"grey2\" />\n </CSSEditorMenuButton>\n </EditorIsInitialize>\n ) : (\n <></>\n )}\n </CSSEditorMenu>\n )}\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column', width: `${EDITOR_CONTENT_WIDTH}px` }}>\n <CSSEditorHeader>\n <EditorPosition uniqid={uniqid} position={editor.position} />\n <CSSEditorLabel>{intl.formatMessage({ id: def.label })}</CSSEditorLabel>\n <CSSEditorAction>\n <CSSEditorMenuButton onClick={onClose}>\n <Icon 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 <EditorIsBusy uniqid={uniqid} />\n <EditorIsLocked uniqid={uniqid} />\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 </CSSEditorMask>\n ) : (\n <></>\n );\n};\n","import React from 'react';\n\nimport { shallowEqual, 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: 1;\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, shallowEqual);\n return (\n <CSSEditorPortalWrapper className=\"editor-portal-wrapper\">\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} position={editor.position}></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} position={editor.position}></EditorWrapper>\n </CSSEditorPortalRow>\n </CSSEditorPortal>\n );\n })}\n </CSSEditorPortalWrapper>\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 { JTinyMCEExtensionsBuilders } from 'jamespot-react-components';\nimport { JIACapabilities } from 'jamespot-user-api';\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: JIACapabilities;\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 fetch = useCallback(\n (text: string, capability: JIACapabilities) => {\n return new Promise<string>((resolve, reject) => {\n PrepareAndSetQuery({\n reject,\n resolve,\n text,\n capability,\n });\n });\n },\n [PrepareAndSetQuery],\n );\n\n const AICapabilities = useMemo(() => {\n return {\n develop: (text: string) => fetch(text, 'develop'),\n summarize: (text: string) => fetch(text, 'summarize'),\n tldr: (text: string) => fetch(text, 'tldr'),\n en: (text: string) => fetch(text, 'en'),\n es: (text: string) => fetch(text, 'es'),\n formal: (text: string) => fetch(text, 'formal'),\n funny: (text: string) => fetch(text, 'funny'),\n };\n }, [fetch]);\n\n const ext = useMemo(() => JTinyMCEExtensionsBuilders.jia(AICapabilities, intl), [intl, AICapabilities]);\n\n return [query, ext] as const;\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 { JRCInputTinyMCEProps } from 'jamespot-react-components';\nimport { FieldValues } from 'react-hook-form/dist/types';\nimport { AIModal } from './extension/AIModal';\nimport JRCore from 'App';\n\nconst JRCInputTinyMCE = JRCore.registry.getLazyComponent('InputTinyMCE');\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(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const tinyMentionsQueries = useMemo(() => {\n return getTinyMCEMentionsQueries(models, theme, onMentionsQueryError);\n }, [models, onMentionsQueryError, theme]);\n\n const commonOptions = useMemo(() => 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 { JRCInputTinyMCERawProps } from 'jamespot-react-components';\nimport { AIModal } from './extension/AIModal';\nimport JRCore from 'App';\n\nconst JRCInputTinyMCERaw = JRCore.registry.getLazyComponent('InputTinyMCERaw');\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(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const tinyMentionsQueries = useMemo(() => {\n return getTinyMCEMentionsQueries(models, theme, onMentionsQueryError);\n }, [models, onMentionsQueryError, theme]);\n\n const commonOptions = useMemo(() => 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 React from 'react';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport { Control } from 'react-hook-form';\r\nimport jamespot from 'jamespot-user-api';\r\nimport { Network } from 'jamespot-front-business';\r\nimport { useSelector } from 'react-redux';\r\nimport JRCore from 'App';\r\n\r\nconst JRCInputAudience = JRCore.registry.getLazyComponent('InputAudience');\r\nconst JRCMessage = JRCore.registry.getLazyComponent('Message');\r\nconst JRCModal = JRCore.registry.getLazyComponent('Modal');\r\n\r\nexport type ModalAudienceProps = {\r\n open: boolean;\r\n closeHandler: () => void;\r\n title?: string;\r\n control: Control<any>;\r\n warningMessage?: string;\r\n onSubmit: () => void;\r\n name?: string;\r\n};\r\n\r\nexport const ModalAudience = ({\r\n open,\r\n closeHandler,\r\n title,\r\n control,\r\n warningMessage,\r\n onSubmit,\r\n name = 'publishTo',\r\n}: ModalAudienceProps) => {\r\n const intl = useIntl();\r\n const networkPublic = useSelector(Network.selectors.selectNetworkPublic);\r\n\r\n return (\r\n <JRCModal\r\n open={open}\r\n closeHandler={closeHandler}\r\n title={title ?? intl.formatMessage({ id: 'GLOBAL_Audience' })}\r\n buttons={[\r\n {\r\n children: <FormattedMessage id=\"GLOBAL_Cancel\" />,\r\n color: 'cancel',\r\n clickHandler: () => closeHandler(),\r\n },\r\n {\r\n children: <FormattedMessage id=\"GLOBAL_Continue\" />,\r\n color: 'danger',\r\n clickHandler: () => {\r\n closeHandler();\r\n onSubmit();\r\n },\r\n },\r\n ]}>\r\n <JRCMessage\r\n variant={'warning'}\r\n message={warningMessage ?? intl.formatMessage({ id: 'FORM_Audience_Empty' })}\r\n />\r\n <JRCInputAudience\r\n asyncPromise={(inputValue: string) => jamespot.audience.autocomplete(inputValue)}\r\n searchable={true}\r\n control={control}\r\n multiple={true}\r\n placeholder={intl.formatMessage({ id: 'GLOBAL_Audience' })}\r\n name={name}\r\n defaultCustomOptions={\r\n networkPublic\r\n ? [\r\n {\r\n uri: networkPublic.uri,\r\n title: networkPublic.title,\r\n resetOptions: true,\r\n icon: 'icon-fs-wall',\r\n },\r\n ]\r\n : []\r\n }\r\n />\r\n </JRCModal>\r\n );\r\n};\r\n","import * as React from 'react';\nimport { Outlet, matchPath } 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';\nimport { useMemo } from 'react';\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 paths?: 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 = useMemo(() => Object.values(routes), [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) => {\n if (`/ng/rr/${extensionRoute}/${route.path}` === pathname) {\n return true;\n }\n\n return route.paths?.reduce<boolean>((previousValue: boolean, currentValue: string) => {\n const pattern = `/ng/rr/${extensionRoute}/${currentValue}`;\n const isMatch = matchPath(pattern, pathname) !== null;\n return previousValue || isMatch;\n }, false);\n });\n if (activeRoute) setActiveTab(activeRoute.key);\n }, [pathname, ROUTES_ARRAY, extensionRoute]);\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"],"names":["JRCAvatar","registry","getLazyComponent","JRCIcon","Avatar","props","theme","useTheme","networkPublic","useSelector","selectors","selectNetworkPublic","uri","name","size","color","primary","variant","JRCFlexBox","JRCModalContent","JRCModalLayout","JRCStyledHref","JRCTooltip","JRCTypography","AudienceWrapper","AvatarLink","white","lavender","overlap","Audience","audience","limit","intl","useIntl","isModalOpen","setModalOpen","useState","splice","map","item","index","href","_url","target","key","id","description","undefined","title","position","alt","timestamp","dateModified","Utils","date","strToTimestamp","focusable","length","onClick","closeHandler","enableClickAwayCloseModal","open","maxHeight","formatMessage","overflow","onClickIconClose","i","y","gap","space","l","type","JRCLoader","TextWrapper","md","loadingResponse","response","loading","error","AIModal","query","setResponse","sendAIRequest","useCallback","textEnhancement","text","capacity","capability","then","errorMsg","textResponse","result","catch","_err","useEffect","trim","zIndex","tinyMCEModal","reject","buttons","children","clickHandler","resolve","isFull","align","EditorsPortal","JRCThemeProvider","EditorsPanel","portalDiv","document","getElementById","portal","useMemo","parent","createElement","appendChild","createPortalElement","createPortal","CSSSquareWidgetWrapper","CSSSquareWidget","grey2","available","CSSWidgetButton","height","CSSWrapWidgetWrapper","column","CSSWrapTitle","grey0","CSSWrapWidget","full","parentIsColumn","Flex","direction","JRCButton","JRCIconButton","WidgetList","mode","view","namespace","onChange","isOpen","setOpen","widgets","definition","WidgetsName","ArticleTitle","ArticleButton","CheckList","Presence","ArticleText","ArticleImage","ArticleSlider","ArticleAttachment","getBuilderWidgets","args","portalId","factory","FormattedMessage","widget","src","img","label","className","minWidth","WidgetModeArticle","WidgetModeComment","calcHeight","Math","ceil","bg","bgHover","iconSize","icon","JRCInputFileAdvancedRaw","CSSHidden","WidgetUploader","initialFiles","initialClick","multiple","accept","onUploadStart","onUploadEnd","onUploadSuccess","uploadRef","token","selectToken","total","setTotal","files","setFiles","current","click","ref","content","totalFile","prevTotal","fileResponse","prevFiles","WidgetAttachment","JRCWidgetEmptyInplace","FileViewer","CSSWrapper","JRCWidgetArticleAttachmentWrapper","inplace","uniqid","dispatch","useDispatch","isActive","state","shallowEqual","onError","message","actions","slice","setWidgetState","mounted","empty","onlyOffice","selectById","option","file","getAccessHash","Error","hash","idFile","window","getWedocFilePath","wedocWindowOpen","openWithOptions","condition","f","includes","mimetype","options","Array","isArray","url","JRCWidgetButton","CSSButtonWrapper","CSSPointer","clickable","JRCWidgetArticleButtonWrapper","backgroundColor","buttonSize","borderRadius","registerEditor","JRCWidgetArticleGallery","CSSImagePointer","JRCWidgetArticleGalleryWrapper","maxWidth","WidgetImage","CSSImageWrapperHover","mockFileLittle","mainType","dateCreation","str","Date","parse","isNaN","getTime","JRCWidgetArticleImageWrapper","width","useFilter","setUri","formatImgUrl","now","from","path","JRCWidgetSlider","Wrapper","JRCWidgetArticleSliderWrapper","dynamicWidth","setDynamicWidth","useRef","fileViewerFiles","slides","slide","handleResize","offsetWidth","addEventListener","removeEventListener","isEditable","handleEditor","style","useDots","loop","startAt","onClickSlide","WidgetArticleText","CSSTextWrapper","JRCWidgetArticleTextWrapper","isBusy","selectWidgetState","busy","tinyMCECommonOptions","selectTinyMCECommonOptions","models","selectAll","tinyMentionsQueries","getTinyMCEMentionsQueries","autoFocus","tinymceScriptSrc","commonOptions","mentionsQueries","WidgetArticleTitle","ToolWrapper","grey1","Tool","JRCWidgetArticleTitleWrapper","heading","Toolbar","sizeValue","Footer","WidgetRemove","setIsOpen","removeWidget","flushWidget","WidgetFooterView","collaborationRights","handleOpenEditor","widgetObject","selectWidgetObject","widgetObjectRights","selectWidgetObjectRights","canUpdate","update","canDelete","delete","handleOnClick","onSave","ensureWidgetPresenceContent","updateWidget","v2","ensureWidgetObjectHasMinimumProperties","WidgetCheckList","WidgetCheckListEditor","CommentContainer","border","JRCWidgetCheckListWrapper","onWidgetUpdate","widgetContent","entries","setEntries","setToken","tokenLoading","setTokenLoading","currentUser","get","canEditCollaboration","finalEntries","arr","checked","value","links","user","res","e","onChangeContent","onChangeWrapper","updateWidgetWrapper","initialEntries","onFileClick","onItemCheckListChange","items","mimetypes","checkListRespond","idUser","err","handleCheckItem","edit","flushAllEditor","openEditorPanel","getVisibleColumns","tableColumnsData","columns","toRet","filter","data","isVisible","forEach","find","el","push","WidgetTable","Loader","JRCHtml","AbsoluteWrapper","WrapperEditMode","WidgetDatasourceTableWrapper","tableHeadColor","tableHeadTextColor","tableHeadIconColor","tableRowColor","tableRowTextColor","tableBorderRadius","tableSizedColumns","tableSizedColumnsWidth","isEditorOpenOnFirstRender","setIsEditorOpenOnFirstRender","isLoading","setIsLoading","datasourceData","setDatasourceData","datasourceModel","setDatasourceModel","datasourceSort","setDatasourceSort","order","datasourceType","setDatasourceType","datasourceIdentifier","setDatasourceIdentifier","DatasourceTable","rtConditions","rtAudience","rtLastObject","fetchDatasource","Format","VIEW","model","sort","datasource","finally","setTimeout","rows","tableDefaultSortOrder","tableDefaultSortName","__html","WidgetExcelDatasourceTableWrapper","ExcelDatasourceTable","CSSPaddingMd","CSSHref","secondary","CSSHorizontalAlign","WidgetPresenceWrapperClosing","isClosed","handleClosing","JRCWidgetPresence","CSSWidgetPresenceWrapper","CSSWidgetPresenceState","JRCWidgetPresenceWrapper","limitValue","closing","userValue","userAvailableList","userUnavailableList","userAvailableTotal","userUnavailableTotal","isPendingResponse","setIsPendingResponse","abortController","AbortController","allRt","selectAllWidgetRTObject","handleError","lockedRespondHandler","handleCancelRespond","presenceCancel","Number","handleRespond","responseValue","payload","ensureWidgetPresenceResponsePayload","presenceRespond","signal","handleResponse","presenceGetResponse","aborted","abort","lastRt","at","object","RTProvider","useRT","handleClickAvailable","handleClickUnavailable","CSSWidgetTitle","WidgetTitle","widgetWrapper","selectWidget","WidgetTitleEdit","setTitle","control","watch","useForm","defaultValues","widgetTitle","criteriaMode","delayDebounce","clearTimeout","subscription","unsubscribe","JRCInputText","placeholder","CSSModalFooter","CSSWidgetHeaderEdit","sm","CSSWidgetHeaderEditTitle","CSSWidgetHeaderEditActions","WidgetHeaderEdit","handleRemoveWidget","CSSWidgetWithTitle","DisplayWidget","cannotDisplayComponent","ensureWidgetArticleButtonType","ensureWidgetArticleGalleryType","ensureWidgetArticleAttachmentType","ensureWidgetArticleImageType","ensureWidgetArticleSliderType","ensureWidgetArticleTitleType","ensureWidgetArticleTextType","ensureWidgetExcelDatasourceTableType","ensureWidgetDatasourceTableType","ensureWidgetCheckListType","ensureWidgetPresenceType","CSSWidgetWrapper","grey3","font","CSSWidgetLayer","opacity","pointerEvents","BETA_JRCDoubleClick","WidgetLayer","layers","ids","layer","Layer","LayerWidget","layerId","visible","locked","top","left","x","DraggableHandler","onMouseUp","updateLayer","onDoubleTap","mouseIsDown","setMouseDown","mouse","setMouse","start","setStart","child","setChild","handleMouseDown","event","nativeEvent","clientX","clientY","handleMouseMove","dx","dy","handleMouseUp","onMouseDown","WidgetState","def","inset","display","flex","justifyContent","alignItems","hover","initialized","WidgetWrapperCore","indexOrder","editableMap","currentEditableWidgetId","isComponentVisible","setIsComponentVisible","registerWidgetObject","registerWidget","setEditableWidgetId","_widget","openingType","openingTypeLink","setEditableIndex","CSSCommentsBlocWidgetWrapper","JRCMessage","CommentsBlocAddCommentWidgetsWrapper","flushedWidgets","selectFlushedWidgets","CommentsBlocCommentWidgetsWrapper","comment","handleWidgetUpdate","JRCCommentsBloc","CommentsBlocWrapper","CommentsBloc","articleId","canComment","commentType","socialQuestion","setLoading","setWidgets","widgetIds","selectWidgets","tinyMCEExtendedOptions","selectTinyMCEExtendedOptions","platformConfig","selectPlatformConfig","commentsList","commentList","driveHook","selectHook","fileBank","widgetHook","socialQuestionOptions","setSocialQuestionOptions","useCommentRT","idComments","idArticle","socket","rtHandlers","getCommentsLikeRTHandlers","handler","onMessage","function","offMessage","list","c","fetchComments","fetchToken","onComment","params","finalWidget","Object","keys","some","w","addComment","_widgets","registerWidgetObjectRights","rights","_right","comments","onCommentUpdate","commentToUpdate","idComment","updateComment","onCommentDelete","deleteComment","isWidgetActive","create","autorize","widgetListComponent","newWidgetsWrapperComponent","existingWidgetsWrapperComponent","handleWidgetRemove","tinyMCEConfig","toolbar","commentsToolbar","highlightFields","userHighlightFields","userAccountStatus","userModel","m","isWedocActive","onGetHashError","activeDrives","utils","buildDrivesArrayFromObject","drives","deleteFile","handlers","drive","filebank","socialAction","questionAnswer","onSelectResponse","responseId","isResolved","onUnselectResponse","StretchContainer","css","Container","stretch","Form","FormElm","onSubmit","FieldsetWrapper","DisplayForm","formRef","configuration","useDisplay","fields","forceMandatory","handleSubmit","reset","formFn","formatValuesForSubmit","values","k","v","join","scrollTo","getFormattedValues","getValues","Input","conf","dataCy","readOnly","extraInputs","CSSEditorPortal","CSSEditorHeader","CSSEditorAction","CSSEditorLabel","CSSEditorMask","EDITOR_WIDTH","CSSEditor","CSSEditorContent","CSSEditorIsBusy","CSSEditorIsLocked","CSSEditorMenu","CSSEditorMenuButton","CSSEditorWidget","CSSEditorWidgetLabel","CSSEditorWidgetOption","EditorPopup","editor","selectEditor","popup","flexDirection","marginTop","flushEditorPopup","WidgetArticleTitleEditor","WidgetArticleTextEditor","WidgetArticleGalleryEditor","WidgetArticleAttachmentEditor","WidgetArticleSliderEditor","WidgetArticleImageEditor","WidgetButtonEditor","WidgetDatasourceTableEditor","WidgetExcelDatasourceTableEditor","WidgetPresenceEditor","Editor","onSaveCallback","handleHookIsActive","store","getState","flushEditor","onStateChange","states","onOpen","registerEditorPopup","hook","jamespot","network","wedoc","handleStart","handleCatch","handleFinally","override","application","Icon","EditorPosition","setEditorPosition","BETA_JRCDragAndDrop","EditorTabWidgets","Layers","_","n","ensureWidgetWrapperProps","console","onDrag","renderEl","EditorWidgetLayer","elms","registerLayer","EditorWidgetLayerLock","EditorWidgetLayerVisibility","EditorWidgetLayerFlush","flushLayer","EditorTabWrapper","wrapper","EditorIsBusy","EditorIsInitialize","EditorIsLocked","EditorWrapper","tab","setTab","panel","useWrapper","useEditor","useWidgets","CSSEditorPortalWrapper","CSSEditorPortalPopupWrapper","CSSEditorPortalRow","CSSEditorPortalFreeSpace","editors","selectEditors","Empty","useAI","setQuery","PrepareAndSetQuery","fetch","Promise","AICapabilities","develop","summarize","tldr","en","es","formal","funny","JTinyMCEExtensionsBuilders","jia","JRCInputTinyMCE","JRCInputTinyMCEWithExt","extAI","isAIActive","J","hooks","JIAHook","debug","extArray","onMentionsQueryError","tinymceCommonOptions","additionalExtensions","JRCInputTinyMCERaw","JRCInputTinyMCEWithExtRaw","JRCInputAudience","JRCModal","ModalAudience","warningMessage","asyncPromise","inputValue","autocomplete","searchable","defaultCustomOptions","resetOptions","AppColumn","MainColumn","TwoColLayout","extensionRoute","routes","pathname","useLocation","ROUTES_ARRAY","activeTab","setActiveTab","tabs","absolutePath","group","activeRoute","route","paths","reduce","previousValue","currentValue","pattern","isMatch","matchPath","fallback","Outlet"],"sourceRoot":""}
1
+ {"version":3,"file":"823.bundle.js","mappings":"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","sources":["webpack://ReactCore/./src/components/Avatar.tsx","webpack://ReactCore/./src/components/Audience.tsx","webpack://ReactCore/./src/components/tinymce/extension/AIModal.tsx","webpack://ReactCore/./src/components/widgets/components/WidgetEditorPanel.tsx","webpack://ReactCore/./src/components/widgets/WidgetList/WidgetList.style.tsx","webpack://ReactCore/./src/components/widgets/WidgetList/WidgetList.tsx","webpack://ReactCore/./src/components/widgets/namespace.ts","webpack://ReactCore/./src/components/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/components/WidgetRemove.tsx","webpack://ReactCore/./src/components/widgets/wrapper/components/WidgetFooterView.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetCheckListWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/utils.ts","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetDatasourceTableWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetExcelDatasourceTableWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetPresenceWrapperClosing.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetPresenceWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/components/WidgetTitle.tsx","webpack://ReactCore/./src/components/widgets/wrapper/components/WidgetTitleEdit.tsx","webpack://ReactCore/./src/components/widgets/wrapper/components/WidgetHeaderEdit.tsx","webpack://ReactCore/./src/components/widgets/Widget.tsx","webpack://ReactCore/./src/components/widgets/Widget.style.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/comments/CommentsBloc.styles.ts","webpack://ReactCore/./src/components/comments/CommentsBlocAddCommentWidgetsWrapper.tsx","webpack://ReactCore/./src/components/comments/CommentsBlocCommentWidgetsWrapper.tsx","webpack://ReactCore/./src/components/CommentsBloc.tsx","webpack://ReactCore/./src/hooks/useCommentsLikeRT.ts","webpack://ReactCore/./src/displayer/DisplayForm.component.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/EditorPosition.tsx","webpack://ReactCore/./src/components/editors/EditorTabWidgets.tsx","webpack://ReactCore/./src/components/editors/EditorTabWrapper.tsx","webpack://ReactCore/./src/components/editors/states/EditorIsBusy.tsx","webpack://ReactCore/./src/components/editors/states/EditorIsInitialize.tsx","webpack://ReactCore/./src/components/editors/states/EditorIsLocked.tsx","webpack://ReactCore/./src/components/editors/EditorWrapper.tsx","webpack://ReactCore/./src/components/editors/EditorsPortal.tsx","webpack://ReactCore/./src/components/Empty.tsx","webpack://ReactCore/./src/hooks/useAI.ts","webpack://ReactCore/./src/components/tinymce/JRCInputTinyMCEWithExt.tsx","webpack://ReactCore/./src/components/tinymce/JRCInputTinyMCEWithExtRaw.tsx","webpack://ReactCore/./src/components/modals/ModalAudience.tsx","webpack://ReactCore/./src/components/TwoColLayout.tsx"],"sourcesContent":["import { JRCAvatarProps } from 'jamespot-react-components';\r\nimport { Network } from 'jamespot-front-business';\r\nimport { useSelector } from 'react-redux';\r\nimport React from 'react';\r\nimport { useTheme } from 'styled-components';\r\nimport JRCore from 'App';\r\n\r\nconst JRCAvatar = JRCore.registry.getLazyComponent('JRCAvatar');\r\nconst JRCIcon = JRCore.registry.getLazyComponent('Icon');\r\n\r\nconst BASE_MULTIPLE = 8;\r\n\r\nexport const Avatar = (props: JRCAvatarProps) => {\r\n const theme = useTheme();\r\n const networkPublic = useSelector(Network.selectors.selectNetworkPublic);\r\n\r\n if (props.uri === networkPublic?.uri) {\r\n return (\r\n <JRCIcon\r\n name={'icon-fs-wall'}\r\n size={(props.size ?? 3) * BASE_MULTIPLE}\r\n color={theme.color.primary}\r\n variant={'circle'}\r\n />\r\n );\r\n }\r\n\r\n return <JRCAvatar {...props} />;\r\n};\r\n","import React, { useState } from 'react';\nimport styled, { useTheme } from 'styled-components';\nimport { useIntl } from 'react-intl';\nimport { Utils } from 'jamespot-react-components';\nimport { Avatar } from './Avatar';\nimport { jObjectLittle } from 'jamespot-user-api';\nimport JRCore from '../App';\n\nconst JRCFlexBox = JRCore.registry.getLazyComponent('FlexBox');\nconst JRCModalContent = JRCore.registry.getLazyComponent('ModalContent');\nconst JRCModalLayout = JRCore.registry.getLazyComponent('ModalLayout');\nconst JRCStyledHref = JRCore.registry.getLazyComponent('StyledHref');\nconst JRCTooltip = JRCore.registry.getLazyComponent('Tooltip');\nconst JRCTypography = JRCore.registry.getLazyComponent('Typography');\n\nexport type AudienceProps<T extends jObjectLittle> = {\n audience: T[];\n limit?: number;\n};\n\nconst LIMIT = 2;\n\nconst AudienceWrapper = styled.div`\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin-bottom: 24px;\n`;\n\nexport const AvatarLink = styled.a<{ overlap?: boolean }>`\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n width: 40px;\n height: 40px;\n border-radius: 40px;\n overflow: hidden;\n color: ${(props) => props.theme.color.white};\n background-color: ${(props) => props.theme.color.lavender};\n border: 4px solid ${(props) => props.theme.color.white};\n margin-left: ${(props) => (props.overlap ? '-18px' : '0')};\n cursor: pointer;\n`;\n\nexport const Audience = <T extends jObjectLittle>({ audience, limit = LIMIT }: AudienceProps<T>) => {\n const intl = useIntl();\n const theme = useTheme();\n const [isModalOpen, setModalOpen] = useState(false);\n\n return (\n <>\n <JRCFlexBox>\n {[...audience].splice(0, limit).map((item, index) => (\n <AvatarLink overlap={index !== 0} href={item._url} target={'_blank'} key={item.id}>\n <JRCTooltip description={item.title === undefined ? ' ' : item.title} position=\"left\">\n <Avatar\n uri={item.uri}\n size={4}\n variant=\"circle\"\n alt=\"image\"\n timestamp={item.dateModified ? Utils.date.strToTimestamp(item.dateModified) : undefined}\n focusable\n />\n </JRCTooltip>\n </AvatarLink>\n ))}\n {audience.length > limit && (\n <AvatarLink onClick={() => setModalOpen(true)} overlap={true}>\n +{audience.length - limit}\n </AvatarLink>\n )}\n </JRCFlexBox>\n {audience.length > limit && (\n <JRCModalLayout\n closeHandler={() => setModalOpen(false)}\n enableClickAwayCloseModal\n open={isModalOpen}\n variant={'fixed-height'}\n maxHeight={'800px'}>\n <JRCModalContent\n title={intl.formatMessage({ id: 'GLOBAL_Audience' })}\n overflow={'scroll'}\n onClickIconClose={() => setModalOpen(false)}>\n <AudienceWrapper>\n {audience.map((item, i) => (\n <JRCFlexBox key={`audience-${i}`} y={'center'} gap={theme.space.l}>\n <Avatar size={5} uri={`${item.type}/${item.id}`} />\n <JRCStyledHref href={`${item.type}/${item.id}`}>\n <JRCTypography>{item.title}</JRCTypography>\n </JRCStyledHref>\n </JRCFlexBox>\n ))}\n </AudienceWrapper>\n </JRCModalContent>\n </JRCModalLayout>\n )}\n </>\n );\n};\n","import { JiaTextEnhanceQuery } from 'hooks/useAI';\nimport jamespot from 'jamespot-user-api';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport JRCore from 'App';\n\nimport styled, { useTheme } from 'styled-components';\n\nconst JRCLoader = JRCore.registry.getLazyComponent('Loader');\nconst JRCModalContent = JRCore.registry.getLazyComponent('ModalContent');\nconst JRCModalLayout = JRCore.registry.getLazyComponent('ModalLayout');\nconst JRCTypography = JRCore.registry.getLazyComponent('Typography');\n\nconst TextWrapper = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n`;\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 const theme = useTheme();\n\n const sendAIRequest = useCallback(\n (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((_err) => {\n setResponse({\n error: intl.formatMessage({ id: 'JIA_ERROR_AI_CALL' }),\n loading: false,\n response: undefined,\n });\n });\n },\n [intl],\n );\n\n useEffect(() => {\n if (query && query.text.trim().length > 0) {\n sendAIRequest(query);\n }\n }, [query, sendAIRequest]);\n\n return (\n <JRCModalLayout\n zIndex={theme.zIndex.tinyMCEModal}\n open={!!query}\n closeHandler={() => {\n query?.reject();\n }}>\n <JRCModalContent\n overflow=\"scroll\"\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 isFull>\n <TextWrapper>\n {response.loading && (\n <>\n <JRCLoader />\n <JRCTypography align=\"center\">\n {intl.formatMessage({ id: 'JIA_WAITING_WARNIG' })}\n </JRCTypography>\n </>\n )}\n {!response.loading && response.error && <p>{response.error}</p>}\n {!response.loading && response.response && <p>{response.response}</p>}\n </TextWrapper>\n </JRCModalContent>\n </JRCModalLayout>\n );\n};\n","import React, { useMemo } from 'react';\nimport { createPortal } from 'react-dom';\nimport { v4 as uuidv4 } from 'uuid';\nimport JRCore from 'App';\n\nconst EditorsPortal = JRCore.registry.getLazyComponent('EditorsPortal');\nconst JRCThemeProvider = JRCore.registry.getLazyComponent('ThemeProvider');\n\nconst createPortalElement = (parent: HTMLElement): HTMLDivElement => {\n let portal = document.getElementById('react-portals') as HTMLDivElement;\n\n if (!portal) {\n portal = document.createElement('div');\n portal.id = uuidv4();\n parent.appendChild(portal);\n }\n\n return portal;\n};\nexport const EditorsPanel = () => {\n const portalDiv = document.getElementById('react-portals');\n const portal = useMemo(() => portalDiv && createPortalElement(portalDiv), [portalDiv]);\n\n if (!portal) {\n return null;\n }\n return createPortal(\n <JRCThemeProvider>\n <EditorsPortal />\n </JRCThemeProvider>,\n portal,\n );\n};\n","import styled from 'styled-components';\n\nexport const CSSSquareWidgetWrapper = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n gap: 10px;\n justify-content: center;\n`;\n\nexport const CSSSquareWidget = styled.div<{ available: boolean }>`\n border: 1px solid ${(props) => props.theme.color.grey2};\n border-radius: 8px;\n cursor: pointer;\n padding: 12px;\n position: relative;\n opacity: ${(props) => (props.available ? '1' : '.4')};\n pointer-events: ${(props) => (props.available ? 'all' : 'none')};\n\n .show-on-hover {\n position: absolute;\n inset: 0;\n border-radius: 8px;\n justify-content: center;\n align-items: center;\n display: flex;\n opacity: 0;\n background-color: #ffffffe6;\n }\n\n &:hover {\n .show-on-hover {\n opacity: 1;\n }\n }\n`;\n\nexport const CSSWidgetButton = styled.div<{ open: boolean; height: number }>`\n border: 2px solid ${(props) => props.theme.color.primary};\n height: ${(props) => (props.open ? props.height : '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<{ column?: boolean }>`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: center;\n gap: 10px;\n ${(props) => props.column && `flex-direction: column;`}\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; parentIsColumn?: 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; width: 100%;`}\n ${(props) => props.parentIsColumn && `flex-basis: 72px;`}\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, { useMemo } 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={intl.formatMessage({ id: 'WIDGET_Builder' })}>\n {mode === 'comment' ? (\n <CSSWrapWidgetWrapper column>\n {widgets.map((widget, index) => (\n <CSSWrapWidget\n key={widget.name}\n open={true}\n full\n parentIsColumn\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 HEIGHT_CLOSED = 50;\nconst HEIGHT = 80;\nconst MARGIN_BOTTOM = 10;\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\n const calcHeight = useMemo(() => {\n return Math.ceil(widgets.length / 2) * HEIGHT + HEIGHT_CLOSED + MARGIN_BOTTOM;\n }, [widgets]);\n\n return (\n <>\n <CSSWidgetButton open={open} height={calcHeight}>\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={22}\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, WidgetsName } from 'jamespot-user-api';\n\nexport function getBuilderWidgets(namespace: string): WidgetDefinitionProps[] {\n switch (namespace) {\n case 'widget-article-image':\n return [Widget.definition(WidgetsName.ArticleTitle), Widget.definition(WidgetsName.ArticleButton)];\n case 'comment':\n return [Widget.definition(WidgetsName.CheckList), Widget.definition(WidgetsName.Presence)];\n default:\n return [\n Widget.definition(WidgetsName.ArticleTitle),\n Widget.definition(WidgetsName.ArticleText),\n Widget.definition(WidgetsName.ArticleImage),\n Widget.definition(WidgetsName.ArticleButton),\n Widget.definition(WidgetsName.ArticleSlider),\n Widget.definition(WidgetsName.ArticleAttachment),\n Widget.definition(WidgetsName.Presence),\n ];\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 JRCore from 'App';\n\nconst JRCInputFileAdvancedRaw = JRCore.registry.getLazyComponent('InputFileAdvancedRaw');\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 // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialFiles]);\n\n React.useEffect(() => {\n onUploadSuccess(files);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [files]);\n\n React.useEffect(() => {\n if (total === 0) {\n onUploadEnd();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\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, { useEffect } 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 { JRCFileViewerOpenWithOptionsType } from 'jamespot-react-components';\nimport { WidgetUploader } from '../components/WidgetUploader';\n\nconst WidgetAttachment = JRCore.registry.getLazyComponent('WidgetAttachment');\nconst JRCWidgetEmptyInplace = JRCore.registry.getLazyComponent('WidgetEmptyInplace');\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 useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, mounted: true }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !files || files.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [files]);\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, { useEffect } from 'react';\n\nimport styled from 'styled-components';\n\nimport { WidgetArticleButtonType, WidgetDisplayMode } from 'jamespot-user-api';\n\nimport { useDispatch } from 'react-redux';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport JRCore from 'App';\n\nconst JRCWidgetButton = JRCore.registry.getLazyComponent('WidgetButton');\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 useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !text || text.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [text]);\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 { WidgetUploader } from '../components/WidgetUploader';\n\nconst JRCWidgetArticleGallery = JRCore.registry.getLazyComponent('WidgetArticleGallery');\nconst JRCWidgetEmptyInplace = JRCore.registry.getLazyComponent('WidgetEmptyInplace');\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 // eslint-disable-next-line react-hooks/exhaustive-deps\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, { useEffect, useState } from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport {\n WidgetArticleImageContent,\n WidgetArticleImageType,\n WidgetDisplayMode,\n WidgetsRootState,\n formatImgUrl,\n jFileLittle,\n} from 'jamespot-user-api';\nimport { useIntl } from 'react-intl';\nimport JRCore from 'App';\nimport { Widget, updateWidgetContent } from 'jamespot-front-business';\nimport { WidgetUploader } from '../components/WidgetUploader';\n\nconst WidgetImage = JRCore.registry.getLazyComponent('WidgetImage');\nconst FileViewer = JRCore.registry.getLazyComponent('FileViewer');\nconst JRCWidgetEmptyInplace = JRCore.registry.getLazyComponent('WidgetEmptyInplace');\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] = useState<string | undefined>(undefined);\n const intl = useIntl();\n\n useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, mounted: true }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, empty: !file }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [file]);\n\n useEffect(() => {\n if (file) {\n setUri(\n formatImgUrl({\n timestamp: file.dateModified ? strToTimestamp(file.dateModified) : Date.now(),\n from: 'imagecache',\n size: 'fitx1200',\n uri: file.uri,\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, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport {\n WidgetArticleSliderType,\n WidgetDisplayMode,\n WidgetsRootState,\n formatImgUrl,\n jFileLittle,\n} from 'jamespot-user-api';\nimport JRCore from 'App';\nimport styled from 'styled-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');\nconst JRCWidgetEmptyInplace = JRCore.registry.getLazyComponent('WidgetEmptyInplace');\nconst JRCWidgetSlider = JRCore.registry.getLazyComponent('WidgetSlider');\n\nconst Wrapper = styled.div<{ maxWidth: number }>`\n flex: 1;\n display: flex;\n flex-direction: row;\n min-height: 60px;\n align-items: center;\n width: ${(props) => props.maxWidth}px;\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 maxWidth = width ?? 600;\n const [dynamicWidth, setDynamicWidth] = useState<number | undefined>(undefined);\n const ref = useRef<HTMLDivElement>(null);\n const fileViewerFiles = useMemo(\n () =>\n 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: formatImgUrl({\n size: 'fitx1200',\n uri: slide.file ? slide.file.uri : '',\n from: 'imagecache',\n timestamp:\n slide.file && slide.file.dateModified\n ? strToTimestamp(slide.file.dateModified)\n : Date.now(),\n }),\n };\n }),\n ]\n : [],\n [widget.content.slides],\n );\n\n const slides = useMemo(\n () =>\n widget.content.slides !== undefined\n ? [\n ...widget.content.slides.map((slide) => {\n if (slide.file) {\n return {\n ...slide,\n uri: formatImgUrl({\n timestamp: slide.file.dateModified\n ? strToTimestamp(slide.file.dateModified)\n : Date.now(),\n size: `fitx${dynamicWidth && dynamicWidth < maxWidth ? dynamicWidth : maxWidth}`,\n from: 'imagecache',\n uri: slide.file.uri,\n }),\n };\n } else {\n return {\n ...slide,\n uri: '',\n };\n }\n }),\n ]\n : [],\n [widget.content.slides, dynamicWidth, maxWidth],\n );\n\n useEffect(() => {\n if (isActive && mode === 'edit') {\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: widget.name }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isActive]);\n\n useEffect(() => {\n const handleResize = () => {\n if (ref.current) {\n setDynamicWidth(ref.current ? ref.current.offsetWidth : maxWidth);\n }\n };\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref]);\n\n useEffect(() => {\n setDynamicWidth(ref.current ? ref.current.offsetWidth : maxWidth);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref]);\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !widget.content.slides || widget.content.slides.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [widget.content.slides]);\n\n const isEditable = useMemo(\n () => mode === 'edit' && Array.isArray(widget.content.slides) && widget.content.slides.length === 0,\n [widget.content.slides, mode],\n );\n\n const handleEditor = useCallback(() => {\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid: widget.uniqid,\n name: widget.name,\n }),\n );\n }, [dispatch, widget.uniqid, widget.name]);\n\n /** small hack to catch the real width of the div */\n if (dynamicWidth === undefined) {\n return <div ref={ref} style={{ width: '100%' }}></div>;\n }\n\n return (\n <Wrapper maxWidth={dynamicWidth && dynamicWidth < maxWidth ? dynamicWidth : maxWidth}>\n <FileViewer files={fileViewerFiles} openWithOptions={[]}>\n {(open) => {\n return (\n <JRCWidgetSlider\n slides={slides}\n maxWidth={dynamicWidth && dynamicWidth < maxWidth ? dynamicWidth : maxWidth}\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 {isEditable ? (\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={handleEditor}\n />\n ) : (\n <></>\n )}\n </Wrapper>\n );\n};\n","import React, { useCallback, useEffect, useMemo } from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport JRCore from 'App';\nimport { useIntl } from 'react-intl';\nimport {\n WidgetArticleTextContent,\n WidgetArticleTextType,\n WidgetDisplayMode,\n WidgetsRootState,\n} from 'jamespot-user-api';\n\nimport { Model, TinyMCE, Toast, Widget, updateWidgetContent } from 'jamespot-front-business';\n\nconst WidgetArticleText = JRCore.registry.getLazyComponent('WidgetArticleText');\n\nimport { getTinyMCEMentionsQueries } from 'App';\n\nimport styled, { useTheme } from 'styled-components';\n\nconst CSSTextWrapper = styled.div`\n cursor: text;\n p {\n word-wrap: break-word;\n }\n a {\n word-wrap: break-word;\n }\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 } = widget.content;\n const dispatch = useDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n const isBusy = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidgetState(state, uniqid)?.busy);\n const token = useSelector(Widget.selectors.selectToken);\n const tinyMCECommonOptions = useSelector(TinyMCE.selectors.selectTinyMCECommonOptions);\n const models = useSelector(Model.selectors.selectAll);\n\n const intl = useIntl();\n\n const onError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !text || text.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [text]);\n\n const tinyMentionsQueries = useMemo(() => {\n return getTinyMCEMentionsQueries(models, theme, onError);\n }, [models, onError, theme]);\n\n // small hack to hide and redraw tinymce to avoid initialization issue\n if (isBusy) {\n return <></>;\n }\n\n return (\n <CSSTextWrapper>\n <WidgetArticleText\n autoFocus={isActive}\n text={text ?? ''}\n token={mode === 'edit' && token !== undefined ? token : ''}\n tinyMCECommonOptions={\n mode === 'edit' && tinyMCECommonOptions\n ? {\n tinymceScriptSrc: 'https://ecosysteme.jamespot.pro/js/tinymce/tinymce.min.js',\n commonOptions: tinyMCECommonOptions,\n mentionsQueries: tinyMentionsQueries,\n }\n : undefined\n }\n mode={mode}\n onChange={(text) => {\n dispatch(updateWidgetContent<WidgetArticleTextContent>(uniqid, { text }));\n }}\n />\n </CSSTextWrapper>\n );\n};\n","import React, { useEffect } from 'react';\n\nimport JRCore from 'App';\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';\n\nconst WidgetArticleTitle = JRCore.registry.getLazyComponent('WidgetArticleTitle');\n\nimport styled from 'styled-components';\n\nconst CSSTextWrapper = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n align-items: center;\n cursor: text;\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 useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !text || text.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [text]);\n\n return (\n <CSSTextWrapper>\n <WidgetArticleTitle\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 </CSSTextWrapper>\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, { useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport jamespot from 'jamespot-user-api';\n\nimport styled from 'styled-components';\n\nimport { useDispatch } from 'react-redux';\nimport { Toast, Widget } from 'jamespot-front-business';\nimport JRCore from 'App';\nimport { JRCIconButton } from 'jamespot-react-components';\n\nconst JRCButton = JRCore.registry.getLazyComponent('Button');\nconst JRCModalLayout = JRCore.registry.getLazyComponent('ModalLayout');\nconst JRCModalContent = JRCore.registry.getLazyComponent('ModalContent');\n\nexport const Button = styled.button`\n padding: ${(props) => props.theme.space.md}px;\n`;\n\nexport const Footer = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n display: flex;\n flex-direction: row-reverse;\n`;\n\nexport const WidgetRemove = ({ id, type, uniqid }: { id: number; type: string; uniqid: string }) => {\n const dispatch = useDispatch();\n const intl = useIntl();\n const [isOpen, setIsOpen] = useState<boolean>(false);\n\n const handleRemove = () => {\n jamespot.widget\n .removeWidget({ id, type, uniqid })\n .then(() => {\n dispatch(Widget.slice.actions.flushWidget({ uniqid }));\n })\n .catch(() => dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Error' })));\n };\n\n return (\n <>\n <JRCIconButton iconSize={14} onClick={() => setIsOpen(true)} icon=\"icon-trash\" />\n {isOpen && (\n <JRCModalLayout enableClickAwayCloseModal={true} open={isOpen} closeHandler={() => setIsOpen(false)}>\n <JRCModalContent\n overflow={'scroll'}\n title={intl.formatMessage({ id: 'WIDGET_Remove_Widget' })}\n onClickIconClose={() => setIsOpen(false)}>\n {intl.formatMessage({ id: 'WIDGET_Delete_Widget_Confirmation' })}\n </JRCModalContent>\n <Footer>\n <JRCButton label={intl.formatMessage({ id: 'GLOBAL_Confirm' })} onClick={handleRemove} />\n </Footer>\n </JRCModalLayout>\n )}\n </>\n );\n};\n","import React, { useCallback, useMemo } from 'react';\nimport { useIntl } from 'react-intl';\nimport jamespot, {\n WidgetsRootState,\n WidgetsName,\n ensureWidgetPresenceContent,\n ensureWidgetObjectHasMinimumProperties,\n Rights,\n WidgetDisplayMode,\n} from 'jamespot-user-api';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport styled from 'styled-components';\nimport { Toast, Widget, WidgetEditor } from 'jamespot-front-business';\nimport { WidgetRemove } from './WidgetRemove';\n\nexport const Footer = styled.div`\n display: flex;\n flex: 1;\n flex-direction: row;\n border-top: 1px solid ${(props) => props.theme.color.grey1};\n`;\n\nexport const Button = styled.button`\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n background-color: ${(props) => props.theme.color.white};\n &:hover {\n background-color: ${(props) => props.theme.color.grey0};\n }\n`;\n\nexport const WidgetFooterView = ({\n name,\n uniqid,\n mode,\n collaborationRights,\n handleOpenEditor,\n}: {\n name: WidgetsName;\n uniqid: string;\n mode?: WidgetDisplayMode;\n collaborationRights?: Pick<Rights, 'update'>;\n handleOpenEditor?: () => void;\n}) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const widgetObject = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObject(state, uniqid),\n shallowEqual,\n );\n const widgetObjectRights = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObjectRights(state, uniqid),\n shallowEqual,\n );\n\n const canUpdate = useMemo(\n () =>\n (widgetObject && widgetObjectRights && widgetObjectRights.update) ||\n (collaborationRights && collaborationRights.update),\n [widgetObject, widgetObjectRights, collaborationRights],\n );\n\n const canDelete = useMemo(\n () => widgetObject && widgetObjectRights && widgetObjectRights.delete,\n [widgetObject, widgetObjectRights],\n );\n\n const handleOnClick = useCallback(() => {\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid,\n name,\n onSave: (content) => {\n if (\n widgetObject &&\n widgetObject.id &&\n widgetObject.type &&\n ensureWidgetPresenceContent(content) &&\n mode === 'view'\n ) {\n jamespot.widget\n .updateWidget({\n id: widgetObject.id,\n type: widgetObject.type,\n uniqid,\n content,\n v2: true,\n })\n .catch(() => dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Error' })));\n }\n },\n }),\n );\n }, [uniqid, dispatch, name, widgetObject, mode]);\n\n return canUpdate && ensureWidgetObjectHasMinimumProperties(widgetObject) ? (\n <Footer>\n <Button onClick={handleOpenEditor ?? handleOnClick}>\n {intl.formatMessage({ id: 'WIDGET_Set_Widget' })}\n </Button>\n {canDelete && <WidgetRemove id={widgetObject.id} type={widgetObject.type} uniqid={uniqid} />}\n </Footer>\n ) : (\n <></>\n );\n};\n","import { Toast, updateWidgetContent, UserCurrent, Widget, WidgetEditor } from 'jamespot-front-business';\nimport { JRCWidgetCheckListEntries } from 'jamespot-react-components';\nimport jamespot, {\n CombinedWidgetContent,\n WidgetCheckListContent,\n WidgetCheckListContentArr,\n WidgetCheckListType,\n WidgetDisplayMode,\n WidgetsName,\n WidgetsRootState,\n} from 'jamespot-user-api';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\nimport JRCore from 'App';\nimport { WidgetFooterView } from './components/WidgetFooterView';\n\nconst WidgetCheckList = JRCore.registry.getLazyComponent('WidgetCheckList');\nconst WidgetCheckListEditor = JRCore.registry.getLazyComponent('WidgetCheckListEditor');\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 CommentContainer = styled.div`\n width: 100%;\n display: flex;\n gap: 14px;\n padding: 16px;\n`;\n\nexport const FormItemContainer = styled.div<{ border?: boolean }>`\n width: 100%;\n padding-bottom: 12px;\n border-bottom: ${(props) => (props.border ? `1px solid ${props.theme.color.grey1}` : 0)};\n`;\n\ntype JRCWidgetCheckListWrapperProps = {\n widget: WidgetCheckListType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n onWidgetUpdate?: () => void;\n};\n\nexport const JRCWidgetCheckListWrapper = ({\n widget,\n inplace,\n mode,\n onWidgetUpdate,\n}: JRCWidgetCheckListWrapperProps) => {\n const intl = useIntl();\n const { uniqid, content: widgetContent } = widget;\n const dispatch = useDispatch();\n\n const [entries, setEntries] = useState<JRCWidgetCheckListEntries | undefined>();\n\n const [token, setToken] = useState<string>();\n const [tokenLoading, setTokenLoading] = useState(false);\n\n const currentUser = useSelector(UserCurrent.selectors.get);\n\n const widgetObject = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObject(state, widget.uniqid),\n shallowEqual,\n );\n\n const widgetObjectRights = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObjectRights(state, uniqid),\n shallowEqual,\n );\n\n const canEditCollaboration = useMemo(() => {\n return widgetObjectRights && widgetObjectRights.update;\n }, [widgetObjectRights]);\n\n const onError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const onChange = (uniqid: string, content: CombinedWidgetContent) => {\n dispatch(updateWidgetContent(uniqid, content));\n };\n\n const onChangeWrapper = (content: { uniqid: string; title?: string }) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ ...content }));\n };\n\n const handleCheckItem = (id: string, index: number, items: JRCWidgetCheckListEntries) => {\n if (!widgetObject || !widgetObject.id) 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: widgetObject.id,\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 openEditorPanel = (token: string) => {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n dispatch(Widget.slice.actions.setToken({ token }));\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid: widget.uniqid,\n name: WidgetsName.CheckList,\n }),\n );\n };\n\n useEffect(() => {\n const finalEntries: JRCWidgetCheckListEntries | undefined = widget.content.arr?.map((item) => ({\n text: item.title ?? '',\n checked: item.value ?? false,\n ...(item.links && {\n links: item.links,\n }),\n ...(item.user && { user: item.user ?? undefined }),\n ...(item.id && { id: item.id, mimetype: 'image/png' }),\n }));\n\n setEntries(finalEntries);\n }, [widget.content.arr, widgetContent]);\n\n useEffect(() => {\n if (token || tokenLoading) return;\n const fetchToken = () => {\n setTokenLoading(true);\n return 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 fetchToken();\n }, [onError, token, tokenLoading]);\n\n if (mode === 'edit') {\n if (inplace) {\n return (\n <>\n <CommentContainer>\n <WidgetCheckListEditor\n token={token}\n uniqid={uniqid}\n content={widgetContent}\n onChangeContent={onChange}\n onChangeWrapper={onChangeWrapper}\n canEditCollaboration={false}\n />\n </CommentContainer>\n </>\n );\n }\n }\n\n return (\n <>\n {entries && (\n <div key={widget.uniqid} style={{ width: '100%' }}>\n <WidgetCheckList\n limit={10}\n initialEntries={entries}\n onFileClick={() => {\n // we did not use the onClick function\n }}\n onItemCheckListChange={(index, items) => handleCheckItem(widget.uniqid, index, items)}\n />\n {(widgetContent.edit || canEditCollaboration) && (\n <WidgetFooterView\n uniqid={widget.uniqid}\n name={widget.name}\n collaborationRights={{\n update: !!(widgetContent.edit || canEditCollaboration),\n }}\n mode={mode}\n handleOpenEditor={() => {\n if (token) {\n openEditorPanel(token);\n } else {\n onError(intl.formatMessage({ id: 'GLOBAL_Error' }));\n }\n }}\n />\n )}\n </div>\n )}\n </>\n );\n};\n","import { WidgetTableColumn, WidgetTableColumnsData } from 'jamespot-user-api';\n\nexport const getVisibleColumns = (tableColumnsData: WidgetTableColumnsData, columns: WidgetTableColumn[]) => {\n const toRet: WidgetTableColumn[] = [];\n tableColumnsData\n .filter((data) => data.isVisible)\n .forEach((data) => {\n const column = columns.find((el) => el.name === data.name);\n if (column) {\n toRet.push(column);\n }\n });\n\n return toRet;\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport JRCore from 'App';\nconst WidgetTable = JRCore.registry.getLazyComponent('WidgetTable');\n\nimport { FormattedMessage } from 'react-intl';\n\nconst Loader = JRCore.registry.getLazyComponent('Loader');\n\nimport jamespot, {\n DatasourceResultSort,\n DatasourceType,\n Format,\n WidgetDatasourceValues,\n WidgetDisplayMode,\n WidgetsName,\n WidgetTableColumn,\n} from 'jamespot-user-api';\n\nimport styled from 'styled-components';\nimport { WidgetDatasourceTableContent } from 'jamespot-user-api';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { useAppDispatch } from 'redux/store';\nimport { getVisibleColumns } from './utils';\nimport { FitType, useArticleRT } from '../hooks';\n\nconst JRCButton = JRCore.registry.getLazyComponent('Button');\nconst JRCHtml = JRCore.registry.getLazyComponent('Html');\n\nexport const Wrapper = styled.div``;\n\nexport const AbsoluteWrapper = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: ${(props) => props.theme.space.md}px;\n`;\n\nexport const WrapperEditMode = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n gap: ${(props) => props.theme.space.md}px;\n color: ${(props) => props.theme.color.primary};\n cursor: pointer;\n opacity: 0;\n border: 1px solid ${(props) => props.theme.color.primary};\n &:hover {\n background-color: ${(props) => props.theme.color.grey2};\n opacity: 0.9;\n }\n`;\n\nexport const WidgetDatasourceTableWrapper = ({\n uniqid,\n uri,\n limit,\n tableHeadColor,\n tableHeadTextColor,\n tableHeadIconColor,\n tableRowColor,\n tableRowTextColor,\n tableColumnsData = [],\n tableBorderRadius,\n tableSizedColumns,\n tableSizedColumnsWidth,\n mode,\n}: WidgetDatasourceTableContent & { uniqid: string; mode: WidgetDisplayMode }) => {\n const intl = useIntl();\n const dispatch = useAppDispatch();\n const [isEditorOpenOnFirstRender, setIsEditorOpenOnFirstRender] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [datasourceData, setDatasourceData] = useState<Record<string, WidgetDatasourceValues>[]>([]);\n const [datasourceModel, setDatasourceModel] = useState<WidgetTableColumn[]>([]);\n const [datasourceSort, setDatasourceSort] = useState<DatasourceResultSort>({ order: 'ascending', name: 'unknown' });\n const [datasourceType, setDatasourceType] = useState<DatasourceType | undefined>(undefined);\n const [datasourceIdentifier, setDatasourceIdentifier] = useState<string>('');\n\n const definition = useMemo(() => Widget.definition(WidgetsName.DatasourceTable), []);\n const rtConditions = useMemo<FitType[]>(() => {\n if (datasourceType === 'studio') {\n return [{ type: [datasourceIdentifier] }];\n }\n\n return [];\n }, [datasourceType, datasourceIdentifier]);\n const rtAudience = useMemo<string[]>(() => {\n if (datasourceType === 'doc') {\n return [datasourceIdentifier];\n }\n\n return [];\n }, [datasourceType, datasourceIdentifier]);\n\n const { rtLastObject } = useArticleRT(rtConditions, rtAudience);\n\n const fetchDatasource = useCallback(() => {\n if (!uri) {\n return;\n }\n\n setIsLoading(true);\n jamespot.datasource\n .get(uri, Format.VIEW)\n .then((response) => {\n setDatasourceModel(response.result.model);\n setDatasourceData(response.result.data);\n setDatasourceSort(response.result.sort);\n setDatasourceType(response.result.datasource.datasourceType);\n setDatasourceIdentifier(response.result.datasource.datasourceIdentifier);\n })\n .finally(() => setIsLoading(false));\n }, [uri]);\n\n useEffect(() => {\n if (uri !== undefined && tableColumnsData.length !== 0 && datasourceModel.length === 0) {\n fetchDatasource();\n }\n }, [uri, tableColumnsData, datasourceModel, fetchDatasource]);\n\n useEffect(() => {\n if (!rtLastObject) {\n return;\n }\n\n fetchDatasource();\n }, [rtLastObject, fetchDatasource]);\n\n useEffect(() => {\n if (!uri) {\n setDatasourceModel([]);\n }\n }, [uri]);\n\n const registerEditor = useCallback(() => {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n setTimeout(() => {\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: WidgetsName.DatasourceTable }));\n }, 0);\n }, [dispatch, uniqid]);\n\n useEffect(() => {\n if (mode === 'view' || mode === 'preview') {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n }\n }, [mode, dispatch]);\n\n useEffect(() => {\n if (!isEditorOpenOnFirstRender && !uri && mode === 'edit') {\n registerEditor();\n setIsEditorOpenOnFirstRender(true);\n }\n }, [dispatch, uniqid, isEditorOpenOnFirstRender, uri, registerEditor, mode]);\n\n const columns = useMemo(\n () => getVisibleColumns(tableColumnsData, datasourceModel),\n [tableColumnsData, datasourceModel],\n );\n\n if (tableColumnsData.length === 0 && !isLoading && mode === 'edit') {\n return (\n <>\n <AbsoluteWrapper onClick={registerEditor}>\n <img src={`/img/fast-intranet/${WidgetsName.DatasourceTable}.png`} alt=\"\" />\n <FormattedMessage id={definition.label} />\n <JRCButton label=\"GLOBAL_Settings\" />\n </AbsoluteWrapper>\n <WrapperEditMode onClick={registerEditor}>\n <JRCHtml\n __html={`${intl.formatMessage({ id: 'WIDGET_Set_Widget' })} <b>${intl.formatMessage({\n id: definition.label,\n })}</b>`}\n />\n </WrapperEditMode>\n </>\n );\n }\n\n return isLoading ? (\n <AbsoluteWrapper>\n <Loader />\n </AbsoluteWrapper>\n ) : (\n <>\n {!isLoading && datasourceData.length === 0 ? (\n <AbsoluteWrapper>\n <img src={`/img/fast-intranet/${WidgetsName.DatasourceTable}.png`} alt=\"\" />\n <FormattedMessage id={'WIDGET_Datasource_No_Results'} />\n </AbsoluteWrapper>\n ) : (\n <WidgetTable\n rows={datasourceData}\n columns={columns}\n limit={limit}\n tableHeadColor={tableHeadColor}\n tableHeadTextColor={tableHeadTextColor}\n tableHeadIconColor={tableHeadIconColor}\n tableRowColor={tableRowColor}\n tableRowTextColor={tableRowTextColor}\n tableBorderRadius={tableBorderRadius}\n tableColumnsData={tableColumnsData}\n tableSizedColumns={tableSizedColumns}\n tableSizedColumnsWidth={tableSizedColumnsWidth}\n tableDefaultSortOrder={datasourceSort.order}\n tableDefaultSortName={datasourceSort.name}\n />\n )}\n {mode === 'edit' ? (\n <WrapperEditMode onClick={registerEditor}>\n <JRCHtml\n __html={`${intl.formatMessage({ id: 'WIDGET_Set_Widget' })} <b>${intl.formatMessage({\n id: definition.label,\n })}</b>`}\n />\n </WrapperEditMode>\n ) : (\n <></>\n )}\n </>\n );\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport JRCore from 'App';\nconst WidgetTable = JRCore.registry.getLazyComponent('WidgetTable');\n\nimport { FormattedMessage } from 'react-intl';\n\nconst Loader = JRCore.registry.getLazyComponent('Loader');\n\nimport jamespot, {\n Format,\n WidgetDatasourceValues,\n WidgetDisplayMode,\n WidgetExcelDatasourceTableContent,\n WidgetsName,\n WidgetTableColumn,\n} from 'jamespot-user-api';\n\nimport styled from 'styled-components';\n\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { useAppDispatch } from 'redux/store';\nimport { getVisibleColumns } from './utils';\n\nconst JRCButton = JRCore.registry.getLazyComponent('Button');\nconst JRCHtml = JRCore.registry.getLazyComponent('Html');\nexport const Wrapper = styled.div``;\n\nexport const AbsoluteWrapper = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: ${(props) => props.theme.space.md}px;\n`;\n\nexport const WrapperEditMode = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n gap: ${(props) => props.theme.space.md}px;\n color: ${(props) => props.theme.color.primary};\n cursor: pointer;\n opacity: 0;\n border: 1px solid ${(props) => props.theme.color.primary};\n &:hover {\n background-color: ${(props) => props.theme.color.grey2};\n opacity: 0.9;\n }\n`;\n\nexport const WidgetExcelDatasourceTableWrapper = ({\n uniqid,\n uri,\n limit,\n tableHeadColor,\n tableHeadTextColor,\n tableHeadIconColor,\n tableRowColor,\n tableRowTextColor,\n tableColumnsData = [],\n tableBorderRadius,\n tableSizedColumns,\n tableSizedColumnsWidth,\n mode,\n}: WidgetExcelDatasourceTableContent & { uniqid: string; mode: WidgetDisplayMode }) => {\n const intl = useIntl();\n const dispatch = useAppDispatch();\n const [isEditorOpenOnFirstRender, setIsEditorOpenOnFirstRender] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [datasourceData, setDatasourceData] = useState<Record<string, WidgetDatasourceValues>[]>([]);\n const [datasourceModel, setDatasourceModel] = useState<WidgetTableColumn[]>([]);\n\n const definition = useMemo(() => Widget.definition(WidgetsName.ExcelDatasourceTable), []);\n\n useEffect(() => {\n if (uri !== undefined && tableColumnsData.length !== 0 && datasourceModel.length === 0) {\n setIsLoading(true);\n jamespot.datasource\n .get(uri, Format.VIEW)\n .then((response) => {\n setDatasourceModel(response.result.model);\n setDatasourceData(response.result.data);\n })\n .finally(() => setIsLoading(false));\n }\n }, [uri, tableColumnsData, datasourceModel]);\n\n useEffect(() => {\n if (!uri) {\n setDatasourceModel([]);\n }\n }, [uri]);\n\n const registerEditor = useCallback(() => {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n setTimeout(\n () =>\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: WidgetsName.ExcelDatasourceTable })),\n 0,\n );\n }, [dispatch, uniqid]);\n\n useEffect(() => {\n if (mode === 'view' || mode === 'preview') {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n }\n }, [mode, dispatch]);\n\n useEffect(() => {\n if (!isEditorOpenOnFirstRender && !uri && mode === 'edit') {\n registerEditor();\n setIsEditorOpenOnFirstRender(true);\n }\n }, [dispatch, uniqid, isEditorOpenOnFirstRender, uri, registerEditor, mode]);\n\n const columns = useMemo(\n () => getVisibleColumns(tableColumnsData, datasourceModel),\n [tableColumnsData, datasourceModel],\n );\n\n if (tableColumnsData.length === 0 && !isLoading && mode === 'edit') {\n return (\n <>\n <AbsoluteWrapper onClick={registerEditor}>\n <img src={`/img/fast-intranet/${WidgetsName.ExcelDatasourceTable}.png`} alt=\"\" />\n <FormattedMessage id={definition.label} />\n <JRCButton label=\"GLOBAL_Settings\" />\n </AbsoluteWrapper>\n <WrapperEditMode onClick={registerEditor}>\n <JRCHtml\n __html={`${intl.formatMessage({ id: 'WIDGET_Set_Widget' })} <b>${intl.formatMessage({\n id: definition.label,\n })}</b>`}\n />\n </WrapperEditMode>\n </>\n );\n }\n\n return isLoading ? (\n <AbsoluteWrapper>\n <Loader />\n </AbsoluteWrapper>\n ) : (\n <>\n {!isLoading && datasourceData.length === 0 ? (\n <AbsoluteWrapper>\n <img src={`/img/fast-intranet/${WidgetsName.ExcelDatasourceTable}.png`} alt=\"\" />\n <FormattedMessage id={'WIDGET_Datasource_No_Results'} />\n </AbsoluteWrapper>\n ) : (\n <WidgetTable\n rows={datasourceData}\n columns={columns}\n limit={limit}\n tableHeadColor={tableHeadColor}\n tableHeadTextColor={tableHeadTextColor}\n tableHeadIconColor={tableHeadIconColor}\n tableRowColor={tableRowColor}\n tableRowTextColor={tableRowTextColor}\n tableBorderRadius={tableBorderRadius}\n tableColumnsData={tableColumnsData}\n tableSizedColumns={tableSizedColumns}\n tableSizedColumnsWidth={tableSizedColumnsWidth}\n />\n )}\n {mode === 'edit' ? (\n <WrapperEditMode onClick={registerEditor}>\n <JRCHtml\n __html={`${intl.formatMessage({ id: 'WIDGET_Set_Widget' })} <b>${intl.formatMessage({\n id: definition.label,\n })}</b>`}\n />\n </WrapperEditMode>\n ) : (\n <></>\n )}\n </>\n );\n};\n","import React, { useCallback, useMemo } from 'react';\n\nimport jamespot, {\n WidgetDisplayMode,\n WidgetsRootState,\n ensureWidgetObjectHasMinimumProperties,\n WidgetPresenceContent,\n} from 'jamespot-user-api';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nexport const CSSPaddingMd = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n`;\n\nexport const CSSHref = styled.a`\n cursor: pointer;\n color: ${(props) => props.theme.color.secondary};\n`;\n\nexport const CSSHorizontalAlign = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nimport { Toast, Widget } from 'jamespot-front-business';\n\nexport const WidgetPresenceWrapperClosing = ({\n mode,\n uniqid,\n isClosed,\n}: { mode?: WidgetDisplayMode; uniqid: string } & Pick<WidgetPresenceContent, 'isClosed'>) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n\n const widgetObject = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObject(state, uniqid),\n shallowEqual,\n );\n\n const widgetObjectRights = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObjectRights(state, uniqid),\n shallowEqual,\n );\n\n const canUpdate = useMemo(() => {\n return widgetObject && widgetObjectRights && widgetObjectRights.update;\n }, [widgetObject, widgetObjectRights]);\n\n const handleClosing = useCallback(() => {\n if (mode === 'edit' || !canUpdate) {\n return;\n }\n if (!ensureWidgetObjectHasMinimumProperties(widgetObject)) {\n return;\n }\n\n const content = { isClosed: !isClosed };\n\n jamespot.widget\n .updateWidget({\n id: widgetObject.id,\n type: widgetObject.type,\n uniqid,\n content,\n v2: true,\n })\n .then(() => dispatch(Widget.slice.actions.updateWidget({ uniqid, content })))\n .catch(() => dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Error' })));\n }, [isClosed, mode, uniqid, canUpdate, widgetObject, dispatch]);\n\n return (\n <CSSPaddingMd>\n <CSSHorizontalAlign>\n <CSSHref onClick={handleClosing}>{intl.formatMessage({ id: 'WIDGET_Presence_Closing' })}</CSSHref>\n </CSSHorizontalAlign>\n </CSSPaddingMd>\n );\n};\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport jamespot, {\n ensureWidgetPresenceResponsePayload,\n WidgetPresenceResponse,\n WidgetDisplayMode,\n WidgetPresenceType,\n WidgetsRootState,\n ensureWidgetObjectHasMinimumProperties,\n} from 'jamespot-user-api';\nimport { RTProvider } from 'App';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport JRCore from 'App';\n\nimport styled from 'styled-components';\n\nconst JRCLoader = JRCore.registry.getLazyComponent('Loader');\nconst JRCWidgetPresence = JRCore.registry.getLazyComponent('WidgetPresence');\n\nexport const CSSWidgetPresenceWrapper = styled.div`\n display: flex;\n flex: 1;\n position: relative;\n flex-direction: column;\n`;\n\nexport const CSSWidgetPresenceState = styled.div`\n position: absolute;\n inset: 0;\n background-color: rgba(255, 255, 255, 0.7);\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n`;\n\nimport { Toast, Widget } from 'jamespot-front-business';\nimport { WidgetFooterView } from './components/WidgetFooterView';\nimport { useWidgetRT } from '../hooks';\nimport { WidgetPresenceWrapperClosing } from './JRCWidgetPresenceWrapperClosing';\n\nexport const JRCWidgetPresenceWrapper = ({\n widget,\n mode,\n}: {\n widget: WidgetPresenceType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const dispatch = useDispatch();\n const { limit, limitValue, closing, isClosed } = widget.content;\n const [response, setResponse] = useState<WidgetPresenceResponse>({\n userValue: -1,\n userAvailableList: [],\n userUnavailableList: [],\n userAvailableTotal: 0,\n userUnavailableTotal: 0,\n });\n const [isPendingResponse, setIsPendingResponse] = useState<boolean>(false);\n const [abortController] = useState<AbortController>(new AbortController());\n const ref = useRef<AbortController>(abortController);\n\n const widgetObject = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObject(state, widget.uniqid),\n shallowEqual,\n );\n\n const allRt = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectAllWidgetRTObject(state, widget.uniqid),\n shallowEqual,\n );\n\n const handleClickAvailable = () => (response.userValue === 1 ? handleCancelRespond() : handleRespond(1));\n const handleClickUnavailable = () => (response.userValue === 0 ? handleCancelRespond() : handleRespond(0));\n\n const handleError = useCallback(\n () => dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Error' })),\n [dispatch],\n );\n\n const lockedRespondHandler = useMemo(() => {\n return (closing && isClosed) || mode === 'edit';\n }, [closing, isClosed, mode]);\n\n const handleCancelRespond = useCallback(() => {\n if (lockedRespondHandler) {\n return;\n }\n if (!ensureWidgetObjectHasMinimumProperties(widgetObject)) {\n handleError();\n return;\n }\n\n setIsPendingResponse(true);\n jamespot.widget\n .presenceCancel({ id: Number(widgetObject.id), type: widgetObject.type, uniqid: widget.uniqid })\n .catch(handleError)\n .finally(() => setIsPendingResponse(false));\n }, [widgetObject, widget, handleError, lockedRespondHandler]);\n\n const handleRespond = useCallback(\n (responseValue: 1 | 0) => {\n if (lockedRespondHandler) {\n return;\n }\n if (!ensureWidgetObjectHasMinimumProperties(widgetObject)) {\n handleError();\n return;\n }\n\n setIsPendingResponse(true);\n const payload = {\n id: Number(widgetObject.id),\n type: widgetObject.type,\n uniqid: widget.uniqid,\n value: responseValue,\n };\n if (!ensureWidgetPresenceResponsePayload(payload)) {\n setIsPendingResponse(false);\n dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Payload_Error' }));\n return;\n }\n jamespot.widget\n .presenceRespond(payload, ref.current.signal)\n .catch(handleError)\n .finally(() => setIsPendingResponse(false));\n },\n [widgetObject, dispatch, widget, handleError, lockedRespondHandler],\n );\n\n const handleResponse = useCallback(\n (id: number, type: string, uniqid: string) => {\n if (mode === 'edit') {\n return;\n }\n if (limit && limitValue && response.userAvailableTotal >= limitValue) {\n dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Limit_Response_Error' }));\n return;\n }\n\n jamespot.widget\n .presenceGetResponse({ id, type, uniqid }, ref.current.signal)\n .then((response) => {\n setResponse(response.result);\n })\n .catch((err) => !err.aborted && handleError());\n },\n [dispatch, response.userAvailableTotal, limit, limitValue, handleError, mode],\n );\n\n useEffect(() => {\n return () => {\n if (ref && ref.current) {\n ref.current.abort();\n }\n };\n }, []);\n\n useEffect(() => {\n if (!ensureWidgetObjectHasMinimumProperties(widgetObject)) {\n return;\n }\n\n handleResponse(widgetObject.id, widgetObject.type, widget.uniqid);\n }, [handleResponse, widgetObject, widget]);\n\n useEffect(() => {\n if (!Array.isArray(allRt)) {\n return;\n }\n const lastRt = allRt.at(-1);\n if (!lastRt) {\n return;\n }\n\n if (lastRt.object.id === Number(widgetObject?.id) && lastRt.uniqid === widget.uniqid && !isPendingResponse) {\n handleResponse(lastRt.object.id, lastRt.object.type, widget.uniqid);\n }\n }, [allRt, widgetObject, handleResponse, widget, isPendingResponse]);\n\n return (\n <RTProvider\n useRT={() => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useWidgetRT(widget.uniqid);\n }}>\n <CSSWidgetPresenceWrapper>\n <JRCWidgetPresence\n limit={limit}\n limitValue={limitValue}\n userAvailableList={response.userAvailableList}\n userUnavailableList={response.userUnavailableList}\n userValue={response.userValue}\n userAvailableTotal={response?.userAvailableTotal}\n userUnavailableTotal={response?.userUnavailableTotal}\n isClosed={closing && isClosed}\n handleClickAvailable={handleClickAvailable}\n handleClickUnavailable={handleClickUnavailable}\n />\n {isPendingResponse && (\n <CSSWidgetPresenceState>\n <JRCLoader size={'l'} />\n </CSSWidgetPresenceState>\n )}\n {closing && !isClosed && (\n <WidgetPresenceWrapperClosing mode={mode} uniqid={widget.uniqid} isClosed={isClosed} />\n )}\n {mode === 'view' && <WidgetFooterView uniqid={widget.uniqid} name={widget.name} mode={mode} />}\n </CSSWidgetPresenceWrapper>\n </RTProvider>\n );\n};\n","import React from 'react';\n\nimport { Widget } from 'jamespot-front-business';\nimport { WidgetsRootState } from 'jamespot-user-api';\nimport { shallowEqual, useSelector } from 'react-redux';\n\nimport styled from 'styled-components';\n\nexport const CSSWidgetTitle = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n border-bottom: 1px solid ${(props) => props.theme.color.grey1};\n`;\n\nexport const WidgetTitle = ({ uniqid }: { uniqid: string }) => {\n const widgetWrapper = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid),\n shallowEqual,\n );\n return <CSSWidgetTitle>{widgetWrapper?.title}</CSSWidgetTitle>;\n};\n","import { Widget } from 'jamespot-front-business';\nimport { JRCInputText } from 'jamespot-react-components';\nimport { WidgetsRootState } from 'jamespot-user-api';\nimport React, { useState, useEffect } from 'react';\n\nimport { useForm } from 'react-hook-form';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nconst DELAY_DEBOUNCE_VALUE = 800;\n\nexport const WidgetTitleEdit = ({ uniqid }: { uniqid: string }) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const [title, setTitle] = useState<string>('');\n const widgetWrapper = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid),\n shallowEqual,\n );\n\n const { control, watch } = useForm({\n defaultValues: { widgetTitle: widgetWrapper?.title ?? '' },\n criteriaMode: 'all',\n });\n\n useEffect(() => {\n const delayDebounce = setTimeout(() => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ uniqid, title }));\n }, DELAY_DEBOUNCE_VALUE);\n\n return () => clearTimeout(delayDebounce);\n }, [title, dispatch, uniqid]);\n\n useEffect(() => {\n const subscription = watch((data) => {\n setTitle(data.widgetTitle ?? '');\n });\n return () => subscription.unsubscribe();\n }, [watch, dispatch, uniqid]);\n\n return (\n <JRCInputText\n name={'widgetTitle'}\n control={control}\n placeholder={intl.formatMessage({ id: 'GLOBAL_Title' })}\n width=\"100%\"\n />\n );\n};\n","import React, { useCallback, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\nimport { WidgetTitleEdit } from './WidgetTitleEdit';\nimport { JRCIconButton } from 'jamespot-react-components';\nimport { useAppDispatch } from 'redux/store';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { WidgetsName } from 'jamespot-user-api';\n\nimport JRCore from 'App';\n\nconst JRCButton = JRCore.registry.getLazyComponent('Button');\nconst JRCModalLayout = JRCore.registry.getLazyComponent('ModalLayout');\nconst JRCModalContent = JRCore.registry.getLazyComponent('ModalContent');\n\nexport const CSSModalFooter = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n display: flex;\n flex-direction: row-reverse;\n`;\n\nexport const CSSWidgetHeaderEdit = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n gap: ${(props) => props.theme.space.sm}px;\n padding: ${(props) => props.theme.space.sm}px;\n border-bottom: 1px solid ${(props) => props.theme.color.grey1};\n`;\n\nexport const CSSWidgetHeaderEditTitle = styled.div`\n flex: 1;\n display: flex;\n :first-child {\n margin: 0px !important;\n }\n`;\n\nexport const CSSWidgetHeaderEditActions = styled.div`\n display: flex;\n gap: ${(props) => props.theme.space.sm}px;\n`;\n\nexport const WidgetHeaderEdit = ({\n uniqid,\n name,\n handleOpenEditor,\n}: {\n uniqid: string;\n name: WidgetsName;\n handleOpenEditor?: () => void;\n}) => {\n const dispatch = useAppDispatch();\n const intl = useIntl();\n const [isOpen, setIsOpen] = useState<boolean>(false);\n\n const handleOnClick = useCallback(() => {\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid,\n name,\n }),\n );\n }, [uniqid, dispatch, name]);\n\n const handleRemoveWidget = useCallback(() => {\n dispatch(Widget.slice.actions.flushWidget({ uniqid }));\n }, [uniqid, dispatch]);\n\n return (\n <>\n <CSSWidgetHeaderEdit>\n <CSSWidgetHeaderEditTitle>\n <WidgetTitleEdit uniqid={uniqid} />\n </CSSWidgetHeaderEditTitle>\n <CSSWidgetHeaderEditActions>\n <JRCIconButton\n icon=\"icon-pencil\"\n bg={'grey1'}\n bgHover={'grey2'}\n color={'grey5'}\n iconSize={14}\n onClick={handleOpenEditor ?? handleOnClick}\n title={intl.formatMessage({ id: 'BUTTON_Title_Open_Edit_Panel' })}\n />\n <JRCIconButton\n icon=\"icon-trash\"\n bg={'grey1'}\n bgHover={'grey2'}\n color={'grey5'}\n iconSize={14}\n onClick={() => setIsOpen(true)}\n title={intl.formatMessage({ id: 'BUTTON_Title_Open_Remove_Widget' })}\n />\n </CSSWidgetHeaderEditActions>\n </CSSWidgetHeaderEdit>\n {isOpen && (\n <JRCModalLayout enableClickAwayCloseModal={true} open={isOpen} closeHandler={() => setIsOpen(false)}>\n <JRCModalContent\n overflow={'scroll'}\n title={intl.formatMessage({ id: 'WIDGET_Remove_Widget' })}\n onClickIconClose={() => setIsOpen(false)}>\n {intl.formatMessage({ id: 'WIDGET_Delete_Widget_Confirmation' })}\n </JRCModalContent>\n <CSSModalFooter>\n <JRCButton label={intl.formatMessage({ id: 'GLOBAL_Confirm' })} onClick={handleRemoveWidget} />\n </CSSModalFooter>\n </JRCModalLayout>\n )}\n </>\n );\n};\n","import React from 'react';\n\nimport {\n CombinedWidgetType,\n ensureWidgetArticleAttachmentType,\n ensureWidgetArticleButtonType,\n ensureWidgetArticleGalleryType,\n ensureWidgetArticleImageType,\n ensureWidgetArticleSliderType,\n ensureWidgetArticleTextType,\n ensureWidgetArticleTitleType,\n ensureWidgetCheckListType,\n ensureWidgetDatasourceTableType,\n ensureWidgetExcelDatasourceTableType,\n ensureWidgetPresenceType,\n WidgetDisplayMode,\n} from 'jamespot-user-api';\n\nimport styled from 'styled-components';\n\nexport const CSSWidgetWithTitle = styled.div`\n display: flex;\n flex: 1;\n flex-direction: column;\n`;\n\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';\nimport { WidgetDatasourceTableWrapper } from './wrapper/JRCWidgetDatasourceTableWrapper';\nimport { WidgetExcelDatasourceTableWrapper } from './wrapper/JRCWidgetExcelDatasourceTableWrapper';\nimport { JRCWidgetPresenceWrapper } from './wrapper/JRCWidgetPresenceWrapper';\n\nimport { WidgetTitle } from './wrapper/components/WidgetTitle';\n\nimport { WidgetHeaderEdit } from './wrapper/components/WidgetHeaderEdit';\n\nexport const DisplayWidget = ({\n widget,\n width,\n inplace = false,\n mode = 'view',\n onWidgetUpdate,\n cannotDisplayComponent,\n}: {\n widget: CombinedWidgetType;\n width?: number | undefined;\n inplace: boolean;\n mode: WidgetDisplayMode;\n onWidgetUpdate?: () => void;\n onClick: () => void;\n cannotDisplayComponent?: (widget: string) => React.ReactNode;\n}) => {\n const { name } = widget;\n\n if (ensureWidgetArticleButtonType(widget)) {\n return <JRCWidgetArticleButtonWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetArticleGalleryType(widget)) {\n return <JRCWidgetArticleGalleryWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetArticleAttachmentType(widget)) {\n return <JRCWidgetArticleAttachmentWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetArticleImageType(widget)) {\n return <JRCWidgetArticleImageWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetArticleSliderType(widget)) {\n return <JRCWidgetArticleSliderWrapper widget={widget} inplace={inplace} mode={mode} width={width ?? 800} />;\n } else if (ensureWidgetArticleTitleType(widget)) {\n return <JRCWidgetArticleTitleWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetArticleTextType(widget)) {\n return <JRCWidgetArticleTextWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetExcelDatasourceTableType(widget)) {\n return (\n <CSSWidgetWithTitle>\n <WidgetTitle uniqid={widget.uniqid} />\n <WidgetExcelDatasourceTableWrapper {...widget.content} uniqid={widget.uniqid} mode={mode} />\n </CSSWidgetWithTitle>\n );\n } else if (ensureWidgetDatasourceTableType(widget)) {\n return (\n <CSSWidgetWithTitle>\n <WidgetTitle uniqid={widget.uniqid} />\n <WidgetDatasourceTableWrapper {...widget.content} uniqid={widget.uniqid} mode={mode} />\n </CSSWidgetWithTitle>\n );\n } else if (ensureWidgetCheckListType(widget)) {\n return (\n <CSSWidgetWithTitle>\n {mode === 'edit' ? (\n <WidgetHeaderEdit name={widget.name} uniqid={widget.uniqid} />\n ) : (\n <WidgetTitle uniqid={widget.uniqid} />\n )}\n <JRCWidgetCheckListWrapper\n widget={widget}\n inplace={inplace}\n mode={mode}\n onWidgetUpdate={onWidgetUpdate}\n />\n </CSSWidgetWithTitle>\n );\n } else if (ensureWidgetPresenceType(widget)) {\n return (\n <CSSWidgetWithTitle>\n {mode === 'edit' ? (\n <WidgetHeaderEdit name={widget.name} uniqid={widget.uniqid} />\n ) : (\n <WidgetTitle uniqid={widget.uniqid} />\n )}\n <JRCWidgetPresenceWrapper widget={widget} inplace={inplace} mode={mode} />\n </CSSWidgetWithTitle>\n );\n } else {\n return cannotDisplayComponent ? <>{cannotDisplayComponent(name)}</> : <>cannot display widget ({name})</>;\n }\n};\n","import styled from 'styled-components';\n\nconst INPUT_HEIGHT = 50;\nconst RADIUS = 8;\n\nexport const CSSHiddenDiv = styled.div`\n height: 0;\n overflow: hidden;\n`;\n\nexport const CSSEmptyText = styled.div`\n color: ${(props) => props.theme.color.grey3};\n font-style: italic;\n`;\n\nexport const CSSWrapperText = styled.div<{ color?: string }>`\n display: flex;\n flex: 1;\n width: 100%;\n border: 0;\n min-height: ${INPUT_HEIGHT}px;\n margin: 0;\n align-items: center;\n border-radius: ${RADIUS}px;\n padding: 8px;\n cursor: pointer;\n gap: 10px;\n color: ${(props) => (props.color ? props.color : props.theme.font.color)};\n transition: opacity 0.4s;\n\n &:hover {\n img {\n filter: grayscale(0);\n opacity: 1;\n }\n }\n\n img {\n filter: grayscale(1);\n opacity: 0.4;\n }\n`;\n\nexport const CSSUploadFileWrapper = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n min-height: 200px;\n`;\n\nexport const CSSWidgetWrapper = styled.div`\n display: flex;\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, { useCallback } 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 JRCore from 'App';\n\nconst BETA_JRCDoubleClick = JRCore.registry.getLazyComponent('DoubleClick');\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 = useCallback(\n (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 [child.x, child.y],\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 [mouse.x, mouse.y, mouseIsDown, start.x, start.y],\n );\n\n const handleMouseUp = useCallback(() => {\n setMouseDown(false);\n onMouseUp({ x: child.x, y: child.y });\n }, [child.x, child.y, onMouseUp]);\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, handleMouseUp]);\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 {\n ensureWidgetArticleButtonType,\n jCommentList,\n WidgetDisplayMode,\n WidgetsRootState,\n WidgetWrapperProps,\n} from 'jamespot-user-api';\nimport { useComponentVisible } from './hooks';\nimport { DisplayWidget } from './Widget';\nimport { CSSWidgetWrapper } from './Widget.style';\nimport { WidgetLayer } from './WidgetLayer/WidgetLayer';\nimport { WidgetState } from './WidgetState';\n\ntype WidgetWrapperCoreProps = {\n uniqid: string;\n widgetObject?: Partial<jCommentList>;\n widget: WidgetWrapperProps;\n inplace?: boolean;\n mode: WidgetDisplayMode;\n width?: number | undefined;\n onWidgetUpdate?: () => void;\n cannotDisplayComponent?: (widget: string) => React.ReactNode;\n};\n\n/*\n This is a widget wrapper\n*/\nexport const WidgetWrapperCore = ({\n uniqid,\n widgetObject,\n widget,\n inplace = true,\n mode,\n width,\n onWidgetUpdate,\n cannotDisplayComponent,\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 (widgetObject) {\n dispatch(Widget.slice.actions.registerWidgetObject({ uniqid, object: widgetObject }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (widget) {\n /*\n Register widget\n */\n dispatch(Widget.slice.actions.registerWidget({ uniqid, widget }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (!isComponentVisible) {\n if (uniqid === currentEditableWidgetId) {\n dispatch(Widget.slice.actions.setEditableWidgetId({ uniqid: undefined }));\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isComponentVisible]);\n\n useEffect(() => {\n if (isComponentVisible !== isActive) {\n setIsComponentVisible(isActive);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isActive]);\n\n if (widgetWrapper === undefined) {\n return <>This widget cannot be displayed</>;\n }\n\n const _widget = widgetWrapper.widget;\n\n const onClick = () => {\n if (mode === 'edit') {\n registerEditor();\n } else {\n if (ensureWidgetArticleButtonType(_widget)) {\n switch (_widget.content.openingType) {\n case 'link':\n if (_widget.content.openingTypeLink) {\n window.open(_widget.content.openingTypeLink.url, _widget.content.openingTypeLink.target);\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 <CSSWidgetWrapper\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={{\n ...widgetWrapper.widget,\n ...(widgetWrapper.title && {\n title: widgetWrapper.title,\n }),\n }}\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 </CSSWidgetWrapper>\n );\n }\n\n return (\n <CSSWidgetWrapper onClick={registerEditor}>\n <DisplayWidget\n widget={{\n ...widgetWrapper.widget,\n ...(widgetWrapper.title && {\n title: widgetWrapper.title,\n }),\n }}\n inplace={inplace}\n mode={mode}\n width={width}\n onClick={onClick}\n onWidgetUpdate={onWidgetUpdate}\n cannotDisplayComponent={cannotDisplayComponent}\n />\n <WidgetLayer uniqid={uniqid} mode={mode} />\n <WidgetState name={widgetWrapper.widget.name} uniqid={widgetWrapper.widget.uniqid} inplace={inplace} />\n </CSSWidgetWrapper>\n );\n};\n\nexport default WidgetWrapperCore;\n","import styled from 'styled-components';\nexport const CSSCommentsBlocWidgetWrapper = styled.div`\n border-radius: ${(props) => props.theme.space.sm}px;\n border: 1px solid ${(props) => props.theme.color.grey1};\n background-color: ${(props) => props.theme.color.white};\n overflow: hidden;\n`;\n","import { Widget } from 'jamespot-front-business';\n\nimport { WidgetWrapperProps } from 'jamespot-user-api';\n\nimport React from 'react';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual, useSelector } from 'react-redux';\n\nimport WidgetWrapperCore from '../widgets/WidgetWrapperCore';\nimport JRCore from 'App';\nimport { CSSCommentsBlocWidgetWrapper } from './CommentsBloc.styles';\n\nconst JRCMessage = JRCore.registry.getLazyComponent('Message');\n\nexport const CommentsBlocAddCommentWidgetsWrapper = ({ widgets }: { widgets: WidgetWrapperProps[] }) => {\n const intl = useIntl();\n const flushedWidgets = useSelector(Widget.selectors.selectFlushedWidgets, shallowEqual);\n\n return (\n <>\n {widgets\n .filter((el) => !flushedWidgets.includes(el.widget.uniqid))\n .map(\n (widget) =>\n widget &&\n widget.widget && (\n <CSSCommentsBlocWidgetWrapper key={widget.widget.uniqid}>\n <WidgetWrapperCore\n uniqid={widget.widget.uniqid}\n widget={widget}\n inplace\n mode={'edit'}\n cannotDisplayComponent={(widget) => (\n <JRCMessage\n variant={'info'}\n message={intl.formatMessage({ id: 'WIDGET_Cannot_Display' }, { widget })}\n />\n )}\n />\n </CSSCommentsBlocWidgetWrapper>\n ),\n )}\n </>\n );\n};\n","import { Widget } from 'jamespot-front-business';\n\nimport { WidgetDisplayMode, WidgetWrapperProps } from 'jamespot-user-api';\nimport { jCommentList } from 'jamespot-user-api/lib/src/types/comment';\nimport React from 'react';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual, useSelector } from 'react-redux';\nimport { CSSCommentsBlocWidgetWrapper } from './CommentsBloc.styles';\n\nimport WidgetWrapperCore from '../widgets/WidgetWrapperCore';\nimport JRCore from 'App';\n\nconst JRCMessage = JRCore.registry.getLazyComponent('Message');\n\nexport const CommentsBlocCommentWidgetsWrapper = (props: {\n comment: jCommentList;\n widgets: WidgetWrapperProps[];\n mode: WidgetDisplayMode;\n inplace: boolean;\n handleWidgetUpdate: () => void;\n handleWidgetRemove: () => void;\n}) => {\n const intl = useIntl();\n const { widgets, comment, inplace, mode, handleWidgetUpdate } = props;\n const flushedWidgets = useSelector(Widget.selectors.selectFlushedWidgets, shallowEqual);\n\n return (\n <>\n {widgets\n .filter((el) => !flushedWidgets.includes(el.widget.uniqid))\n .map(\n (widget) =>\n widget && (\n <CSSCommentsBlocWidgetWrapper key={widget.widget.uniqid}>\n <WidgetWrapperCore\n uniqid={widget.widget.uniqid}\n widgetObject={comment}\n widget={widget}\n inplace={inplace}\n mode={mode}\n onWidgetUpdate={handleWidgetUpdate}\n cannotDisplayComponent={(widget) => (\n <JRCMessage\n variant={'info'}\n message={intl.formatMessage({ id: 'WIDGET_Cannot_Display' }, { widget })}\n />\n )}\n />\n </CSSCommentsBlocWidgetWrapper>\n ),\n )}\n </>\n );\n};\n","import { getTinyMCEMentionsQueries } from 'App';\nimport {\n Application,\n ApplicationRootState,\n Comment,\n CommentRootState,\n Hook,\n HookRootState,\n Model,\n Platform,\n TinyMCE,\n Toast,\n UserCurrent,\n Widget,\n} from 'jamespot-front-business';\nimport { DriveOrFilebank } from 'jamespot-react-components';\nimport jApi, { AddCommentParams, UpdateCommentParams, WidgetWrapperProps } 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 useCommentRT from '../hooks/useCommentRT';\nimport useCommentsLikeRT from '../hooks/useCommentsLikeRT';\nimport { EditorsPanel } from './widgets/components/WidgetEditorPanel';\nimport { WidgetList } from './widgets/WidgetList/WidgetList';\n\nimport JRCore from 'App';\nimport { CommentsBlocAddCommentWidgetsWrapper } from './comments/CommentsBlocAddCommentWidgetsWrapper';\nimport { CommentsBlocCommentWidgetsWrapper } from './comments/CommentsBlocCommentWidgetsWrapper';\n\nconst JRCCommentsBloc = JRCore.registry.getLazyComponent('JRCCommentsBloc');\n\nexport type CommentsBlocProps = {\n articleId: number;\n variant?: 'modal' | 'inline';\n canComment: boolean;\n commentType?: 'comment' | 'commentResponse';\n socialQuestion?: {\n isResolved: boolean;\n responseId?: number;\n canSelectResponse: boolean;\n };\n};\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 CSSCommentsBlocWidgetWrapper = styled.div`\n border-radius: ${(props) => props.theme.space.sm}px;\n border: 1px solid ${(props) => props.theme.color.grey1};\n background-color: ${(props) => props.theme.color.white};\n overflow: hidden;\n`;\n\nexport const CommentsBloc = ({\n articleId,\n variant = 'inline',\n canComment,\n commentType = 'comment',\n socialQuestion,\n}: CommentsBlocProps) => {\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[]>([]);\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 tinyMCEExtendedOptions = useSelector(TinyMCE.selectors.selectTinyMCEExtendedOptions);\n const models = useSelector(Model.selectors.selectAll);\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 const [socialQuestionOptions, setSocialQuestionOptions] = useState(socialQuestion);\n\n useCommentRT(articleId);\n\n useCommentsLikeRT(\n commentsList?.list.map((c) => c.id),\n articleId,\n );\n\n const onError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\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 jApi.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 jApi.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 jApi.network\n .token()\n .then((res) => {\n setToken(res.result);\n setTokenLoading(false);\n })\n .catch((e) => {\n onError(e.errorMsg);\n });\n }\n }, [onError, token, tokenLoading]);\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 jApi.article\n .addComment({\n ...params,\n widgets: finalWidget,\n token,\n idArticle: articleId,\n type: commentType,\n })\n .then(() => {\n setWidgets([]);\n });\n fetchToken();\n } catch (e: any) {\n onError(e.errorMsg);\n } finally {\n setLoading(false);\n }\n }\n },\n [articleId, commentType, dispatch, fetchToken, onError, token, widgetIds, widgets],\n );\n\n useEffect(() => {\n fetchToken();\n }, [fetchToken]);\n\n useEffect(() => {\n dispatch(Comment.actions.fetchComments({ idArticle: articleId }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (!commentsList || !commentsList.list) {\n return;\n }\n commentsList.list.forEach((comment) => {\n comment._widgets?.forEach((widget) => {\n dispatch(Widget.slice.actions.registerWidgetObject({ uniqid: widget.widget.uniqid, object: comment }));\n dispatch(\n Widget.slice.actions.registerWidgetObjectRights({\n uniqid: widget.widget.uniqid,\n rights: comment._right,\n }),\n );\n });\n });\n }, [commentsList, dispatch]);\n\n return (\n <>\n {tinyMCECommonOptions && tinyMCEExtendedOptions && (\n <>\n <CommentsBlocWrapper>\n <JRCCommentsBloc\n canComment={canComment} // todo: convert to hlandlers\n loading={loading}\n token={token}\n comments={commentsList?.list}\n onComment={onComment} // todo: convert to hlandlers\n onCommentUpdate={onCommentUpdate} // todo: convert to hlandlers\n onCommentDelete={onCommentDelete} // todo: convert to hlandlers\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([widget]); // COMMENT DO NOT SUPPORT MULTI 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={<CommentsBlocAddCommentWidgetsWrapper widgets={widgets} />}\n existingWidgetsWrapperComponent={(comment, widgets, mode, inplace = true) => (\n <CommentsBlocCommentWidgetsWrapper\n comment={comment}\n widgets={widgets}\n mode={mode}\n inplace={inplace}\n handleWidgetUpdate={onWidgetUpdate}\n handleWidgetRemove={fetchToken}\n />\n )}\n currentUser={currentUser}\n tinyMCEConfig={{\n commonOptions: {\n ...tinyMCECommonOptions,\n toolbar: tinyMCEExtendedOptions.commentsToolbar,\n },\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 [\n ...(fileBank && driveHook ? ['fileBank'] : []),\n ...Hook.utils.buildDrivesArrayFromObject(driveHook?.drives),\n ] as DriveOrFilebank[]\n }\n deleteFile={async (articleId) => {\n if (!token) return;\n await jApi.file.deleteFile(articleId, 'attachment', token);\n }} // TODO - HANDLERS\n variant={variant}\n handlers={{\n drive: jApi.drive,\n filebank: jApi.filebank,\n file: jApi.file,\n user: jApi.user,\n socialAction: jApi.socialAction,\n questionAnswer: jApi.questionAnswer,\n }}\n socialQuestion={\n socialQuestionOptions\n ? {\n ...socialQuestionOptions,\n onSelectResponse: (responseId: number) => {\n setSocialQuestionOptions({\n ...socialQuestionOptions,\n responseId,\n isResolved: true,\n });\n },\n onUnselectResponse: () => {\n setSocialQuestionOptions({\n ...socialQuestionOptions,\n responseId: undefined,\n isResolved: false,\n });\n },\n }\n : undefined\n }\n articleId={articleId}\n />\n <EditorsPanel />\n </CommentsBlocWrapper>\n </>\n )}\n </>\n );\n};\n","import { useDispatch } from 'react-redux';\nimport JRCore from '../App';\nimport { useEffect, useMemo } from 'react';\nimport { Comment } from 'jamespot-front-business';\n\nconst useCommentsLikeRT = (idComments: number[] | undefined, idArticle: number) => {\n const dispatch = useDispatch();\n const socket = useMemo(() => JRCore.socket, []);\n const rtHandlers = useMemo(\n () => Comment.getCommentsLikeRTHandlers(dispatch, idComments, idArticle),\n [dispatch, idComments, idArticle],\n );\n\n useEffect(() => {\n rtHandlers.forEach((handler) => {\n socket.onMessage(handler.namespace, handler.function, handler.handler);\n });\n return () => {\n rtHandlers.forEach((handler) => {\n socket.offMessage(handler.namespace, handler.function, handler.handler);\n });\n };\n }, [rtHandlers, socket]);\n};\n\nexport default useCommentsLikeRT;\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, useCallback } from 'react';\nimport { AudienceAutocomplete } from 'jamespot-user-api';\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 FormElement = (\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};\nconst FormElm = React.forwardRef(FormElement);\n\nconst FieldsetWrapper = styled.div<{ stretch?: boolean }>`\n ${(props) =>\n props.stretch &&\n `\n flex: 1;\n`}\n`;\n\nexport type DisplayFormFieldsConfig<TFieldValues extends FieldValues> = 'all' | FieldsWith<'input', TFieldValues>;\n\nexport type DisplayFormProps<TFieldValues extends FieldValues> = {\n type: string;\n fields: DisplayFormFieldsConfig<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 forceMandatory?: boolean;\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, props.forceMandatory);\n\n const { handleSubmit, control, reset, ...formFn } = useForm({\n defaultValues: {\n ...defaultValues,\n ...props.defaultValues,\n },\n criteriaMode: 'all',\n });\n\n const formatValuesForSubmit = useCallback(\n (values: any) => {\n const toRet: any = {};\n Object.keys(values).forEach((k) => {\n const widget = configuration.find((c) => c.name === k)?.widget;\n switch (widget?.type) {\n case 'audience':\n toRet[k] = values[k].map((v: AudienceAutocomplete) => v.uri).join(',');\n break;\n case 'taxonomy':\n toRet[k] = values[k].map((v: any) => v.title).join(',');\n break;\n case 'toggle':\n toRet[k] = values[k] ? '1' : '0';\n break;\n default:\n toRet[k] = values[k];\n break;\n }\n });\n return toRet;\n },\n [configuration],\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 getFormattedValues: () => {\n return formatValuesForSubmit(formFn.getValues());\n },\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\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","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\n// This is a mask to hide top shadow. EDITOR_WIDTH + 20 is used to keep the left shadow\nexport const CSSEditorMask = styled.div`\n position: relative;\n overflow: hidden;\n top: 91px;\n width: ${EDITOR_WIDTH + 20}px;\n`;\n\nexport const CSSEditor = styled.div<{ position: 'left' | 'right' }>`\n position: absolute;\n top: 0;\n ${(props) => (props.position === 'left' ? 'left: 0px;' : '')}\n ${(props) => (props.position === 'right' ? 'right: -1000px;' : '')}\n width: ${EDITOR_WIDTH}px;\n bottom: 90px;\n display: flex;\n background-color: ${(props) => props.theme.color.white};\n flex-direction: row;\n transition: all 0.4s;\n box-shadow: -4px 0px 20px 0px #00000017;\n\n &.animate {\n right: 0px;\n }\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 position: relative;\n`;\n\nexport const CSSEditorIsBusy = styled.div`\n position: absolute;\n inset: 0;\n background-color: rgba(255, 255, 255, 0.8);\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nexport const CSSEditorIsLocked = styled.div`\n position: absolute;\n inset: 0;\n background-color: ${(props) => props.theme.color.white};\n padding: ${(props) => props.theme.space.md}px;\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;\nexport const EDITOR_CONTENT_WIDTH = EDITOR_WIDTH - EDITOR_MENU_WIDTH;\n","import React from 'react';\n\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { CSSEditorAction, CSSEditorHeader, CSSEditorLabel, CSSEditorMenuButton } from './style';\nimport { WidgetEditor, EditorsRootState } from 'jamespot-front-business';\nimport JRCore from 'App';\n\nconst JRCButton = JRCore.registry.getLazyComponent('Button');\nconst JRCIcon = JRCore.registry.getLazyComponent('Icon');\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 JRCore from 'App';\nimport { EditorsRootState, Hook, Toast, updateWidgetContent, Widget, WidgetEditor } from 'jamespot-front-business';\nimport jamespot, {\n CombinedWidgetContent,\n ensureWidgetArticleAttachmentType,\n ensureWidgetArticleButtonType,\n ensureWidgetArticleGalleryType,\n ensureWidgetArticleImageType,\n ensureWidgetArticleSliderType,\n ensureWidgetArticleTextType,\n ensureWidgetArticleTitleType,\n ensureWidgetCheckListType,\n ensureWidgetDatasourceTableType,\n ensureWidgetExcelDatasourceTableType,\n ensureWidgetPresenceType,\n HookListType,\n jObjectLittle,\n WidgetArticleAttachmentContent,\n WidgetArticleButtonContent,\n WidgetArticleGalleryContent,\n WidgetArticleImageContent,\n WidgetArticleSliderContent,\n WidgetArticleTextContent,\n WidgetArticleTitleContent,\n WidgetDatasourceTableContent,\n WidgetPresenceContent,\n WidgetsRootState,\n WidgetStateProps,\n} from 'jamespot-user-api';\nimport React, { useMemo } from 'react';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\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 WidgetCheckListEditor = JRCore.registry.getLazyComponent('WidgetCheckListEditor');\n\nconst WidgetDatasourceTableEditor = JRCore.registry.getLazyComponent('WidgetDatasourceTableEditor');\nconst WidgetExcelDatasourceTableEditor = JRCore.registry.getLazyComponent('WidgetExcelDatasourceTableEditor');\n\nconst WidgetPresenceEditor = JRCore.registry.getLazyComponent('WidgetPresenceEditor');\n\n/*\n Editor Factory\n*/\nexport const Editor = ({ uniqid }: { uniqid: string }) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const token = useSelector(Widget.selectors.selectToken);\n const widgetWrapper = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid),\n shallowEqual,\n );\n const widgetObject = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObject(state, uniqid),\n shallowEqual,\n );\n\n const onSaveCallback = useSelector(\n (state: EditorsRootState) => WidgetEditor.selectors.selectEditor(state, uniqid)?.onSave,\n shallowEqual,\n );\n\n const handleHookIsActive = (name: keyof HookListType) => {\n return Hook.selectors.selectHook(JRCore.store.getState(), name)?.isActive;\n };\n\n const widgetObjectRights = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObjectRights(state, uniqid),\n shallowEqual,\n );\n const canUpdate = useMemo(() => {\n return widgetObjectRights && widgetObjectRights.update;\n }, [widgetObjectRights]);\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 if (onSaveCallback) {\n onSaveCallback(content);\n }\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 const validateWidgetObject = (object?: Partial<jObjectLittle>): object is jObjectLittle => {\n return object !== undefined && object.id !== undefined && object.type !== undefined;\n };\n\n const widget = widgetWrapper?.widget;\n\n if (!widget) return null;\n\n if (ensureWidgetArticleButtonType(widget)) {\n return (\n <WidgetButtonEditor\n {...widget.content}\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleButtonContent>(uniqid, content, false));\n }}\n onSave={() => onSave({})}\n />\n );\n } else if (ensureWidgetArticleGalleryType(widget)) {\n return (\n <WidgetArticleGalleryEditor\n token={token}\n content={widget.content}\n onChange={(content) =>\n dispatch(updateWidgetContent<WidgetArticleGalleryContent>(uniqid, content, false))\n }\n onSave={onSave}\n onStateChange={onStateChange}\n />\n );\n } else if (ensureWidgetArticleAttachmentType(widget)) {\n return (\n <WidgetArticleAttachmentEditor\n token={token}\n content={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 } else if (ensureWidgetArticleImageType(widget)) {\n return (\n <WidgetArticleImageEditor\n content={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 } else if (ensureWidgetArticleSliderType(widget)) {\n return token !== undefined ? (\n <WidgetArticleSliderEditor\n slides={widget.content.slides ?? []}\n loop={widget.content.loop ?? false}\n useDots={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 } else if (ensureWidgetArticleTitleType(widget)) {\n return (\n <WidgetArticleTitleEditor\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleTitleContent>(uniqid, content, false));\n }}\n onSave={onSave}\n content={widget.content}\n onOpen={onOpen}\n />\n );\n } else if (ensureWidgetArticleTextType(widget)) {\n return (\n <WidgetArticleTextEditor\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleTextContent>(uniqid, content, false));\n }}\n onSave={onSave}\n content={widget.content}\n />\n );\n } else if (ensureWidgetPresenceType(widget)) {\n return (\n <WidgetPresenceEditor\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetPresenceContent>(uniqid, content, false));\n }}\n onSave={onSave}\n onStateChange={onStateChange}\n {...widget.content}\n />\n );\n } else if (ensureWidgetCheckListType(widget)) {\n return (\n <WidgetCheckListEditor\n token={token}\n uniqid={widget.uniqid}\n content={widget.content}\n onChangeContent={(uniqid, content) => {\n dispatch(updateWidgetContent(uniqid, content, false));\n }}\n onChangeWrapper={(content) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ ...content }));\n }}\n onSave={(uniqid, content) => {\n if (!validateWidgetObject(widgetObject)) {\n onSave(content);\n return;\n }\n\n jamespot.widget\n .updateWidget({\n id: widgetObject.id,\n uniqid: uniqid,\n type: widgetObject.type,\n title: widgetWrapper.title,\n content,\n })\n .then(() => {\n onSave(content);\n })\n .catch((e: any) => {\n dispatch(\n Toast.actions.error({\n label: e.errorMsg ?? intl.formatMessage({ id: 'GLOBAL_Error' }),\n }),\n );\n });\n }}\n canEditCollaboration={canUpdate ?? false}\n />\n );\n } else if (ensureWidgetExcelDatasourceTableType(widget)) {\n return (\n <WidgetExcelDatasourceTableEditor\n {...widget.content}\n uri={widget.content.uri}\n limit={widget.content.limit ?? 20}\n hook={{ isActive: handleHookIsActive }}\n handlers={{\n jamespot: {\n datasource: jamespot.datasource,\n network: jamespot.network,\n filebank: jamespot.filebank,\n wedoc: jamespot.wedoc,\n },\n handleStart: () => onStateChange({ busy: true }),\n handleCatch: (err) => dispatch(Toast.actions.error({ label: err.errorMsg })),\n handleFinally: () => onStateChange({ busy: false }),\n }}\n onSave={onSave}\n onChange={(content, override) =>\n dispatch(updateWidgetContent<WidgetDatasourceTableContent>(uniqid, content, override ?? false))\n }\n onStateChange={onStateChange}\n onError={(label) => dispatch(Toast.actions.error({ label }))}\n />\n );\n } else if (ensureWidgetDatasourceTableType(widget)) {\n return (\n <WidgetDatasourceTableEditor\n {...widget.content}\n uri={widget.content.uri}\n limit={widget.content.limit ?? 20}\n hook={{ isActive: handleHookIsActive }}\n handlers={{\n jamespot: {\n datasource: jamespot.datasource,\n network: jamespot.network,\n application: jamespot.application,\n filebank: jamespot.filebank,\n },\n handleStart: () => onStateChange({ busy: true }),\n handleCatch: (err) => dispatch(Toast.actions.error({ label: err.errorMsg })),\n handleFinally: () => onStateChange({ busy: false }),\n }}\n onSave={onSave}\n onChange={(content, override) =>\n dispatch(updateWidgetContent<WidgetDatasourceTableContent>(uniqid, content, override ?? false))\n }\n onStateChange={onStateChange}\n onError={(label) => {\n dispatch(Toast.actions.error({ label }));\n }}\n />\n );\n } else {\n return <>cannot display editor</>;\n }\n};\n","import React from 'react';\n\nimport { useDispatch } from 'react-redux';\n\nimport JRCore from 'App';\n\nconst Icon = JRCore.registry.getLazyComponent('Icon');\n\nimport { CSSEditorAction, CSSEditorMenuButton } from './style';\n\nimport { WidgetEditor } from 'jamespot-front-business';\n\nexport const EditorPosition = ({ 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 <Icon name={position === 'left' ? 'icon-angle-right' : 'icon-angle-left'} color=\"grey2\" />\n </CSSEditorMenuButton>\n </CSSEditorAction>\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 { ensureWidgetWrapperProps, WidgetKeys, WidgetsRootState, WidgetWrapperProps } from 'jamespot-user-api';\nimport { useIntl } from 'react-intl';\nimport { CSSEditorWidget, CSSEditorWidgetLabel, CSSEditorWidgetOption } from './style';\nimport { WidgetList } from 'registry/coreComponents';\nimport JRCore from 'App';\n\nconst BETA_JRCDragAndDrop = JRCore.registry.getLazyComponent('BETA_DragAndDrop');\nconst JRCIcon = JRCore.registry.getLazyComponent('Icon');\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 widget = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid))?.widget;\n\n const onClick = (uniqid: string, name: WidgetKeys) => {\n /*\n Register Editor\n */\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name }));\n };\n\n const widgets =\n widget?.content && 'widgets' in widget.content && widget.content.widgets ? widget.content.widgets : [];\n\n return (\n <div style={{ flex: 1 }}>\n <Layers uniqid={uniqid} />\n {widget ? (\n 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 dispatch(\n Widget.slice.actions.updateWidget({\n uniqid,\n content: {\n ...widget.content,\n widgets: [\n ...widgets\n .filter((_, n: number) => n !== index)\n .map((w) => {\n if (ensureWidgetWrapperProps(w)) {\n return w;\n } else {\n // TODO remonter le log (centry ?)\n console.error('Zozod', w);\n return w as WidgetWrapperProps;\n }\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 { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { WidgetsRootState } from 'jamespot-user-api';\nimport { useForm } from 'react-hook-form';\nimport { useIntl } from 'react-intl';\n\nconst JRCInputText = JRCore.registry.getLazyComponent('InputText');\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', justifyContent: 'space-between' }}>\n <JRCInputText\n name={'text'}\n control={control}\n placeholder={intl.formatMessage({ id: 'WIDGET_Title' })}></JRCInputText>\n <JRCButton onClick={onClick} minWidth={'100%'}>\n {intl.formatMessage({ id: 'GLOBAL_Save' })}\n </JRCButton>\n </div>\n ) : (\n <>No wrapper</>\n );\n};\n","import React from 'react';\n\nimport { shallowEqual, useSelector } from 'react-redux';\n\nimport JRCore from 'App';\n\nconst Loader = JRCore.registry.getLazyComponent('Loader');\n\nimport { CSSEditorIsBusy } from '../style';\n\nimport { Widget } from 'jamespot-front-business';\nimport { WidgetsRootState } from 'jamespot-user-api';\n\nexport const EditorIsBusy = ({ uniqid }: { uniqid: string }) => {\n const isBusy = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetState(state, uniqid),\n shallowEqual,\n )?.busy;\n return (\n <>\n {isBusy && (\n <CSSEditorIsBusy>\n <Loader size={'l'} />\n </CSSEditorIsBusy>\n )}\n </>\n );\n};\n","import React from 'react';\n\nimport { useSelector } from 'react-redux';\n\nimport { Widget } from 'jamespot-front-business';\nimport { WidgetsRootState } from 'jamespot-user-api';\n\nexport const EditorIsInitialize = ({ uniqid, children }: { uniqid: string; children: React.ReactElement }) => {\n const isInitializes = useSelector((state: WidgetsRootState) =>\n Widget.selectors.selectWidgetState(state, uniqid),\n )?.initialized;\n\n return isInitializes ? children : <></>;\n};\n","import React from 'react';\n\nimport { useIntl } from 'react-intl';\nimport { CSSEditorIsLocked } from '../style';\nimport { shallowEqual, useSelector } from 'react-redux';\nimport { WidgetsRootState } from 'jamespot-user-api';\nimport { Widget } from 'jamespot-front-business';\n\nexport const EditorIsLocked = ({ uniqid }: { uniqid: string }) => {\n const intl = useIntl();\n const isLocked = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetState(state, uniqid),\n shallowEqual,\n )?.locked;\n return isLocked ? (\n <CSSEditorIsLocked>{intl.formatMessage({ id: 'INTRANET_Panel_Change_Off' })}</CSSEditorIsLocked>\n ) : (\n <></>\n );\n};\n","import React, { useEffect, useRef } from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { Editor } from './Editor';\n\nimport JRCore from 'App';\n\nconst Icon = JRCore.registry.getLazyComponent('Icon');\n\nimport {\n CSSEditor,\n CSSEditorAction,\n CSSEditorContent,\n CSSEditorHeader,\n CSSEditorLabel,\n CSSEditorMask,\n CSSEditorMenu,\n CSSEditorMenuButton,\n} from './style';\n\nimport { EditorsRootState, Widget, WidgetEditor } from 'jamespot-front-business';\n\nimport { useIntl } from 'react-intl';\nimport { EDITOR_CONTENT_WIDTH } from './const';\nimport { EditorPosition } from './EditorPosition';\nimport { EditorTabWidgets } from './EditorTabWidgets';\nimport { EditorTabWrapper } from './EditorTabWrapper';\nimport { EditorIsBusy } from './states/EditorIsBusy';\nimport { EditorIsInitialize } from './states/EditorIsInitialize';\nimport { EditorIsLocked } from './states/EditorIsLocked';\n\n/*\n Editor wrapper (right part)\n*/\nexport const EditorWrapper = ({ uniqid, position }: { uniqid: string; position: 'left' | 'right' }) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const ref = useRef<HTMLDivElement>(null);\n const editor = useSelector(\n (state: EditorsRootState) => WidgetEditor.selectors.selectEditor(state, uniqid),\n shallowEqual,\n );\n const def = Widget.definition(editor?.name);\n\n const [tab, setTab] = React.useState<string>('default');\n\n const onClose = () => {\n dispatch(WidgetEditor.slice.actions.flushEditor({ uniqid }));\n };\n\n useEffect(() => {\n setTimeout(() => {\n if (ref && ref.current) {\n ref.current.className = ref.current.className + ' animate';\n }\n }, 0);\n }, []);\n\n return editor ? (\n <CSSEditorMask>\n <CSSEditor ref={ref} position={position}>\n {(def.panel.useWrapper || def.panel.useEditor || def.panel.useWidgets) && (\n <CSSEditorMenu>\n {def.panel.useWrapper ? (\n <CSSEditorMenuButton isActive={tab === 'wrapper'} onClick={() => setTab('wrapper')}>\n <Icon name=\"icon-font\" color=\"grey2\" />\n </CSSEditorMenuButton>\n ) : (\n <></>\n )}\n {def.panel.useEditor ? (\n <CSSEditorMenuButton isActive={tab === 'default'} onClick={() => setTab('default')}>\n <Icon name=\"icon-pen\" color=\"grey2\" />\n </CSSEditorMenuButton>\n ) : (\n <></>\n )}\n {def.panel.useWidgets ? (\n <EditorIsInitialize uniqid={uniqid}>\n <CSSEditorMenuButton isActive={tab === 'widgets'} onClick={() => setTab('widgets')}>\n <Icon name=\"icon-sliders\" color=\"grey2\" />\n </CSSEditorMenuButton>\n </EditorIsInitialize>\n ) : (\n <></>\n )}\n </CSSEditorMenu>\n )}\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column', width: `${EDITOR_CONTENT_WIDTH}px` }}>\n <CSSEditorHeader>\n <EditorPosition uniqid={uniqid} position={editor.position} />\n <CSSEditorLabel>{intl.formatMessage({ id: def.label })}</CSSEditorLabel>\n <CSSEditorAction>\n <CSSEditorMenuButton onClick={onClose}>\n <Icon 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 <EditorIsBusy uniqid={uniqid} />\n <EditorIsLocked uniqid={uniqid} />\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 </CSSEditorMask>\n ) : (\n <></>\n );\n};\n","import React from 'react';\n\nimport { shallowEqual, 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: 1;\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, shallowEqual);\n return (\n <CSSEditorPortalWrapper className=\"editor-portal-wrapper\">\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} position={editor.position}></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} position={editor.position}></EditorWrapper>\n </CSSEditorPortalRow>\n </CSSEditorPortal>\n );\n })}\n </CSSEditorPortalWrapper>\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 { JTinyMCEExtensionsBuilders } from 'jamespot-react-components';\nimport { JIACapabilities } from 'jamespot-user-api';\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: JIACapabilities;\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 fetch = useCallback(\n (text: string, capability: JIACapabilities) => {\n return new Promise<string>((resolve, reject) => {\n PrepareAndSetQuery({\n reject,\n resolve,\n text,\n capability,\n });\n });\n },\n [PrepareAndSetQuery],\n );\n\n const AICapabilities = useMemo(() => {\n return {\n develop: (text: string) => fetch(text, 'develop'),\n summarize: (text: string) => fetch(text, 'summarize'),\n tldr: (text: string) => fetch(text, 'tldr'),\n en: (text: string) => fetch(text, 'en'),\n es: (text: string) => fetch(text, 'es'),\n formal: (text: string) => fetch(text, 'formal'),\n funny: (text: string) => fetch(text, 'funny'),\n };\n }, [fetch]);\n\n const ext = useMemo(() => JTinyMCEExtensionsBuilders.jia(AICapabilities, intl), [intl, AICapabilities]);\n\n return [query, ext] as const;\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 { JRCInputTinyMCEProps } from 'jamespot-react-components';\nimport { FieldValues } from 'react-hook-form/dist/types';\nimport { AIModal } from './extension/AIModal';\nimport JRCore from 'App';\n\nconst JRCInputTinyMCE = JRCore.registry.getLazyComponent('InputTinyMCE');\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(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const tinyMentionsQueries = useMemo(() => {\n return getTinyMCEMentionsQueries(models, theme, onMentionsQueryError);\n }, [models, onMentionsQueryError, theme]);\n\n const commonOptions = useMemo(() => 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 { JRCInputTinyMCERawProps } from 'jamespot-react-components';\nimport { AIModal } from './extension/AIModal';\nimport JRCore from 'App';\n\nconst JRCInputTinyMCERaw = JRCore.registry.getLazyComponent('InputTinyMCERaw');\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(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const tinyMentionsQueries = useMemo(() => {\n return getTinyMCEMentionsQueries(models, theme, onMentionsQueryError);\n }, [models, onMentionsQueryError, theme]);\n\n const commonOptions = useMemo(() => 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 React from 'react';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport { Control } from 'react-hook-form';\r\nimport jamespot from 'jamespot-user-api';\r\nimport { Network } from 'jamespot-front-business';\r\nimport { useSelector } from 'react-redux';\r\nimport JRCore from 'App';\r\n\r\nconst JRCInputAudience = JRCore.registry.getLazyComponent('InputAudience');\r\nconst JRCMessage = JRCore.registry.getLazyComponent('Message');\r\nconst JRCModal = JRCore.registry.getLazyComponent('Modal');\r\n\r\nexport type ModalAudienceProps = {\r\n open: boolean;\r\n closeHandler: () => void;\r\n title?: string;\r\n control: Control<any>;\r\n warningMessage?: string;\r\n onSubmit: () => void;\r\n name?: string;\r\n};\r\n\r\nexport const ModalAudience = ({\r\n open,\r\n closeHandler,\r\n title,\r\n control,\r\n warningMessage,\r\n onSubmit,\r\n name = 'publishTo',\r\n}: ModalAudienceProps) => {\r\n const intl = useIntl();\r\n const networkPublic = useSelector(Network.selectors.selectNetworkPublic);\r\n\r\n return (\r\n <JRCModal\r\n open={open}\r\n closeHandler={closeHandler}\r\n title={title ?? intl.formatMessage({ id: 'GLOBAL_Audience' })}\r\n buttons={[\r\n {\r\n children: <FormattedMessage id=\"GLOBAL_Cancel\" />,\r\n color: 'cancel',\r\n clickHandler: () => closeHandler(),\r\n },\r\n {\r\n children: <FormattedMessage id=\"GLOBAL_Continue\" />,\r\n color: 'danger',\r\n clickHandler: () => {\r\n closeHandler();\r\n onSubmit();\r\n },\r\n },\r\n ]}>\r\n <JRCMessage\r\n variant={'warning'}\r\n message={warningMessage ?? intl.formatMessage({ id: 'FORM_Audience_Empty' })}\r\n />\r\n <JRCInputAudience\r\n asyncPromise={(inputValue: string) => jamespot.audience.autocomplete(inputValue)}\r\n searchable={true}\r\n control={control}\r\n multiple={true}\r\n placeholder={intl.formatMessage({ id: 'GLOBAL_Audience' })}\r\n name={name}\r\n defaultCustomOptions={\r\n networkPublic\r\n ? [\r\n {\r\n uri: networkPublic.uri,\r\n title: networkPublic.title,\r\n resetOptions: true,\r\n icon: 'icon-fs-wall',\r\n },\r\n ]\r\n : []\r\n }\r\n />\r\n </JRCModal>\r\n );\r\n};\r\n","import * as React from 'react';\nimport { Outlet, matchPath } 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';\nimport { useMemo } from 'react';\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 paths?: 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 = useMemo(() => Object.values(routes), [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) => {\n if (`/ng/rr/${extensionRoute}/${route.path}` === pathname) {\n return true;\n }\n\n return route.paths?.reduce<boolean>((previousValue: boolean, currentValue: string) => {\n const pattern = `/ng/rr/${extensionRoute}/${currentValue}`;\n const isMatch = matchPath(pattern, pathname) !== null;\n return previousValue || isMatch;\n }, false);\n });\n if (activeRoute) setActiveTab(activeRoute.key);\n }, [pathname, ROUTES_ARRAY, extensionRoute]);\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"],"names":["JRCAvatar","registry","getLazyComponent","JRCIcon","Avatar","props","theme","useTheme","networkPublic","useSelector","selectors","selectNetworkPublic","uri","name","size","color","primary","variant","JRCFlexBox","JRCModalContent","JRCModalLayout","JRCStyledHref","JRCTooltip","JRCTypography","AudienceWrapper","AvatarLink","white","lavender","overlap","Audience","audience","limit","intl","useIntl","isModalOpen","setModalOpen","useState","splice","map","item","index","href","_url","target","key","id","description","undefined","title","position","alt","timestamp","dateModified","Utils","date","strToTimestamp","focusable","length","onClick","closeHandler","enableClickAwayCloseModal","open","maxHeight","formatMessage","overflow","onClickIconClose","i","y","gap","space","l","type","JRCLoader","TextWrapper","md","loadingResponse","response","loading","error","AIModal","query","setResponse","sendAIRequest","useCallback","textEnhancement","text","capacity","capability","then","errorMsg","textResponse","result","catch","_err","useEffect","trim","zIndex","tinyMCEModal","reject","buttons","children","clickHandler","resolve","isFull","align","EditorsPortal","JRCThemeProvider","EditorsPanel","portalDiv","document","getElementById","portal","useMemo","parent","createElement","appendChild","createPortalElement","createPortal","CSSSquareWidgetWrapper","CSSSquareWidget","grey2","available","CSSWidgetButton","height","CSSWrapWidgetWrapper","column","CSSWrapTitle","grey0","CSSWrapWidget","full","parentIsColumn","Flex","direction","JRCButton","JRCIconButton","WidgetList","mode","view","namespace","onChange","isOpen","setOpen","widgets","definition","WidgetsName","ArticleTitle","ArticleButton","CheckList","Presence","ArticleText","ArticleImage","ArticleSlider","ArticleAttachment","getBuilderWidgets","args","portalId","factory","FormattedMessage","widget","src","img","label","className","minWidth","WidgetModeArticle","WidgetModeComment","calcHeight","Math","ceil","bg","bgHover","iconSize","icon","JRCInputFileAdvancedRaw","CSSHidden","WidgetUploader","initialFiles","initialClick","multiple","accept","onUploadStart","onUploadEnd","onUploadSuccess","uploadRef","token","selectToken","total","setTotal","files","setFiles","current","click","ref","content","totalFile","prevTotal","fileResponse","prevFiles","WidgetAttachment","JRCWidgetEmptyInplace","FileViewer","CSSWrapper","JRCWidgetArticleAttachmentWrapper","inplace","uniqid","dispatch","useDispatch","isActive","state","shallowEqual","onError","message","actions","slice","setWidgetState","mounted","empty","onlyOffice","selectById","option","file","getAccessHash","Error","hash","idFile","window","getWedocFilePath","wedocWindowOpen","openWithOptions","condition","f","includes","mimetype","options","Array","isArray","url","JRCWidgetButton","CSSButtonWrapper","CSSPointer","clickable","JRCWidgetArticleButtonWrapper","backgroundColor","buttonSize","borderRadius","registerEditor","JRCWidgetArticleGallery","CSSImagePointer","JRCWidgetArticleGalleryWrapper","maxWidth","WidgetImage","CSSImageWrapperHover","mockFileLittle","mainType","dateCreation","str","Date","parse","isNaN","getTime","JRCWidgetArticleImageWrapper","width","useFilter","setUri","formatImgUrl","now","from","path","JRCWidgetSlider","Wrapper","JRCWidgetArticleSliderWrapper","dynamicWidth","setDynamicWidth","useRef","fileViewerFiles","slides","slide","handleResize","offsetWidth","addEventListener","removeEventListener","isEditable","handleEditor","style","useDots","loop","startAt","onClickSlide","WidgetArticleText","CSSTextWrapper","JRCWidgetArticleTextWrapper","isBusy","selectWidgetState","busy","tinyMCECommonOptions","selectTinyMCECommonOptions","models","selectAll","tinyMentionsQueries","getTinyMCEMentionsQueries","autoFocus","tinymceScriptSrc","commonOptions","mentionsQueries","WidgetArticleTitle","ToolWrapper","grey1","Tool","JRCWidgetArticleTitleWrapper","heading","Toolbar","sizeValue","Footer","WidgetRemove","setIsOpen","removeWidget","flushWidget","WidgetFooterView","collaborationRights","handleOpenEditor","widgetObject","selectWidgetObject","widgetObjectRights","selectWidgetObjectRights","canUpdate","update","canDelete","delete","handleOnClick","onSave","ensureWidgetPresenceContent","updateWidget","v2","ensureWidgetObjectHasMinimumProperties","WidgetCheckList","WidgetCheckListEditor","CommentContainer","border","JRCWidgetCheckListWrapper","onWidgetUpdate","widgetContent","entries","setEntries","setToken","tokenLoading","setTokenLoading","currentUser","get","canEditCollaboration","finalEntries","arr","checked","value","links","user","res","e","onChangeContent","onChangeWrapper","updateWidgetWrapper","initialEntries","onFileClick","onItemCheckListChange","items","mimetypes","checkListRespond","idUser","err","handleCheckItem","edit","flushAllEditor","openEditorPanel","getVisibleColumns","tableColumnsData","columns","toRet","filter","data","isVisible","forEach","find","el","push","WidgetTable","Loader","JRCHtml","AbsoluteWrapper","WrapperEditMode","WidgetDatasourceTableWrapper","tableHeadColor","tableHeadTextColor","tableHeadIconColor","tableRowColor","tableRowTextColor","tableBorderRadius","tableSizedColumns","tableSizedColumnsWidth","isEditorOpenOnFirstRender","setIsEditorOpenOnFirstRender","isLoading","setIsLoading","datasourceData","setDatasourceData","datasourceModel","setDatasourceModel","datasourceSort","setDatasourceSort","order","datasourceType","setDatasourceType","datasourceIdentifier","setDatasourceIdentifier","DatasourceTable","rtConditions","rtAudience","rtLastObject","fetchDatasource","Format","VIEW","model","sort","datasource","finally","setTimeout","rows","tableDefaultSortOrder","tableDefaultSortName","__html","WidgetExcelDatasourceTableWrapper","ExcelDatasourceTable","CSSPaddingMd","CSSHref","secondary","CSSHorizontalAlign","WidgetPresenceWrapperClosing","isClosed","handleClosing","JRCWidgetPresence","CSSWidgetPresenceWrapper","CSSWidgetPresenceState","JRCWidgetPresenceWrapper","limitValue","closing","userValue","userAvailableList","userUnavailableList","userAvailableTotal","userUnavailableTotal","isPendingResponse","setIsPendingResponse","abortController","AbortController","allRt","selectAllWidgetRTObject","handleError","lockedRespondHandler","handleCancelRespond","presenceCancel","Number","handleRespond","responseValue","payload","ensureWidgetPresenceResponsePayload","presenceRespond","signal","handleResponse","presenceGetResponse","aborted","abort","lastRt","at","object","RTProvider","useRT","handleClickAvailable","handleClickUnavailable","CSSWidgetTitle","WidgetTitle","widgetWrapper","selectWidget","WidgetTitleEdit","setTitle","control","watch","useForm","defaultValues","widgetTitle","criteriaMode","delayDebounce","clearTimeout","subscription","unsubscribe","JRCInputText","placeholder","CSSModalFooter","CSSWidgetHeaderEdit","sm","CSSWidgetHeaderEditTitle","CSSWidgetHeaderEditActions","WidgetHeaderEdit","handleRemoveWidget","CSSWidgetWithTitle","DisplayWidget","cannotDisplayComponent","ensureWidgetArticleButtonType","ensureWidgetArticleGalleryType","ensureWidgetArticleAttachmentType","ensureWidgetArticleImageType","ensureWidgetArticleSliderType","ensureWidgetArticleTitleType","ensureWidgetArticleTextType","ensureWidgetExcelDatasourceTableType","ensureWidgetDatasourceTableType","ensureWidgetCheckListType","ensureWidgetPresenceType","CSSWidgetWrapper","grey3","font","CSSWidgetLayer","opacity","pointerEvents","BETA_JRCDoubleClick","WidgetLayer","layers","ids","layer","Layer","LayerWidget","layerId","visible","locked","top","left","x","DraggableHandler","onMouseUp","updateLayer","onDoubleTap","mouseIsDown","setMouseDown","mouse","setMouse","start","setStart","child","setChild","handleMouseDown","event","nativeEvent","clientX","clientY","handleMouseMove","dx","dy","handleMouseUp","onMouseDown","WidgetState","def","inset","display","flex","justifyContent","alignItems","hover","initialized","WidgetWrapperCore","indexOrder","editableMap","currentEditableWidgetId","isComponentVisible","setIsComponentVisible","registerWidgetObject","registerWidget","setEditableWidgetId","_widget","openingType","openingTypeLink","setEditableIndex","CSSCommentsBlocWidgetWrapper","JRCMessage","CommentsBlocAddCommentWidgetsWrapper","flushedWidgets","selectFlushedWidgets","CommentsBlocCommentWidgetsWrapper","comment","handleWidgetUpdate","JRCCommentsBloc","CommentsBlocWrapper","CommentsBloc","articleId","canComment","commentType","socialQuestion","setLoading","setWidgets","widgetIds","selectWidgets","tinyMCEExtendedOptions","selectTinyMCEExtendedOptions","platformConfig","selectPlatformConfig","commentsList","commentList","driveHook","selectHook","fileBank","widgetHook","socialQuestionOptions","setSocialQuestionOptions","useCommentRT","idComments","idArticle","socket","rtHandlers","getCommentsLikeRTHandlers","handler","onMessage","function","offMessage","list","c","fetchComments","fetchToken","onComment","params","finalWidget","Object","keys","some","w","addComment","_widgets","registerWidgetObjectRights","rights","_right","comments","onCommentUpdate","commentToUpdate","idComment","updateComment","onCommentDelete","deleteComment","isWidgetActive","create","autorize","widgetListComponent","newWidgetsWrapperComponent","existingWidgetsWrapperComponent","handleWidgetRemove","tinyMCEConfig","toolbar","commentsToolbar","highlightFields","userHighlightFields","userAccountStatus","userModel","m","isWedocActive","onGetHashError","activeDrives","utils","buildDrivesArrayFromObject","drives","deleteFile","handlers","drive","filebank","socialAction","questionAnswer","onSelectResponse","responseId","isResolved","onUnselectResponse","StretchContainer","css","Container","stretch","Form","FormElm","onSubmit","FieldsetWrapper","DisplayForm","formRef","configuration","useDisplay","fields","forceMandatory","handleSubmit","reset","formFn","formatValuesForSubmit","values","k","v","join","scrollTo","getFormattedValues","getValues","Input","conf","dataCy","readOnly","extraInputs","CSSEditorPortal","CSSEditorHeader","CSSEditorAction","CSSEditorLabel","CSSEditorMask","EDITOR_WIDTH","CSSEditor","CSSEditorContent","CSSEditorIsBusy","CSSEditorIsLocked","CSSEditorMenu","CSSEditorMenuButton","CSSEditorWidget","CSSEditorWidgetLabel","CSSEditorWidgetOption","EditorPopup","editor","selectEditor","popup","flexDirection","marginTop","flushEditorPopup","WidgetArticleTitleEditor","WidgetArticleTextEditor","WidgetArticleGalleryEditor","WidgetArticleAttachmentEditor","WidgetArticleSliderEditor","WidgetArticleImageEditor","WidgetButtonEditor","WidgetDatasourceTableEditor","WidgetExcelDatasourceTableEditor","WidgetPresenceEditor","Editor","onSaveCallback","handleHookIsActive","store","getState","flushEditor","onStateChange","states","onOpen","registerEditorPopup","hook","jamespot","network","wedoc","handleStart","handleCatch","handleFinally","override","application","Icon","EditorPosition","setEditorPosition","BETA_JRCDragAndDrop","EditorTabWidgets","Layers","_","n","ensureWidgetWrapperProps","console","onDrag","renderEl","EditorWidgetLayer","elms","registerLayer","EditorWidgetLayerLock","EditorWidgetLayerVisibility","EditorWidgetLayerFlush","flushLayer","EditorTabWrapper","wrapper","EditorIsBusy","EditorIsInitialize","EditorIsLocked","EditorWrapper","tab","setTab","panel","useWrapper","useEditor","useWidgets","CSSEditorPortalWrapper","CSSEditorPortalPopupWrapper","CSSEditorPortalRow","CSSEditorPortalFreeSpace","editors","selectEditors","Empty","useAI","setQuery","PrepareAndSetQuery","fetch","Promise","AICapabilities","develop","summarize","tldr","en","es","formal","funny","JTinyMCEExtensionsBuilders","jia","JRCInputTinyMCE","JRCInputTinyMCEWithExt","extAI","isAIActive","J","hooks","JIAHook","debug","extArray","onMentionsQueryError","tinymceCommonOptions","additionalExtensions","JRCInputTinyMCERaw","JRCInputTinyMCEWithExtRaw","JRCInputAudience","JRCModal","ModalAudience","warningMessage","asyncPromise","inputValue","autocomplete","searchable","defaultCustomOptions","resetOptions","AppColumn","MainColumn","TwoColLayout","extensionRoute","routes","pathname","useLocation","ROUTES_ARRAY","activeTab","setActiveTab","tabs","absolutePath","group","activeRoute","route","paths","reduce","previousValue","currentValue","pattern","isMatch","matchPath","fallback","Outlet"],"sourceRoot":""}