jamespot-react-core 1.1.181 → 1.1.182

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":"724.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/components/WidgetIsPending.tsx","webpack://ReactCore/./src/components/widgets/wrapper/components/WidgetInlineInputText.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/JRCWidgetQuickSurveyWrapper.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/hooks/useMarkdownModal.ts","webpack://ReactCore/./src/components/tinymce/extension/MarkdownModal.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/components/EditorSave.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 { DashedFocusBorder } from 'jamespot-react-components';\nimport 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 display: flex;\n align-items: center;\n padding: ${(props) => (props.parentIsColumn ? '36px 16px' : '0 10px')};\n gap: 10px;\n width: 40%;\n border: 1px solid ${(props) => props.theme.color.grey1};\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 ${(props) => !props.parentIsColumn && `height: 72px;`}\n &:hover {\n background-color: ${(props) => props.theme.color.grey0};\n }\n\n ${DashedFocusBorder()}\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 [\n Widget.definition(WidgetsName.CheckList),\n Widget.definition(WidgetsName.Presence),\n Widget.definition(WidgetsName.QuickSurvey),\n ];\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 width: 100%;\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 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 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 {\n WidgetsRootState,\n WidgetsName,\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 { 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 mode,\n }),\n );\n }, [uniqid, dispatch, name, 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 React from 'react';\n\nimport styled from 'styled-components';\n\nimport { JRCLoader } from 'jamespot-react-components';\n\nexport const Wrapper = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: rgba(255, 255, 255, 0.4);\n`;\n\nexport const WidgetIsPending = () => {\n return (\n <Wrapper>\n <JRCLoader size={'m'} />\n </Wrapper>\n );\n};\n","import { JRCButton, JRCInputText } from 'jamespot-react-components';\n\nimport React, { useState, useEffect } from 'react';\n\nimport { useForm } from 'react-hook-form';\nimport { useIntl } from 'react-intl';\nimport { useDispatch } from 'react-redux';\n\nimport styled from 'styled-components';\n\nexport const CSSWrapper = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n display: flex;\n flex-direction: row;\n fieldset {\n margin: 0.2rem !important;\n }\n`;\n\nexport const WidgetInlineInputText = ({\n placeholder,\n handleClick,\n}: {\n placeholder: string;\n handleClick: (label: string) => void;\n}) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const [label, setLabel] = useState<string>('');\n\n const { control, watch, reset } = useForm({\n defaultValues: { label },\n criteriaMode: 'all',\n });\n\n useEffect(() => {\n const subscription = watch((data) => {\n setLabel(data.label ?? '');\n });\n return () => subscription.unsubscribe();\n }, [watch, dispatch]);\n\n return (\n <CSSWrapper>\n <JRCInputText name={'label'} control={control} placeholder={placeholder} width=\"100%\" />\n <JRCButton\n label={intl.formatMessage({ id: 'GLOBAL_Confirm' })}\n disabled={!label.length}\n onClick={() => {\n handleClick(label);\n setLabel('');\n reset();\n }}\n />\n </CSSWrapper>\n );\n};\n","import JRCore, { RTProvider } from 'App';\nimport { Toast, updateWidgetContent, Widget, WidgetEditor } from 'jamespot-front-business';\nimport { JRCFileViewer, JRCWidgetCheckListEntries } from 'jamespot-react-components';\nimport jApi, {\n CombinedWidgetContent,\n ensureWidgetCheckListType,\n jFileLittle,\n WidgetCheckListContent,\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';\n\nimport { WidgetFooterView } from './components/WidgetFooterView';\nimport { useWidgetRT } from '../hooks';\nimport { WidgetIsPending } from './components/WidgetIsPending';\nimport { WidgetInlineInputText } from './components/WidgetInlineInputText';\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 CSSWidgetCheckListWrapper = styled.div`\n position: relative;\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 const [isPending, setIsPending] = useState(false);\n\n const token = useSelector(Widget.selectors.selectToken, shallowEqual);\n\n const uri = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObjectUri(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 allRt = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectAllWidgetRTObject(state, widget.uniqid),\n shallowEqual,\n );\n\n const canEditCollaboration = useMemo(() => {\n return widgetObjectRights && widgetObjectRights.update;\n }, [widgetObjectRights]);\n\n const canAdministrate = useMemo(() => {\n return widgetObjectRights && widgetObjectRights.administrate;\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 = useCallback(\n (uniqid: string, content: WidgetCheckListContent) => {\n dispatch(updateWidgetContent(uniqid, content));\n },\n [dispatch],\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) => {\n if (!uri) return;\n if (isPending) return;\n setIsPending(true);\n jApi.widget\n .checkListRespond({\n uri,\n uniqid: id,\n index: index,\n })\n .then(() => {\n if (onWidgetUpdate) onWidgetUpdate();\n })\n .catch((err) => {\n onError(err.message);\n setIsPending(false);\n });\n };\n\n const handleReloadWidget = useCallback(() => {\n if (!uri) return;\n setIsPending(true);\n jApi.widget\n .getWidget<WidgetCheckListType>({ uri, uniqid })\n .then((response) => {\n if (ensureWidgetCheckListType(response.result)) {\n onChange(uniqid, response.result.content);\n }\n })\n .catch((err) => {\n return !err.aborted && onError;\n })\n .finally(() => setIsPending(false));\n }, [uniqid, onError, uri, onChange]);\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 mode,\n }),\n );\n };\n\n useEffect(() => {\n if (!token && mode === 'edit') {\n jApi.network.token().then((response) => {\n dispatch(Widget.slice.actions.setToken({ token: response.result }));\n });\n }\n }, [mode, token, dispatch]);\n\n useEffect(() => {\n const finalEntries: JRCWidgetCheckListEntries | undefined = widget.content.arr?.map((item) => ({\n text: item.title ?? '',\n file: item.file ?? undefined,\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 (!Array.isArray(allRt)) return;\n const lastRt = allRt.at(-1);\n if (!lastRt) return;\n if (!uri) return;\n\n if (lastRt.object.uri === uri && lastRt.uniqid === widget.uniqid) {\n if (lastRt.fn === 'check-list-response' || lastRt.fn === 'widget-update') {\n handleReloadWidget();\n }\n }\n }, [allRt, widget.uniqid, uri, onError, dispatch, handleReloadWidget]);\n\n const handleCollabAddEntry = (label: string) => {\n if (!widget.content.arr || !uri) return;\n\n const contentToUpdate = {\n ...widget.content,\n arr: [...widget.content.arr, { title: label, value: false }],\n };\n\n jApi.widget\n .updateWidget<CombinedWidgetContent>({\n uri,\n uniqid: widget.uniqid,\n content: contentToUpdate as CombinedWidgetContent,\n v2: true,\n })\n .then(() => onChange(widget.uniqid, contentToUpdate))\n .catch((err) => onError(err.errorMsg));\n };\n\n const files = useMemo(() => {\n if (!Array.isArray(widgetContent.arr)) return [];\n\n const fs: jFileLittle[] = [];\n widgetContent.arr.forEach((el) => {\n if (el.file) {\n fs.push(el.file);\n }\n });\n\n return fs;\n }, [widgetContent]);\n\n if (mode === 'edit') {\n if (inplace) {\n return (\n <CommentContainer>\n <WidgetCheckListEditor\n token={token}\n uniqid={uniqid}\n content={widgetContent}\n inplace={inplace}\n onChangeContent={onChange}\n onChangeWrapper={onChangeWrapper}\n handleChange={(content) =>\n dispatch(updateWidgetContent<WidgetCheckListContent>(widget.uniqid, content))\n }\n />\n </CommentContainer>\n );\n }\n }\n\n return (\n <RTProvider\n useRT={() => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useWidgetRT(widget.uniqid);\n }}>\n {entries && (\n <JRCFileViewer files={files} openWithOptions={[]}>\n {(open) => {\n return (\n <CSSWidgetCheckListWrapper key={widget.uniqid}>\n <WidgetCheckList\n limit={10}\n initialEntries={entries}\n onFileClick={(entry) => entry.id && open(entry.id)}\n onItemCheckListChange={(index) => handleCheckItem(widget.uniqid, index)}\n />\n {widgetContent.edit && (\n <WidgetInlineInputText\n handleClick={handleCollabAddEntry}\n placeholder={intl.formatMessage({\n id: 'COMMENT_WIDGET_CHECKLIST_Add_New_Task',\n })}\n />\n )}\n {canAdministrate && token && (\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 setIsPending(true);\n jApi.network\n .token()\n .then((response) => {\n dispatch(\n Widget.slice.actions.setToken({ token: response.result }),\n );\n openEditorPanel(response.result);\n })\n .finally(() => setIsPending(false));\n } else {\n openEditorPanel(token);\n }\n }}\n />\n )}\n {isPending && <WidgetIsPending />}\n </CSSWidgetCheckListWrapper>\n );\n }}\n </JRCFileViewer>\n )}\n </RTProvider>\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, { WidgetDisplayMode, WidgetsRootState, WidgetPresenceContent } 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 content,\n}: {\n mode?: WidgetDisplayMode;\n uniqid: string;\n content: WidgetPresenceContent;\n}) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n\n const uri = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObjectUri(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<boolean>(() => !!(widgetObjectRights && widgetObjectRights.update), [widgetObjectRights]);\n\n const handleClosing = useCallback(() => {\n if (mode === 'edit' || !canUpdate || !uri) {\n return;\n }\n\n const contentToUpdate = { ...content, isClosed: true };\n\n jamespot.widget\n .updateWidget({\n uri,\n uniqid,\n content: contentToUpdate,\n v2: true,\n })\n .then(() => dispatch(Widget.slice.actions.updateWidget({ uniqid, content: contentToUpdate })))\n .catch(() => dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Error' })));\n }, [mode, uniqid, canUpdate, uri, content, dispatch]);\n\n return (\n <>\n {canUpdate && !content.isClosed && (\n <CSSPaddingMd>\n <CSSHorizontalAlign>\n <CSSHref onClick={handleClosing}>\n {intl.formatMessage({ id: 'WIDGET_Presence_Closing' })}\n </CSSHref>\n </CSSHorizontalAlign>\n </CSSPaddingMd>\n )}\n </>\n );\n};\n","import JRCore, { RTProvider } from 'App';\nimport jApi, {\n WidgetDisplayMode,\n WidgetPresenceResponse,\n WidgetPresenceResponseUserList,\n WidgetPresenceType,\n WidgetsRootState,\n} from 'jamespot-user-api';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport styled from 'styled-components';\n\nconst JRCWidgetPresence = JRCore.registry.getLazyComponent('WidgetPresence');\nconst ModalUserList = JRCore.registry.getLazyComponent('ModalUserList');\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\nexport const CSSWidgetPresenceIsClosed = styled.div`\n flex: 1;\n display: flex;\n padding: ${(props) => props.theme.space.md}px;\n border: 1px dashed ${(props) => props.theme.color.orange};\n justify-content: center;\n align-center: center;\n border-radius: ${(props) => props.theme.space.sm}px;\n margin: ${(props) => props.theme.space.sm}px;\n`;\n\nimport { Toast, updateWidgetContent, Widget } from 'jamespot-front-business';\nimport { useWidgetRT } from '../hooks';\nimport { WidgetFooterView } from './components/WidgetFooterView';\nimport { WidgetPresenceWrapperClosing } from './JRCWidgetPresenceWrapperClosing';\nimport { WidgetIsPending } from './components/WidgetIsPending';\n\nexport const JRCWidgetPresenceWrapper = ({\n widget,\n mode,\n}: {\n widget: WidgetPresenceType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const { limit, limitValue, closing, isClosed } = widget.content;\n const { uniqid } = widget;\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 [openUsersModal, setOpenUsersModal] = useState(false);\n const [usersListIndex, setUsersListIndex] = useState<number>();\n const [usersList, setUsersList] = useState<WidgetPresenceResponseUserList>();\n const ref = useRef<AbortController>(abortController);\n\n const uri = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObjectUri(state, uniqid),\n shallowEqual,\n );\n\n const allRt = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectAllWidgetRTObject(state, 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 canRespond = useMemo<boolean>(\n () => !(limit && limitValue && response.userAvailableTotal >= limitValue),\n [limit, limitValue, response.userAvailableTotal],\n );\n\n const lockedRespondHandler = useMemo(() => {\n return (closing && isClosed) || mode === 'edit';\n }, [closing, isClosed, mode]);\n\n const handleCancelRespond = useCallback(() => {\n if (!uri || lockedRespondHandler) return;\n if (!canRespond) {\n dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Limit_Response_Error' }));\n return;\n }\n\n setIsPendingResponse(true);\n jApi.widget\n .presenceCancel({ uri, uniqid })\n .catch(handleError)\n .finally(() => setIsPendingResponse(false));\n }, [dispatch, uniqid, handleError, uri, canRespond, lockedRespondHandler]);\n\n const handleRespond = useCallback(\n (value: 1 | 0) => {\n if (!uri || lockedRespondHandler) return;\n\n setIsPendingResponse(true);\n jApi.widget\n .presenceRespond(\n {\n uri,\n uniqid,\n value,\n },\n ref.current.signal,\n )\n .catch(handleError)\n .finally(() => setIsPendingResponse(false));\n },\n [uri, uniqid, handleError, lockedRespondHandler],\n );\n\n const handleResponse = useCallback(() => {\n if (mode === 'edit' || !uri) return;\n setIsPendingResponse(true);\n jApi.widget\n .presenceGetResponse({ uri, uniqid }, ref.current.signal)\n .then((response) => {\n setResponse(response.result);\n })\n .catch((err) => !err.aborted && handleError())\n .finally(() => setIsPendingResponse(false));\n }, [uri, handleError, uniqid, mode]);\n\n const handleLoadUsersList = (index: number, page?: number) => {\n if (!uri) return;\n jApi.widget\n .presenceGetResponseUserList({ uri, uniqid, index, page, limit: 8 }, ref.current.signal)\n .then((response) => {\n setUsersList({\n ...response.result,\n data: [...response.result.data],\n cnt: response.result.cnt,\n });\n })\n .catch((err) => {\n return !err.aborted && handleError;\n });\n };\n\n const handleReloadWidget = useCallback(() => {\n if (!uri) return;\n setIsPendingResponse(true);\n jApi.widget\n .getWidget<WidgetPresenceType>({ uri, uniqid })\n .then((response) => {\n dispatch(updateWidgetContent(uniqid, response.result));\n })\n .catch((err) => {\n return !err.aborted && handleError;\n })\n .finally(() => setIsPendingResponse(false));\n }, [dispatch, handleError, uri, uniqid]);\n\n useEffect(() => {\n return () => {\n if (ref && ref.current) {\n ref.current.abort();\n }\n };\n }, []);\n\n useEffect(() => {\n handleResponse();\n }, [handleResponse]);\n\n useEffect(() => {\n if (!Array.isArray(allRt)) return;\n const lastRt = allRt.at(-1);\n if (!lastRt || !uri) return;\n\n if (lastRt.object.uri === uri && lastRt.uniqid === uniqid) {\n if (lastRt.fn === 'widget-presence-response') {\n handleResponse();\n }\n if (lastRt.fn === 'widget-update') {\n handleReloadWidget();\n }\n }\n }, [allRt, handleResponse, uniqid, uri, handleReloadWidget]);\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 handleOpenUsersModal={(index) => {\n setUsersList({\n limit: 0,\n page: 0,\n data: [],\n cnt: 0,\n });\n setUsersListIndex(index);\n handleLoadUsersList(index);\n setOpenUsersModal(true);\n }}\n />\n {closing && isClosed && (\n <CSSWidgetPresenceIsClosed>\n {intl.formatMessage({ id: 'WIDGET_Presence_Is_Closed' })}\n </CSSWidgetPresenceIsClosed>\n )}\n {closing && !isClosed && (\n <WidgetPresenceWrapperClosing mode={mode} uniqid={widget.uniqid} content={widget.content} />\n )}\n {mode === 'view' && <WidgetFooterView uniqid={widget.uniqid} name={widget.name} mode={mode} />}\n {isPendingResponse && <WidgetIsPending />}\n <ModalUserList\n open={openUsersModal}\n usersList={usersList}\n title={\n usersListIndex === 1\n ? intl.formatMessage({ id: 'WIDGET_Presence_On' })\n : intl.formatMessage({ id: 'WIDGET_Presence_Off' })\n }\n setOpen={setOpenUsersModal}\n onClose={() => {\n setUsersList({\n limit: 0,\n page: 0,\n data: [],\n cnt: 0,\n });\n }}\n handleLoadUsersList={(page) => {\n handleLoadUsersList(usersListIndex ?? 0, page);\n }}\n />\n </CSSWidgetPresenceWrapper>\n </RTProvider>\n );\n};\n","import { Toast, updateWidgetContent, Widget, WidgetEditor } from 'jamespot-front-business';\nimport jApi, {\n CombinedWidgetContent,\n jFileLittle,\n WidgetDisplayMode,\n WidgetQuickSurveyContent,\n WidgetQuickSurveyResponse,\n WidgetQuickSurveyResponseUserList,\n WidgetQuickSurveyType,\n WidgetsName,\n WidgetsRootState,\n} from 'jamespot-user-api';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\nimport { WidgetFooterView } from './components/WidgetFooterView';\nimport { WidgetInlineInputText } from './components/WidgetInlineInputText';\nimport { RTProvider } from 'App';\nimport { useWidgetRT } from '../hooks';\nimport { WidgetIsPending } from './components/WidgetIsPending';\nimport { JRCFileViewer } from 'jamespot-react-components';\nimport JRCore from 'App';\n\nconst WidgetQuickSurvey = JRCore.registry.getLazyComponent('WidgetQuickSurvey');\nconst WidgetQuickSurveyEditor = JRCore.registry.getLazyComponent('WidgetQuickSurveyEditor');\nconst ModalUserList = JRCore.registry.getLazyComponent('ModalUserList');\n\nconst WrapperContainer = styled.div<{ withPadding?: boolean }>`\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: 14px;\n ${(props) => props.withPadding && `padding: 0 12px;`}\n padding-top: 16px;\n`;\n\ntype JRCWidgetQuickSurveyWrapperProps = {\n widget: WidgetQuickSurveyType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n};\n\nexport const JRCWidgetQuickSurveyWrapper = ({ widget, inplace, mode }: JRCWidgetQuickSurveyWrapperProps) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const { uniqid, content: widgetContent } = widget;\n const [response, setResponse] = useState<WidgetQuickSurveyResponse>({\n userResponses: [],\n totalRespondent: 0,\n totalResponse: 0,\n userLoggedResponses: [],\n });\n const [openUsersModal, setOpenUsersModal] = useState(false);\n const [isPending, setIsPending] = useState(false);\n const [usersListIndex, setUsersListIndex] = useState<number>();\n const [usersList, setUsersList] = useState<WidgetQuickSurveyResponseUserList>();\n\n const [abortController] = useState<AbortController>(new AbortController());\n const ref = useRef<AbortController>(abortController);\n\n const token = useSelector(Widget.selectors.selectToken, shallowEqual);\n\n const uri = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObjectUri(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 allRt = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectAllWidgetRTObject(state, widget.uniqid),\n shallowEqual,\n );\n\n const onChange = useCallback(\n (uniqid: string, content: WidgetQuickSurveyContent) => {\n dispatch(updateWidgetContent(uniqid, content));\n },\n [dispatch],\n );\n\n const onChangeWrapper = (content: { uniqid: string; title?: string }) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ ...content }));\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.QuickSurvey,\n }),\n );\n };\n\n const handleError = useCallback(\n () => dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Error' })),\n [dispatch],\n );\n\n const handleResponse = useCallback(\n (uniqid: string) => {\n if (mode === 'edit' || !uri) return;\n setIsPending(true);\n jApi.widget\n .quickSurveyGetResponse({ uri, uniqid }, ref.current.signal)\n .then((response) => {\n setResponse(response.result);\n })\n .catch((err) => {\n return !err.aborted && handleError;\n })\n .finally(() => setIsPending(false));\n },\n [handleError, uri, mode],\n );\n\n const handleWidgetGet = useCallback(() => {\n if (!uri) return;\n setIsPending(true);\n jApi.widget\n .getWidget<WidgetQuickSurveyType>({ uri, uniqid }, ref.current.signal)\n .then((response) => {\n onChange(uniqid, response.result.content);\n })\n .catch((err) => {\n return !err.aborted && handleError;\n })\n .finally(() => setIsPending(false));\n }, [uniqid, handleError, uri, onChange]);\n\n const handleRespond = (index: number) => {\n if (mode === 'edit' || !uri) return;\n setIsPending(true);\n jApi.widget\n .quickSurveyRespond({ uri, index, multi: widgetContent.multi ? 1 : 0, uniqid }, ref.current.signal)\n .then(() => {\n handleResponse(widget.uniqid);\n })\n .catch((err) => !err.aborted && handleError)\n .finally(() => setIsPending(false));\n };\n\n const handleCloseSurvey = () => {\n if (!uri) return;\n if (widgetContent.closing) {\n const finalContent = { ...widgetContent, isClosed: true } as CombinedWidgetContent;\n\n jApi.widget\n .updateWidget<WidgetQuickSurveyType>({\n uri,\n uniqid,\n content: finalContent,\n })\n .catch(() => {\n handleError();\n });\n }\n };\n\n const handleProgressBarClick = (index: number) => {\n handleRespond(index);\n };\n\n const handleAddQuickAnswer = (title: string) => {\n if (!uri) return;\n\n const newContent = {\n ...widgetContent,\n arr: [...(widgetContent.arr ?? []), { title }],\n } as CombinedWidgetContent;\n\n jApi.widget\n .quickSurveyAddEnty({ uri, uniqid, label: title })\n .then(() => {\n dispatch(Widget.slice.actions.updateWidget({ uniqid, content: newContent }));\n })\n .catch(handleError);\n };\n\n const handleLoadUsersList = (index: number, page?: number) => {\n if (!uri) return;\n jApi.widget\n .quickSurveyGetResponseUserList({ uri, uniqid, index, page, limit: 8 }, ref.current.signal)\n .then((response) => {\n setUsersList({\n ...response.result,\n data: [...response.result.data],\n cnt: response.result.cnt,\n });\n })\n .catch((err) => {\n return !err.aborted && handleError;\n });\n };\n\n const canUpdate = useMemo(() => widgetObjectRights && widgetObjectRights.update, [widgetObjectRights]);\n\n useEffect(() => {\n handleResponse(widget.uniqid);\n }, [handleResponse, widget.uniqid]);\n\n useEffect(() => {\n if (!Array.isArray(allRt)) return;\n const lastRt = allRt.at(-1);\n if (!lastRt) return;\n if (!uri) return;\n\n if (lastRt.object.uri === uri && lastRt.uniqid === widget.uniqid) {\n if (lastRt.fn === 'widget-quick-survey-response') {\n handleResponse(widget.uniqid);\n }\n if (lastRt.fn === 'widget-update') {\n handleWidgetGet();\n }\n }\n }, [allRt, uri, widget.uniqid, handleWidgetGet, handleResponse]);\n\n const files = useMemo(() => {\n if (!Array.isArray(widgetContent.arr)) return [];\n\n const fs: jFileLittle[] = [];\n widgetContent.arr.forEach((el) => {\n if (el.file) {\n fs.push(el.file);\n }\n });\n\n return fs;\n }, [widgetContent]);\n\n useEffect(() => {\n if (!token && mode === 'edit') {\n jApi.network.token().then((response) => {\n dispatch(Widget.slice.actions.setToken({ token: response.result }));\n });\n }\n }, [mode, token, dispatch]);\n\n if (mode === 'edit') {\n if (inplace) {\n return (\n <WrapperContainer withPadding={true}>\n <WidgetQuickSurveyEditor\n token={token}\n uniqid={uniqid}\n content={widget.content}\n onChangeContent={onChange}\n onChangeWrapper={onChangeWrapper}\n handleChange={(content) => onChange(uniqid, content)}\n inplace={inplace}\n />\n </WrapperContainer>\n );\n }\n }\n\n return (\n <RTProvider\n useRT={() => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useWidgetRT(widget.uniqid);\n }}>\n <WrapperContainer>\n <JRCFileViewer files={files} openWithOptions={[]}>\n {(open) => {\n return (\n <WidgetQuickSurvey\n limit={response.totalResponse ?? 0}\n values={widgetContent.arr ?? []}\n userResponses={response.userResponses}\n userHasAlreadyVoted={response.userLoggedResponses.length > 0}\n canCloseSurvey={widget.content.closing ?? false}\n isClosed={widget.content.isClosed ?? false}\n open={widget.content.open ?? false}\n anonymize={widget.content.anonymize ?? false}\n seeResponseAfter={widget.content.seeResponseAfter ?? false}\n canUpdate={canUpdate}\n handleClickFile={(entry) => entry.id && open(entry.id)}\n handleCloseSurvey={handleCloseSurvey}\n handleProgressBarClick={handleProgressBarClick}\n setOpenUsersModal={(index) => {\n setUsersListIndex(index);\n handleLoadUsersList(index);\n setOpenUsersModal(true);\n }}\n />\n );\n }}\n </JRCFileViewer>\n\n {widgetContent.open && (\n <WidgetInlineInputText\n handleClick={handleAddQuickAnswer}\n placeholder={intl.formatMessage({ id: 'FIELDS_Add_Option' })}\n />\n )}\n {canUpdate && (\n <WidgetFooterView\n uniqid={widget.uniqid}\n name={widget.name}\n collaborationRights={{\n update: !!canUpdate,\n }}\n mode={mode}\n handleOpenEditor={() => {\n if (!token) {\n setIsPending(true);\n jApi.network\n .token()\n .then((response) => {\n dispatch(Widget.slice.actions.setToken({ token: response.result }));\n openEditorPanel(response.result);\n })\n .finally(() => setIsPending(false));\n } else {\n openEditorPanel(token);\n }\n }}\n />\n )}\n {isPending && <WidgetIsPending />}\n <ModalUserList\n open={openUsersModal}\n usersList={usersList}\n title={widgetContent.arr?.[usersListIndex ?? 0]?.title ?? ''}\n setOpen={setOpenUsersModal}\n handleLoadUsersList={(page) => {\n handleLoadUsersList(usersListIndex ?? 0, page);\n }}\n onClose={() => {\n setUsersList({\n limit: 0,\n page: 0,\n data: [],\n cnt: 0,\n });\n }}\n />\n </WrapperContainer>\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';\nimport { JRCHtml } from 'jamespot-react-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 (\n <>\n {widgetWrapper && typeof widgetWrapper.title === 'string' && widgetWrapper.title.length !== 0 && (\n <CSSWidgetTitle>\n <JRCHtml __html={widgetWrapper.title ?? ''} />\n </CSSWidgetTitle>\n )}\n </>\n );\n};\n","import { Widget } from 'jamespot-front-business';\nimport { JRCInputText } from 'jamespot-react-components';\nimport { WidgetsRootState } from 'jamespot-user-api';\nimport React, { useEffect } from 'react';\n\nimport { useForm } from 'react-hook-form';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nexport const WidgetTitleEdit = ({ uniqid }: { uniqid: string }) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const widgetWrapperTitle = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid)?.title,\n shallowEqual,\n );\n\n const { control, watch } = useForm({\n defaultValues: { widgetTitle: widgetWrapperTitle },\n criteriaMode: 'all',\n });\n\n useEffect(() => {\n const subscription = watch((data) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ uniqid, title: 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 margin=\"0\"\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 fieldset:first-of-type {\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 mode: 'edit',\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 ensureWidgetQuickSurveyType,\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';\nimport { JRCWidgetQuickSurveyWrapper } from './wrapper/JRCWidgetQuickSurveyWrapper';\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, widget.name === 'widget-check-list')) {\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 if (ensureWidgetQuickSurveyType(widget)) {\n return (\n <CSSWidgetWithTitle>\n {mode === 'edit' ? (\n <WidgetHeaderEdit name={widget.name} uniqid={widget.uniqid} />\n ) : (\n <WidgetTitle uniqid={widget.uniqid} />\n )}\n <JRCWidgetQuickSurveyWrapper 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 JRCore from 'App';\nimport WidgetWrapperCore from '../widgets/WidgetWrapperCore';\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 return (\n <JRCMessage\n variant={'info'}\n message={intl.formatMessage(\n { id: 'WIDGET_Cannot_Display' },\n { widget },\n )}\n />\n );\n }}\n />\n </CSSCommentsBlocWidgetWrapper>\n ),\n )}\n </>\n );\n};\n","import { useMemo, useState } from 'react';\r\nimport { JTinyMCEExtensionsBuilders } from 'jamespot-react-components';\r\nimport { useIntl } from 'react-intl';\r\nimport { Editor } from 'jamespot-react-components';\r\n\r\nexport const useMarkdownModal = (): {\r\n open: boolean;\r\n onInsert: (v: string) => void;\r\n close: () => void;\r\n ext: ReturnType<typeof JTinyMCEExtensionsBuilders.markdown>;\r\n isActive?: boolean;\r\n} => {\r\n const intl = useIntl();\r\n const [open, setOpen] = useState(false);\r\n const [editor, setEditor] = useState<Editor>();\r\n const ext = useMemo(\r\n () =>\r\n JTinyMCEExtensionsBuilders.markdown((ed) => {\r\n setEditor(ed);\r\n setOpen(true);\r\n }, intl),\r\n [intl],\r\n );\r\n return {\r\n open,\r\n onInsert: (v: string) => {\r\n editor?.execCommand('InsertHTML', false, v);\r\n },\r\n close: () => setOpen(false),\r\n ext,\r\n isActive: true,\r\n };\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport JRCore from '../../../App';\r\nimport { marked } from 'marked';\r\n\r\nconst InputTextareaRaw = JRCore.registry.getLazyComponent('InputTextareaRaw');\r\nconst Modal = JRCore.registry.getLazyComponent('Modal');\r\n\r\nexport type MarkdownModalProps = {\r\n onInsert: (html: string) => void;\r\n open: boolean;\r\n close: () => void;\r\n};\r\n\r\nexport const MarkdownModal = ({ onInsert, open, close }: MarkdownModalProps) => {\r\n const intl = useIntl();\r\n const [markdown, setMarkdown] = React.useState('');\r\n\r\n const doClose = useCallback(() => {\r\n setMarkdown('');\r\n close();\r\n }, [close]);\r\n\r\n return (\r\n <Modal\r\n title={intl.formatMessage({ id: 'TINY_MCE_Insert_Markdown' })}\r\n open={open}\r\n closeHandler={doClose}\r\n enableClickAwayCloseModal\r\n buttons={[\r\n {\r\n children: <FormattedMessage id=\"GLOBAL_Cancel\" />,\r\n color: 'cancel',\r\n clickHandler: doClose,\r\n },\r\n {\r\n children: <FormattedMessage id=\"GLOBAL_Insert\" />,\r\n color: 'valid',\r\n disabled: !markdown,\r\n clickHandler: () => {\r\n onInsert(marked.parse(markdown, { async: false }).replace(/<br>/g, '<br><br>'));\r\n doClose();\r\n },\r\n },\r\n ]}>\r\n <InputTextareaRaw value={markdown} onChange={(e) => setMarkdown(e.target.value)} height={'400px'} />\r\n </Modal>\r\n );\r\n};\r\n","import JRCore, { 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 { CommentsBlocAddCommentWidgetsWrapper } from './comments/CommentsBlocAddCommentWidgetsWrapper';\nimport { CommentsBlocCommentWidgetsWrapper } from './comments/CommentsBlocCommentWidgetsWrapper';\nimport { useMarkdownModal } from '../hooks/useMarkdownModal';\nimport { MarkdownModal } from './tinymce/extension/MarkdownModal';\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 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 const {\n open,\n onInsert,\n close: closeMarkdownModal,\n ext: extMarkdown,\n isActive: isMarkdownActive,\n } = useMarkdownModal();\n\n useCommentRT(articleId);\n\n useCommentsLikeRT(\n commentsList.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.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 // set comment token to our widget slice to be able to upload image inside our widgets\n dispatch(Widget.slice.actions.setToken({ token: res.result }));\n })\n .catch((e) => {\n onError(e.errorMsg);\n });\n }\n }, [onError, token, tokenLoading, dispatch]);\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, fetchToken, onError, token, widgetIds, widgets],\n );\n\n useEffect(() => {\n fetchToken();\n }, [fetchToken]);\n\n useEffect(() => {\n dispatch(Comment.actions.fetchComments({ idArticle: articleId }));\n }, [articleId, dispatch]);\n\n useEffect(() => {\n if (!commentsList) {\n return;\n }\n commentsList.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}\n loading={loading}\n token={token}\n comments={commentsList}\n onComment={onComment}\n onCommentUpdate={onCommentUpdate}\n onCommentDelete={onCommentDelete}\n isWidgetActive={\n !!(\n widgetHook?.isActive &&\n widgetHook?.create &&\n widgetHook?.autorize?.includes('comment')\n )\n }\n widgetListComponent={\n <WidgetList\n mode={'comment'}\n namespace={'comment'}\n onChange={(widget) => {\n setWidgets([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 setToken(undefined);\n fetchToken();\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 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 additionalExtensions={[extMarkdown]}\n />\n <EditorsPanel />\n </CommentsBlocWrapper>\n </>\n )}\n {isMarkdownActive && <MarkdownModal onInsert={onInsert} open={open} close={closeMarkdownModal} />}\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: column;\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 ensureWidgetQuickSurveyType,\n HookListType,\n WidgetArticleAttachmentContent,\n WidgetArticleButtonContent,\n WidgetArticleGalleryContent,\n WidgetArticleImageContent,\n WidgetArticleSliderContent,\n WidgetArticleTextContent,\n WidgetArticleTitleContent,\n WidgetCheckListContent,\n WidgetDatasourceTableContent,\n WidgetPresenceContent,\n WidgetQuickSurveyContent,\n WidgetsRootState,\n WidgetStateProps,\n} from 'jamespot-user-api';\nimport React from 'react';\n\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');\nconst WidgetQuickSurveyEditor = JRCore.registry.getLazyComponent('WidgetQuickSurveyEditor');\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 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\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 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 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 handleChange={(content) =>\n dispatch(updateWidgetContent<WidgetCheckListContent>(uniqid, content, false))\n }\n />\n );\n } else if (ensureWidgetQuickSurveyType(widget)) {\n return (\n <WidgetQuickSurveyEditor\n token={token}\n uniqid={widget.uniqid}\n content={widget.content}\n onChangeContent={(uniqid, content) => {\n dispatch(updateWidgetContent<WidgetQuickSurveyContent>(uniqid, content, false));\n }}\n onChangeWrapper={(content) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ ...content }));\n }}\n handleChange={(content) =>\n dispatch(updateWidgetContent<WidgetQuickSurveyContent>(uniqid, content, false))\n }\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\nimport { Widget } 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\n const { control, watch } = useForm({\n defaultValues: { text: wrapper?.title.replace(/&amp;/g, '&') ?? '' },\n criteriaMode: 'all',\n });\n\n React.useEffect(() => {\n const subscription = watch((data: any) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ uniqid, title: data.text }));\n });\n return () => subscription.unsubscribe();\n }, [watch, uniqid, dispatch]);\n\n return wrapper ? (\n <JRCInputText\n name={'text'}\n width=\"100%\"\n control={control}\n placeholder={intl.formatMessage({ id: 'WIDGET_Title' })}\n />\n ) : (\n <></>\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 from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport JRCore from 'App';\n\nconst JRCButton = JRCore.registry.getLazyComponent('Button');\n\nimport { Toast, Widget, WidgetEditor } from 'jamespot-front-business';\nimport jApi, { CombinedWidgetContent, WidgetDisplayMode, WidgetsRootState } from 'jamespot-user-api';\n\nimport { useIntl } from 'react-intl';\n\nexport const EditorSave = ({ uniqid, mode }: { uniqid: string; mode: WidgetDisplayMode }) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const wrapper = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid),\n shallowEqual,\n );\n const uri = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObjectUri(state, uniqid),\n shallowEqual,\n );\n\n const handleClick = () => {\n dispatch(WidgetEditor.slice.actions.flushEditor({ uniqid }));\n const content = wrapper && wrapper.widget && wrapper.widget.content;\n if (!uri || !wrapper || !content) return;\n if (mode == 'view') {\n jApi.widget\n .updateWidget<CombinedWidgetContent>({\n uri,\n uniqid: uniqid,\n title: wrapper.title,\n content: content as CombinedWidgetContent,\n v2: true,\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\n if (mode === 'edit') {\n dispatch(Widget.slice.actions.updateWidget({ uniqid, content: content as CombinedWidgetContent }));\n }\n };\n\n return <JRCButton onClick={handleClick}>{intl.formatMessage({ id: 'GLOBAL_Save' })}</JRCButton>;\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\nimport { EditorSave } from './components/EditorSave';\n\nconst OVERRIDE_SAVE = ['widget-presence', 'widget-quick-survey', 'widget-check-list'];\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 {OVERRIDE_SAVE.includes(editor.name) && <EditorSave uniqid={uniqid} mode={editor.mode} />}\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 isActive = useMemo(() => {\n return J.hooks?.JIAHook?.isActive && J.debug['JIABETA'];\n }, []);\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, isActive } 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';\nimport { useMarkdownModal } from '../../hooks/useMarkdownModal';\nimport { MarkdownModal } from './extension/MarkdownModal';\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, ext: extAI, isActive: isAIActive } = useAI();\n const {\n open,\n onInsert,\n close: closeMarkdownModal,\n ext: extMarkdown,\n isActive: isMarkdownActive,\n } = useMarkdownModal();\n\n const extArray = useMemo(() => {\n return [...(isMarkdownActive ? [extMarkdown] : []), ...(isAIActive ? [extAI] : [])];\n }, [extAI, extMarkdown, isAIActive, isMarkdownActive]);\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 {isAIActive && <AIModal query={query} />}\n {isMarkdownActive && <MarkdownModal onInsert={onInsert} open={open} close={closeMarkdownModal} />}\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';\nimport { MarkdownModal } from './extension/MarkdownModal';\nimport { useMarkdownModal } from '../../hooks/useMarkdownModal';\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, ext: extAI, isActive: isAIActive } = useAI();\n const {\n open,\n onInsert,\n close: closeMarkdownModal,\n ext: extMarkdown,\n isActive: isMarkdownActive,\n } = useMarkdownModal();\n\n const extArray = useMemo(() => {\n return [...(isMarkdownActive ? [extMarkdown] : []), ...(isAIActive ? [extAI] : [])];\n }, [extAI, extMarkdown, isAIActive, isMarkdownActive]);\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 {isAIActive && <AIModal query={query} />}\n {isMarkdownActive && <MarkdownModal onInsert={onInsert} open={open} close={closeMarkdownModal} />}\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} flex={true}>\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","parentIsColumn","grey1","full","DashedFocusBorder","Flex","direction","JRCButton","JRCIconButton","WidgetList","mode","view","namespace","onChange","isOpen","setOpen","widgets","definition","WidgetsName","ArticleTitle","ArticleButton","CheckList","Presence","QuickSurvey","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","commonOptions","mentionsQueries","WidgetArticleTitle","ToolWrapper","Tool","JRCWidgetArticleTitleWrapper","heading","Toolbar","sizeValue","Footer","WidgetRemove","setIsOpen","removeWidget","flushWidget","WidgetFooterView","collaborationRights","handleOpenEditor","widgetObject","selectWidgetObject","widgetObjectRights","selectWidgetObjectRights","canUpdate","update","canDelete","delete","handleOnClick","ensureWidgetObjectHasMinimumProperties","WidgetIsPending","WidgetInlineInputText","placeholder","handleClick","setLabel","control","watch","reset","useForm","defaultValues","criteriaMode","subscription","data","unsubscribe","JRCInputText","disabled","WidgetCheckList","WidgetCheckListEditor","CommentContainer","border","CSSWidgetCheckListWrapper","JRCWidgetCheckListWrapper","onWidgetUpdate","widgetContent","entries","setEntries","isPending","setIsPending","selectWidgetObjectUri","allRt","selectAllWidgetRTObject","canEditCollaboration","canAdministrate","administrate","handleReloadWidget","getWidget","ensureWidgetCheckListType","err","aborted","finally","openEditorPanel","flushAllEditor","setToken","finalEntries","arr","checked","value","links","user","lastRt","at","object","fn","handleCollabAddEntry","contentToUpdate","updateWidget","v2","fs","forEach","el","push","onChangeContent","onChangeWrapper","updateWidgetWrapper","handleChange","RTProvider","useRT","JRCFileViewer","initialEntries","onFileClick","entry","onItemCheckListChange","checkListRespond","handleCheckItem","edit","getVisibleColumns","tableColumnsData","columns","toRet","filter","isVisible","find","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","get","Format","VIEW","model","sort","datasource","setTimeout","rows","tableDefaultSortOrder","tableDefaultSortName","__html","WidgetExcelDatasourceTableWrapper","ExcelDatasourceTable","CSSPaddingMd","CSSHref","secondary","CSSHorizontalAlign","WidgetPresenceWrapperClosing","handleClosing","isClosed","JRCWidgetPresence","ModalUserList","CSSWidgetPresenceWrapper","CSSWidgetPresenceIsClosed","orange","sm","JRCWidgetPresenceWrapper","limitValue","closing","userValue","userAvailableList","userUnavailableList","userAvailableTotal","userUnavailableTotal","isPendingResponse","setIsPendingResponse","abortController","AbortController","openUsersModal","setOpenUsersModal","usersListIndex","setUsersListIndex","usersList","setUsersList","handleError","canRespond","lockedRespondHandler","handleCancelRespond","presenceCancel","handleRespond","presenceRespond","signal","handleResponse","presenceGetResponse","handleLoadUsersList","page","presenceGetResponseUserList","cnt","abort","handleClickAvailable","handleClickUnavailable","handleOpenUsersModal","onClose","WidgetQuickSurvey","WidgetQuickSurveyEditor","WrapperContainer","withPadding","JRCWidgetQuickSurveyWrapper","userResponses","totalRespondent","totalResponse","userLoggedResponses","quickSurveyGetResponse","handleWidgetGet","handleCloseSurvey","finalContent","handleProgressBarClick","quickSurveyRespond","multi","quickSurveyGetResponseUserList","values","userHasAlreadyVoted","canCloseSurvey","anonymize","seeResponseAfter","handleClickFile","newContent","quickSurveyAddEnty","CSSWidgetTitle","WidgetTitle","widgetWrapper","selectWidget","WidgetTitleEdit","widgetWrapperTitle","widgetTitle","margin","CSSModalFooter","CSSWidgetHeaderEdit","CSSWidgetHeaderEditTitle","CSSWidgetHeaderEditActions","WidgetHeaderEdit","handleRemoveWidget","CSSWidgetWithTitle","DisplayWidget","cannotDisplayComponent","ensureWidgetArticleButtonType","ensureWidgetArticleGalleryType","ensureWidgetArticleAttachmentType","ensureWidgetArticleImageType","ensureWidgetArticleSliderType","ensureWidgetArticleTitleType","ensureWidgetArticleTextType","ensureWidgetExcelDatasourceTableType","ensureWidgetDatasourceTableType","ensureWidgetPresenceType","ensureWidgetQuickSurveyType","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","useMarkdownModal","editor","setEditor","onInsert","v","execCommand","close","ext","JTinyMCEExtensionsBuilders","markdown","ed","InputTextareaRaw","Modal","MarkdownModal","setMarkdown","doClose","async","replace","e","JRCCommentsBloc","CommentsBlocWrapper","CommentsBloc","articleId","canComment","commentType","socialQuestion","setLoading","setWidgets","tokenLoading","setTokenLoading","currentUser","widgetIds","selectWidgets","tinyMCEExtendedOptions","selectTinyMCEExtendedOptions","platformConfig","selectPlatformConfig","commentsList","commentList","driveHook","selectHook","fileBank","widgetHook","socialQuestionOptions","setSocialQuestionOptions","closeMarkdownModal","extMarkdown","isMarkdownActive","useCommentRT","idComments","idArticle","socket","rtHandlers","getCommentsLikeRTHandlers","handler","onMessage","function","offMessage","c","fetchComments","fetchToken","res","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","handlers","drive","filebank","socialAction","questionAnswer","onSelectResponse","responseId","isResolved","onUnselectResponse","additionalExtensions","StretchContainer","css","Container","stretch","Form","FormElm","onSubmit","FieldsetWrapper","DisplayForm","formRef","configuration","useDisplay","fields","forceMandatory","handleSubmit","formFn","formatValuesForSubmit","k","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","selectEditor","popup","flexDirection","marginTop","flushEditorPopup","WidgetArticleTitleEditor","WidgetArticleTextEditor","WidgetArticleGalleryEditor","WidgetArticleAttachmentEditor","WidgetArticleSliderEditor","WidgetArticleImageEditor","WidgetButtonEditor","WidgetDatasourceTableEditor","WidgetExcelDatasourceTableEditor","WidgetPresenceEditor","Editor","onSaveCallback","onSave","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","EditorSave","OVERRIDE_SAVE","EditorWrapper","tab","setTab","panel","useWrapper","useEditor","useWidgets","CSSEditorPortalWrapper","CSSEditorPortalPopupWrapper","CSSEditorPortalRow","CSSEditorPortalFreeSpace","editors","selectEditors","Empty","useAI","setQuery","J","hooks","JIAHook","debug","PrepareAndSetQuery","fetch","Promise","AICapabilities","develop","summarize","tldr","en","es","formal","funny","jia","JRCInputTinyMCE","JRCInputTinyMCEWithExt","extAI","isAIActive","extArray","onMentionsQueryError","tinymceCommonOptions","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":"724.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/tinymce/extension/MarkdownModal.tsx","webpack://ReactCore/./src/hooks/useMarkdownModal.ts","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/components/WidgetIsPending.tsx","webpack://ReactCore/./src/components/widgets/wrapper/components/WidgetInlineInputText.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/JRCWidgetQuickSurveyWrapper.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/components/EditorSave.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 { Registry } from '../registry/Registry';\r\n\r\nconst JRCAvatar = Registry.getLazyComponent('JRCAvatar');\r\nconst JRCIcon = 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 { Registry } from '../registry/Registry';\n\nconst JRCFlexBox = Registry.getLazyComponent('FlexBox');\nconst JRCModalContent = Registry.getLazyComponent('ModalContent');\nconst JRCModalLayout = Registry.getLazyComponent('ModalLayout');\nconst JRCStyledHref = Registry.getLazyComponent('StyledHref');\nconst JRCTooltip = Registry.getLazyComponent('Tooltip');\nconst JRCTypography = 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 jamespot from 'jamespot-user-api';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport styled, { useTheme } from 'styled-components';\nimport { Registry } from '../../../registry/Registry';\nimport { JiaTextEnhanceQuery } from '../../../hooks/useAI';\n\nconst JRCLoader = Registry.getLazyComponent('Loader');\nconst JRCModalContent = Registry.getLazyComponent('ModalContent');\nconst JRCModalLayout = Registry.getLazyComponent('ModalLayout');\nconst JRCTypography = 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 { Registry } from '../../../registry/Registry';\n\nconst EditorsPortal = Registry.getLazyComponent('EditorsPortal');\nconst JRCThemeProvider = 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 { DashedFocusBorder } from 'jamespot-react-components';\nimport 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 display: flex;\n align-items: center;\n padding: ${(props) => (props.parentIsColumn ? '36px 16px' : '0 10px')};\n gap: 10px;\n width: 40%;\n border: 1px solid ${(props) => props.theme.color.grey1};\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 ${(props) => !props.parentIsColumn && `height: 72px;`}\n &:hover {\n background-color: ${(props) => props.theme.color.grey0};\n }\n\n ${DashedFocusBorder()}\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';\nimport { WidgetDefinitionProps, WidgetKeys, WidgetWrapperProps } from 'jamespot-user-api';\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';\nimport { Registry } from '../../../registry/Registry';\n\nconst JRCButton = Registry.getLazyComponent('Button');\nconst JRCModalLayout = Registry.getLazyComponent('ModalLayout');\nconst JRCModalContent = Registry.getLazyComponent('ModalContent');\nconst JRCTooltip = Registry.getLazyComponent('Tooltip');\nconst JRCIconButton = 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 [\n Widget.definition(WidgetsName.CheckList),\n Widget.definition(WidgetsName.Presence),\n Widget.definition(WidgetsName.QuickSurvey),\n ];\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';\nimport { useSelector } from 'react-redux';\nimport { jFileLittle } from 'jamespot-user-api';\nimport { Widget } from 'jamespot-front-business';\nimport styled from 'styled-components';\nimport { Registry } from '../../../registry/Registry';\n\nconst JRCInputFileAdvancedRaw = 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';\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';\nimport { Application, Toast, Widget, updateWidgetContent } from 'jamespot-front-business';\nimport { JRCFileViewerOpenWithOptionsType } from 'jamespot-react-components';\nimport { WidgetUploader } from '../components/WidgetUploader';\nimport { Registry } from '../../../registry/Registry';\n\nconst WidgetAttachment = Registry.getLazyComponent('WidgetAttachment');\nconst JRCWidgetEmptyInplace = Registry.getLazyComponent('WidgetEmptyInplace');\nconst FileViewer = 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';\nimport styled from 'styled-components';\nimport { WidgetArticleButtonType, WidgetDisplayMode } from 'jamespot-user-api';\nimport { useDispatch } from 'react-redux';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { Registry } from '../../../registry/Registry';\n\nconst JRCWidgetButton = 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';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\nimport {\n WidgetArticleGalleryContent,\n WidgetArticleGalleryType,\n WidgetDisplayMode,\n WidgetsRootState,\n} from 'jamespot-user-api';\nimport { Widget, updateWidgetContent } from 'jamespot-front-business';\nimport { WidgetUploader } from '../components/WidgetUploader';\nimport { Registry } from '../../../registry/Registry';\n\nconst JRCWidgetArticleGallery = Registry.getLazyComponent('WidgetArticleGallery');\nconst JRCWidgetEmptyInplace = Registry.getLazyComponent('WidgetEmptyInplace');\nconst FileViewer = 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';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport {\n WidgetArticleImageContent,\n WidgetArticleImageType,\n WidgetDisplayMode,\n WidgetsRootState,\n formatImgUrl,\n jFileLittle,\n} from 'jamespot-user-api';\nimport { useIntl } from 'react-intl';\nimport { Widget, updateWidgetContent } from 'jamespot-front-business';\nimport { WidgetUploader } from '../components/WidgetUploader';\n\nconst WidgetImage = Registry.getLazyComponent('WidgetImage');\nconst FileViewer = Registry.getLazyComponent('FileViewer');\nconst JRCWidgetEmptyInplace = Registry.getLazyComponent('WidgetEmptyInplace');\n\nimport styled from 'styled-components';\nimport { Registry } from '../../../registry/Registry';\n\nconst CSSImageWrapperHover = styled.div`\n position: absolute;\n inset: 0;\n background-color: rgba(0, 0, 0, 0.4);\n pointer-events: 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 styled from 'styled-components';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { shallowEqual, useSelector } from 'react-redux';\nimport { Registry } from '../../../registry/Registry';\nimport { useAppDispatch } from '../../../redux/store';\n\nconst FileViewer = Registry.getLazyComponent('FileViewer');\nconst JRCWidgetEmptyInplace = Registry.getLazyComponent('WidgetEmptyInplace');\nconst JRCWidgetSlider = 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 } from 'react';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport { marked } from 'marked';\r\nimport { Registry } from '../../../registry/Registry';\r\n\r\nconst InputTextareaRaw = Registry.getLazyComponent('InputTextareaRaw');\r\nconst Modal = Registry.getLazyComponent('Modal');\r\n\r\nexport type MarkdownModalProps = {\r\n onInsert: (html: string) => void;\r\n open: boolean;\r\n close: () => void;\r\n};\r\n\r\nexport const MarkdownModal = ({ onInsert, open, close }: MarkdownModalProps) => {\r\n const intl = useIntl();\r\n const [markdown, setMarkdown] = React.useState('');\r\n\r\n const doClose = useCallback(() => {\r\n setMarkdown('');\r\n close();\r\n }, [close]);\r\n\r\n return (\r\n <Modal\r\n title={intl.formatMessage({ id: 'TINY_MCE_Insert_Markdown' })}\r\n open={open}\r\n closeHandler={doClose}\r\n enableClickAwayCloseModal\r\n buttons={[\r\n {\r\n children: <FormattedMessage id=\"GLOBAL_Cancel\" />,\r\n color: 'cancel',\r\n clickHandler: doClose,\r\n },\r\n {\r\n children: <FormattedMessage id=\"GLOBAL_Insert\" />,\r\n color: 'valid',\r\n disabled: !markdown,\r\n clickHandler: () => {\r\n onInsert(marked.parse(markdown, { async: false }).replace(/<br>/g, '<br><br>'));\r\n doClose();\r\n },\r\n },\r\n ]}>\r\n <InputTextareaRaw value={markdown} onChange={(e) => setMarkdown(e.target.value)} height={'400px'} />\r\n </Modal>\r\n );\r\n};\r\n","import { useMemo, useState } from 'react';\r\nimport { Editor, JTinyMCEExtensionsBuilders } from 'jamespot-react-components';\r\nimport { useIntl } from 'react-intl';\r\n\r\nexport const useMarkdownModal = (): {\r\n open: boolean;\r\n onInsert: (v: string) => void;\r\n close: () => void;\r\n ext: ReturnType<typeof JTinyMCEExtensionsBuilders.markdown>;\r\n isActive?: boolean;\r\n} => {\r\n const intl = useIntl();\r\n const [open, setOpen] = useState(false);\r\n const [editor, setEditor] = useState<Editor>();\r\n const ext = useMemo(\r\n () =>\r\n JTinyMCEExtensionsBuilders.markdown((ed) => {\r\n setEditor(ed);\r\n setOpen(true);\r\n }, intl),\r\n [intl],\r\n );\r\n return {\r\n open,\r\n onInsert: (v: string) => {\r\n editor?.execCommand('InsertHTML', false, v);\r\n },\r\n close: () => setOpen(false),\r\n ext,\r\n isActive: true,\r\n };\r\n};\r\n","import JRCore, { getTinyMCEMentionsQueries } from 'App';\nimport { MarkdownModal } from 'components/tinymce/extension/MarkdownModal';\nimport { useMarkdownModal } from 'hooks/useMarkdownModal';\nimport { Model, TinyMCE, Toast, Widget, updateWidgetContent } from 'jamespot-front-business';\nimport {\n WidgetArticleTextContent,\n WidgetArticleTextType,\n WidgetDisplayMode,\n WidgetsRootState,\n} from 'jamespot-user-api';\nimport React, { useCallback, useEffect, useMemo } from 'react';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport styled, { useTheme } from 'styled-components';\n\nconst WidgetArticleText = JRCore.registry.getLazyComponent('WidgetArticleText');\n\nconst CSSTextWrapper = styled.div`\n width: 100%;\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 {\n open,\n onInsert,\n close: closeMarkdownModal,\n ext: extMarkdown,\n isActive: isMarkdownActive,\n } = useMarkdownModal();\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 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 commonOptions: tinyMCECommonOptions,\n mentionsQueries: tinyMentionsQueries,\n }\n : undefined\n }\n mode={mode}\n onChange={(text) => {\n dispatch(updateWidgetContent<WidgetArticleTextContent>(uniqid, { text }));\n }}\n additionalExtensions={[extMarkdown]}\n />\n {isMarkdownActive && <MarkdownModal onInsert={onInsert} open={open} close={closeMarkdownModal} />}\n </CSSTextWrapper>\n );\n};\n","import React, { useEffect } from 'react';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport {\n WidgetArticleTitleContent,\n WidgetArticleTitleType,\n WidgetDisplayMode,\n WidgetsRootState,\n} from 'jamespot-user-api';\nimport { Widget, updateWidgetContent } from 'jamespot-front-business';\nimport styled from 'styled-components';\nimport { Registry } from '../../../registry/Registry';\n\nconst WidgetArticleTitle = Registry.getLazyComponent('WidgetArticleTitle');\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';\nimport styled from 'styled-components';\nimport { useDispatch } from 'react-redux';\nimport { Toast, Widget } from 'jamespot-front-business';\nimport { JRCIconButton } from 'jamespot-react-components';\nimport { Registry } from '../../../../registry/Registry';\n\nconst JRCButton = Registry.getLazyComponent('Button');\nconst JRCModalLayout = Registry.getLazyComponent('ModalLayout');\nconst JRCModalContent = 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 {\n WidgetsRootState,\n WidgetsName,\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 { 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 mode,\n }),\n );\n }, [uniqid, dispatch, name, 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 React from 'react';\n\nimport styled from 'styled-components';\n\nimport { JRCLoader } from 'jamespot-react-components';\n\nexport const Wrapper = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: rgba(255, 255, 255, 0.4);\n`;\n\nexport const WidgetIsPending = () => {\n return (\n <Wrapper>\n <JRCLoader size={'m'} />\n </Wrapper>\n );\n};\n","import { JRCButton, JRCInputText } from 'jamespot-react-components';\n\nimport React, { useState, useEffect } from 'react';\n\nimport { useForm } from 'react-hook-form';\nimport { useIntl } from 'react-intl';\nimport { useDispatch } from 'react-redux';\n\nimport styled from 'styled-components';\n\nexport const CSSWrapper = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n display: flex;\n flex-direction: row;\n fieldset {\n margin: 0.2rem !important;\n }\n`;\n\nexport const WidgetInlineInputText = ({\n placeholder,\n handleClick,\n}: {\n placeholder: string;\n handleClick: (label: string) => void;\n}) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const [label, setLabel] = useState<string>('');\n\n const { control, watch, reset } = useForm({\n defaultValues: { label },\n criteriaMode: 'all',\n });\n\n useEffect(() => {\n const subscription = watch((data) => {\n setLabel(data.label ?? '');\n });\n return () => subscription.unsubscribe();\n }, [watch, dispatch]);\n\n return (\n <CSSWrapper>\n <JRCInputText name={'label'} control={control} placeholder={placeholder} width=\"100%\" />\n <JRCButton\n label={intl.formatMessage({ id: 'GLOBAL_Confirm' })}\n disabled={!label.length}\n onClick={() => {\n handleClick(label);\n setLabel('');\n reset();\n }}\n />\n </CSSWrapper>\n );\n};\n","import { Toast, updateWidgetContent, Widget, WidgetEditor } from 'jamespot-front-business';\nimport { JRCFileViewer, JRCWidgetCheckListEntries } from 'jamespot-react-components';\nimport jApi, {\n CombinedWidgetContent,\n ensureWidgetCheckListType,\n jFileLittle,\n WidgetCheckListContent,\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 { WidgetFooterView } from './components/WidgetFooterView';\nimport { useWidgetRT } from '../hooks';\nimport { WidgetIsPending } from './components/WidgetIsPending';\nimport { WidgetInlineInputText } from './components/WidgetInlineInputText';\nimport { Registry } from '../../../registry/Registry';\nimport { RTProvider } from '../../RTProvider.component';\n\nconst WidgetCheckList = Registry.getLazyComponent('WidgetCheckList');\nconst WidgetCheckListEditor = 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 CSSWidgetCheckListWrapper = styled.div`\n position: relative;\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 const [isPending, setIsPending] = useState(false);\n\n const token = useSelector(Widget.selectors.selectToken, shallowEqual);\n\n const uri = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObjectUri(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 allRt = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectAllWidgetRTObject(state, widget.uniqid),\n shallowEqual,\n );\n\n const canEditCollaboration = useMemo(() => {\n return widgetObjectRights && widgetObjectRights.update;\n }, [widgetObjectRights]);\n\n const canAdministrate = useMemo(() => {\n return widgetObjectRights && widgetObjectRights.administrate;\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 = useCallback(\n (uniqid: string, content: WidgetCheckListContent) => {\n dispatch(updateWidgetContent(uniqid, content));\n },\n [dispatch],\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) => {\n if (!uri) return;\n if (isPending) return;\n setIsPending(true);\n jApi.widget\n .checkListRespond({\n uri,\n uniqid: id,\n index: index,\n })\n .then(() => {\n if (onWidgetUpdate) onWidgetUpdate();\n })\n .catch((err) => {\n onError(err.message);\n setIsPending(false);\n });\n };\n\n const handleReloadWidget = useCallback(() => {\n if (!uri) return;\n setIsPending(true);\n jApi.widget\n .getWidget<WidgetCheckListType>({ uri, uniqid })\n .then((response) => {\n if (ensureWidgetCheckListType(response.result)) {\n onChange(uniqid, response.result.content);\n }\n })\n .catch((err) => {\n return !err.aborted && onError;\n })\n .finally(() => setIsPending(false));\n }, [uniqid, onError, uri, onChange]);\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 mode,\n }),\n );\n };\n\n useEffect(() => {\n if (!token && mode === 'edit') {\n jApi.network.token().then((response) => {\n dispatch(Widget.slice.actions.setToken({ token: response.result }));\n });\n }\n }, [mode, token, dispatch]);\n\n useEffect(() => {\n const finalEntries: JRCWidgetCheckListEntries | undefined = widget.content.arr?.map((item) => ({\n text: item.title ?? '',\n file: item.file ?? undefined,\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 (!Array.isArray(allRt)) return;\n const lastRt = allRt.at(-1);\n if (!lastRt) return;\n if (!uri) return;\n\n if (lastRt.object.uri === uri && lastRt.uniqid === widget.uniqid) {\n if (lastRt.fn === 'check-list-response' || lastRt.fn === 'widget-update') {\n handleReloadWidget();\n }\n }\n }, [allRt, widget.uniqid, uri, onError, dispatch, handleReloadWidget]);\n\n const handleCollabAddEntry = (label: string) => {\n if (!widget.content.arr || !uri) return;\n\n const contentToUpdate = {\n ...widget.content,\n arr: [...widget.content.arr, { title: label, value: false }],\n };\n\n jApi.widget\n .updateWidget<CombinedWidgetContent>({\n uri,\n uniqid: widget.uniqid,\n content: contentToUpdate as CombinedWidgetContent,\n v2: true,\n })\n .then(() => onChange(widget.uniqid, contentToUpdate))\n .catch((err) => onError(err.errorMsg));\n };\n\n const files = useMemo(() => {\n if (!Array.isArray(widgetContent.arr)) return [];\n\n const fs: jFileLittle[] = [];\n widgetContent.arr.forEach((el) => {\n if (el.file) {\n fs.push(el.file);\n }\n });\n\n return fs;\n }, [widgetContent]);\n\n if (mode === 'edit') {\n if (inplace) {\n return (\n <CommentContainer>\n <WidgetCheckListEditor\n token={token}\n uniqid={uniqid}\n content={widgetContent}\n inplace={inplace}\n onChangeContent={onChange}\n onChangeWrapper={onChangeWrapper}\n handleChange={(content) =>\n dispatch(updateWidgetContent<WidgetCheckListContent>(widget.uniqid, content))\n }\n />\n </CommentContainer>\n );\n }\n }\n\n return (\n <RTProvider\n useRT={() => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useWidgetRT(widget.uniqid);\n }}>\n {entries && (\n <JRCFileViewer files={files} openWithOptions={[]}>\n {(open) => {\n return (\n <CSSWidgetCheckListWrapper key={widget.uniqid}>\n <WidgetCheckList\n limit={10}\n initialEntries={entries}\n onFileClick={(entry) => entry.id && open(entry.id)}\n onItemCheckListChange={(index) => handleCheckItem(widget.uniqid, index)}\n />\n {widgetContent.edit && (\n <WidgetInlineInputText\n handleClick={handleCollabAddEntry}\n placeholder={intl.formatMessage({\n id: 'COMMENT_WIDGET_CHECKLIST_Add_New_Task',\n })}\n />\n )}\n {canAdministrate && token && (\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 setIsPending(true);\n jApi.network\n .token()\n .then((response) => {\n dispatch(\n Widget.slice.actions.setToken({ token: response.result }),\n );\n openEditorPanel(response.result);\n })\n .finally(() => setIsPending(false));\n } else {\n openEditorPanel(token);\n }\n }}\n />\n )}\n {isPending && <WidgetIsPending />}\n </CSSWidgetCheckListWrapper>\n );\n }}\n </JRCFileViewer>\n )}\n </RTProvider>\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, FormattedMessage } from 'react-intl';\nimport jamespot, {\n DatasourceResultSort,\n DatasourceType,\n Format,\n WidgetDatasourceTableContent,\n WidgetDatasourceValues,\n WidgetDisplayMode,\n WidgetsName,\n WidgetTableColumn,\n} from 'jamespot-user-api';\nimport styled from 'styled-components';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { getVisibleColumns } from './utils';\nimport { FitType, useArticleRT } from '../hooks';\nimport { Registry } from '../../../registry/Registry';\nimport { useAppDispatch } from '../../../redux/store';\n\nconst JRCButton = Registry.getLazyComponent('Button');\nconst JRCHtml = Registry.getLazyComponent('Html');\nconst WidgetTable = Registry.getLazyComponent('WidgetTable');\nconst Loader = Registry.getLazyComponent('Loader');\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, FormattedMessage } from 'react-intl';\nimport jamespot, {\n Format,\n WidgetDatasourceValues,\n WidgetDisplayMode,\n WidgetExcelDatasourceTableContent,\n WidgetsName,\n WidgetTableColumn,\n} from 'jamespot-user-api';\nimport styled from 'styled-components';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { getVisibleColumns } from './utils';\nimport { Registry } from '../../../registry/Registry';\nimport { useAppDispatch } from '../../../redux/store';\n\nconst JRCButton = Registry.getLazyComponent('Button');\nconst JRCHtml = Registry.getLazyComponent('Html');\nconst WidgetTable = Registry.getLazyComponent('WidgetTable');\nconst Loader = Registry.getLazyComponent('Loader');\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 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, { WidgetDisplayMode, WidgetsRootState, WidgetPresenceContent } 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 content,\n}: {\n mode?: WidgetDisplayMode;\n uniqid: string;\n content: WidgetPresenceContent;\n}) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n\n const uri = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObjectUri(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<boolean>(() => !!(widgetObjectRights && widgetObjectRights.update), [widgetObjectRights]);\n\n const handleClosing = useCallback(() => {\n if (mode === 'edit' || !canUpdate || !uri) {\n return;\n }\n\n const contentToUpdate = { ...content, isClosed: true };\n\n jamespot.widget\n .updateWidget({\n uri,\n uniqid,\n content: contentToUpdate,\n v2: true,\n })\n .then(() => dispatch(Widget.slice.actions.updateWidget({ uniqid, content: contentToUpdate })))\n .catch(() => dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Error' })));\n }, [mode, uniqid, canUpdate, uri, content, dispatch]);\n\n return (\n <>\n {canUpdate && !content.isClosed && (\n <CSSPaddingMd>\n <CSSHorizontalAlign>\n <CSSHref onClick={handleClosing}>\n {intl.formatMessage({ id: 'WIDGET_Presence_Closing' })}\n </CSSHref>\n </CSSHorizontalAlign>\n </CSSPaddingMd>\n )}\n </>\n );\n};\n","import jApi, {\n WidgetDisplayMode,\n WidgetPresenceResponse,\n WidgetPresenceResponseUserList,\n WidgetPresenceType,\n WidgetsRootState,\n} from 'jamespot-user-api';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\nimport { Toast, updateWidgetContent, Widget } from 'jamespot-front-business';\nimport { useWidgetRT } from '../hooks';\nimport { WidgetFooterView } from './components/WidgetFooterView';\nimport { WidgetPresenceWrapperClosing } from './JRCWidgetPresenceWrapperClosing';\nimport { WidgetIsPending } from './components/WidgetIsPending';\nimport { Registry } from '../../../registry/Registry';\nimport { RTProvider } from '../../RTProvider.component';\n\nconst JRCWidgetPresence = Registry.getLazyComponent('WidgetPresence');\nconst ModalUserList = Registry.getLazyComponent('ModalUserList');\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\nexport const CSSWidgetPresenceIsClosed = styled.div`\n flex: 1;\n display: flex;\n padding: ${(props) => props.theme.space.md}px;\n border: 1px dashed ${(props) => props.theme.color.orange};\n justify-content: center;\n align-items: center;\n border-radius: ${(props) => props.theme.space.sm}px;\n margin: ${(props) => props.theme.space.sm}px;\n`;\n\nexport const JRCWidgetPresenceWrapper = ({\n widget,\n mode,\n}: {\n widget: WidgetPresenceType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const { limit, limitValue, closing, isClosed } = widget.content;\n const { uniqid } = widget;\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 [openUsersModal, setOpenUsersModal] = useState(false);\n const [usersListIndex, setUsersListIndex] = useState<number>();\n const [usersList, setUsersList] = useState<WidgetPresenceResponseUserList>();\n const ref = useRef<AbortController>(abortController);\n\n const uri = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObjectUri(state, uniqid),\n shallowEqual,\n );\n\n const allRt = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectAllWidgetRTObject(state, 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 canRespond = useMemo<boolean>(\n () => !(limit && limitValue && response.userAvailableTotal >= limitValue),\n [limit, limitValue, response.userAvailableTotal],\n );\n\n const lockedRespondHandler = useMemo(() => {\n return (closing && isClosed) || mode === 'edit';\n }, [closing, isClosed, mode]);\n\n const handleCancelRespond = useCallback(() => {\n if (!uri || lockedRespondHandler) return;\n if (!canRespond) {\n dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Limit_Response_Error' }));\n return;\n }\n\n setIsPendingResponse(true);\n jApi.widget\n .presenceCancel({ uri, uniqid })\n .catch(handleError)\n .finally(() => setIsPendingResponse(false));\n }, [dispatch, uniqid, handleError, uri, canRespond, lockedRespondHandler]);\n\n const handleRespond = useCallback(\n (value: 1 | 0) => {\n if (!uri || lockedRespondHandler) return;\n\n setIsPendingResponse(true);\n jApi.widget\n .presenceRespond(\n {\n uri,\n uniqid,\n value,\n },\n ref.current.signal,\n )\n .catch(handleError)\n .finally(() => setIsPendingResponse(false));\n },\n [uri, uniqid, handleError, lockedRespondHandler],\n );\n\n const handleResponse = useCallback(() => {\n if (mode === 'edit' || !uri) return;\n setIsPendingResponse(true);\n jApi.widget\n .presenceGetResponse({ uri, uniqid }, ref.current.signal)\n .then((response) => {\n setResponse(response.result);\n })\n .catch((err) => !err.aborted && handleError())\n .finally(() => setIsPendingResponse(false));\n }, [uri, handleError, uniqid, mode]);\n\n const handleLoadUsersList = (index: number, page?: number) => {\n if (!uri) return;\n jApi.widget\n .presenceGetResponseUserList({ uri, uniqid, index, page, limit: 8 }, ref.current.signal)\n .then((response) => {\n setUsersList({\n ...response.result,\n data: [...response.result.data],\n cnt: response.result.cnt,\n });\n })\n .catch((err) => {\n return !err.aborted && handleError;\n });\n };\n\n const handleReloadWidget = useCallback(() => {\n if (!uri) return;\n setIsPendingResponse(true);\n jApi.widget\n .getWidget<WidgetPresenceType>({ uri, uniqid })\n .then((response) => {\n dispatch(updateWidgetContent(uniqid, response.result));\n })\n .catch((err) => {\n return !err.aborted && handleError;\n })\n .finally(() => setIsPendingResponse(false));\n }, [dispatch, handleError, uri, uniqid]);\n\n useEffect(() => {\n const elm = ref.current;\n return () => {\n elm.abort();\n };\n }, []);\n\n useEffect(() => {\n handleResponse();\n }, [handleResponse]);\n\n useEffect(() => {\n if (!Array.isArray(allRt)) return;\n const lastRt = allRt.at(-1);\n if (!lastRt || !uri) return;\n\n if (lastRt.object.uri === uri && lastRt.uniqid === uniqid) {\n if (lastRt.fn === 'widget-presence-response') {\n handleResponse();\n }\n if (lastRt.fn === 'widget-update') {\n handleReloadWidget();\n }\n }\n }, [allRt, handleResponse, uniqid, uri, handleReloadWidget]);\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 handleOpenUsersModal={(index) => {\n setUsersList({\n limit: 0,\n page: 0,\n data: [],\n cnt: 0,\n });\n setUsersListIndex(index);\n handleLoadUsersList(index);\n setOpenUsersModal(true);\n }}\n />\n {closing && isClosed && (\n <CSSWidgetPresenceIsClosed>\n {intl.formatMessage({ id: 'WIDGET_Presence_Is_Closed' })}\n </CSSWidgetPresenceIsClosed>\n )}\n {closing && !isClosed && (\n <WidgetPresenceWrapperClosing mode={mode} uniqid={widget.uniqid} content={widget.content} />\n )}\n {mode === 'view' && <WidgetFooterView uniqid={widget.uniqid} name={widget.name} mode={mode} />}\n {isPendingResponse && <WidgetIsPending />}\n <ModalUserList\n open={openUsersModal}\n usersList={usersList}\n title={\n usersListIndex === 1\n ? intl.formatMessage({ id: 'WIDGET_Presence_On' })\n : intl.formatMessage({ id: 'WIDGET_Presence_Off' })\n }\n setOpen={setOpenUsersModal}\n onClose={() => {\n setUsersList({\n limit: 0,\n page: 0,\n data: [],\n cnt: 0,\n });\n }}\n handleLoadUsersList={(page) => {\n handleLoadUsersList(usersListIndex ?? 0, page);\n }}\n />\n </CSSWidgetPresenceWrapper>\n </RTProvider>\n );\n};\n","import { Toast, updateWidgetContent, Widget, WidgetEditor } from 'jamespot-front-business';\nimport jApi, {\n CombinedWidgetContent,\n jFileLittle,\n WidgetDisplayMode,\n WidgetQuickSurveyContent,\n WidgetQuickSurveyResponse,\n WidgetQuickSurveyResponseUserList,\n WidgetQuickSurveyType,\n WidgetsName,\n WidgetsRootState,\n} from 'jamespot-user-api';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\nimport { WidgetFooterView } from './components/WidgetFooterView';\nimport { WidgetInlineInputText } from './components/WidgetInlineInputText';\nimport { useWidgetRT } from '../hooks';\nimport { WidgetIsPending } from './components/WidgetIsPending';\nimport { JRCFileViewer } from 'jamespot-react-components';\nimport { Registry } from '../../../registry/Registry';\nimport { RTProvider } from '../../RTProvider.component';\n\nconst WidgetQuickSurvey = Registry.getLazyComponent('WidgetQuickSurvey');\nconst WidgetQuickSurveyEditor = Registry.getLazyComponent('WidgetQuickSurveyEditor');\nconst ModalUserList = Registry.getLazyComponent('ModalUserList');\n\nconst WrapperContainer = styled.div<{ withPadding?: boolean }>`\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: 14px;\n ${(props) => props.withPadding && `padding: 0 12px;`}\n padding-top: 16px;\n`;\n\ntype JRCWidgetQuickSurveyWrapperProps = {\n widget: WidgetQuickSurveyType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n};\n\nexport const JRCWidgetQuickSurveyWrapper = ({ widget, inplace, mode }: JRCWidgetQuickSurveyWrapperProps) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const { uniqid, content: widgetContent } = widget;\n const [response, setResponse] = useState<WidgetQuickSurveyResponse>({\n userResponses: [],\n totalRespondent: 0,\n totalResponse: 0,\n userLoggedResponses: [],\n });\n const [openUsersModal, setOpenUsersModal] = useState(false);\n const [isPending, setIsPending] = useState(false);\n const [usersListIndex, setUsersListIndex] = useState<number>();\n const [usersList, setUsersList] = useState<WidgetQuickSurveyResponseUserList>();\n\n const [abortController] = useState<AbortController>(new AbortController());\n const ref = useRef<AbortController>(abortController);\n\n const token = useSelector(Widget.selectors.selectToken, shallowEqual);\n\n const uri = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObjectUri(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 allRt = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectAllWidgetRTObject(state, widget.uniqid),\n shallowEqual,\n );\n\n const onChange = useCallback(\n (uniqid: string, content: WidgetQuickSurveyContent) => {\n dispatch(updateWidgetContent(uniqid, content));\n },\n [dispatch],\n );\n\n const onChangeWrapper = (content: { uniqid: string; title?: string }) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ ...content }));\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.QuickSurvey,\n }),\n );\n };\n\n const handleError = useCallback(\n () => dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Error' })),\n [dispatch],\n );\n\n const handleResponse = useCallback(\n (uniqid: string) => {\n if (mode === 'edit' || !uri) return;\n setIsPending(true);\n jApi.widget\n .quickSurveyGetResponse({ uri, uniqid }, ref.current.signal)\n .then((response) => {\n setResponse(response.result);\n })\n .catch((err) => {\n return !err.aborted && handleError;\n })\n .finally(() => setIsPending(false));\n },\n [handleError, uri, mode],\n );\n\n const handleWidgetGet = useCallback(() => {\n if (!uri) return;\n setIsPending(true);\n jApi.widget\n .getWidget<WidgetQuickSurveyType>({ uri, uniqid }, ref.current.signal)\n .then((response) => {\n onChange(uniqid, response.result.content);\n })\n .catch((err) => {\n return !err.aborted && handleError;\n })\n .finally(() => setIsPending(false));\n }, [uniqid, handleError, uri, onChange]);\n\n const handleRespond = (index: number) => {\n if (mode === 'edit' || !uri) return;\n setIsPending(true);\n jApi.widget\n .quickSurveyRespond({ uri, index, multi: widgetContent.multi ? 1 : 0, uniqid }, ref.current.signal)\n .then(() => {\n handleResponse(widget.uniqid);\n })\n .catch((err) => !err.aborted && handleError)\n .finally(() => setIsPending(false));\n };\n\n const handleCloseSurvey = () => {\n if (!uri) return;\n if (widgetContent.closing) {\n const finalContent = { ...widgetContent, isClosed: true } as CombinedWidgetContent;\n\n jApi.widget\n .updateWidget<WidgetQuickSurveyType>({\n uri,\n uniqid,\n content: finalContent,\n })\n .catch(() => {\n handleError();\n });\n }\n };\n\n const handleProgressBarClick = (index: number) => {\n handleRespond(index);\n };\n\n const handleAddQuickAnswer = (title: string) => {\n if (!uri) return;\n\n const newContent = {\n ...widgetContent,\n arr: [...(widgetContent.arr ?? []), { title }],\n } as CombinedWidgetContent;\n\n jApi.widget\n .quickSurveyAddEnty({ uri, uniqid, label: title })\n .then(() => {\n dispatch(Widget.slice.actions.updateWidget({ uniqid, content: newContent }));\n })\n .catch(handleError);\n };\n\n const handleLoadUsersList = (index: number, page?: number) => {\n if (!uri) return;\n jApi.widget\n .quickSurveyGetResponseUserList({ uri, uniqid, index, page, limit: 8 }, ref.current.signal)\n .then((response) => {\n setUsersList({\n ...response.result,\n data: [...response.result.data],\n cnt: response.result.cnt,\n });\n })\n .catch((err) => {\n return !err.aborted && handleError;\n });\n };\n\n const canUpdate = useMemo(() => widgetObjectRights && widgetObjectRights.update, [widgetObjectRights]);\n\n useEffect(() => {\n handleResponse(widget.uniqid);\n }, [handleResponse, widget.uniqid]);\n\n useEffect(() => {\n if (!Array.isArray(allRt)) return;\n const lastRt = allRt.at(-1);\n if (!lastRt) return;\n if (!uri) return;\n\n if (lastRt.object.uri === uri && lastRt.uniqid === widget.uniqid) {\n if (lastRt.fn === 'widget-quick-survey-response') {\n handleResponse(widget.uniqid);\n }\n if (lastRt.fn === 'widget-update') {\n handleWidgetGet();\n }\n }\n }, [allRt, uri, widget.uniqid, handleWidgetGet, handleResponse]);\n\n const files = useMemo(() => {\n if (!Array.isArray(widgetContent.arr)) return [];\n\n const fs: jFileLittle[] = [];\n widgetContent.arr.forEach((el) => {\n if (el.file) {\n fs.push(el.file);\n }\n });\n\n return fs;\n }, [widgetContent]);\n\n useEffect(() => {\n if (!token && mode === 'edit') {\n jApi.network.token().then((response) => {\n dispatch(Widget.slice.actions.setToken({ token: response.result }));\n });\n }\n }, [mode, token, dispatch]);\n\n if (mode === 'edit') {\n if (inplace) {\n return (\n <WrapperContainer withPadding={true}>\n <WidgetQuickSurveyEditor\n token={token}\n uniqid={uniqid}\n content={widget.content}\n onChangeContent={onChange}\n onChangeWrapper={onChangeWrapper}\n handleChange={(content) => onChange(uniqid, content)}\n inplace={inplace}\n />\n </WrapperContainer>\n );\n }\n }\n\n return (\n <RTProvider\n useRT={() => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useWidgetRT(widget.uniqid);\n }}>\n <WrapperContainer>\n <JRCFileViewer files={files} openWithOptions={[]}>\n {(open) => {\n return (\n <WidgetQuickSurvey\n limit={response.totalResponse ?? 0}\n values={widgetContent.arr ?? []}\n userResponses={response.userResponses}\n userHasAlreadyVoted={response.userLoggedResponses.length > 0}\n canCloseSurvey={widget.content.closing ?? false}\n isClosed={widget.content.isClosed ?? false}\n open={widget.content.open ?? false}\n anonymize={widget.content.anonymize ?? false}\n seeResponseAfter={widget.content.seeResponseAfter ?? false}\n canUpdate={canUpdate}\n handleClickFile={(entry) => entry.id && open(entry.id)}\n handleCloseSurvey={handleCloseSurvey}\n handleProgressBarClick={handleProgressBarClick}\n setOpenUsersModal={(index) => {\n setUsersListIndex(index);\n handleLoadUsersList(index);\n setOpenUsersModal(true);\n }}\n />\n );\n }}\n </JRCFileViewer>\n\n {widgetContent.open && (\n <WidgetInlineInputText\n handleClick={handleAddQuickAnswer}\n placeholder={intl.formatMessage({ id: 'FIELDS_Add_Option' })}\n />\n )}\n {canUpdate && (\n <WidgetFooterView\n uniqid={widget.uniqid}\n name={widget.name}\n collaborationRights={{\n update: !!canUpdate,\n }}\n mode={mode}\n handleOpenEditor={() => {\n if (!token) {\n setIsPending(true);\n jApi.network\n .token()\n .then((response) => {\n dispatch(Widget.slice.actions.setToken({ token: response.result }));\n openEditorPanel(response.result);\n })\n .finally(() => setIsPending(false));\n } else {\n openEditorPanel(token);\n }\n }}\n />\n )}\n {isPending && <WidgetIsPending />}\n <ModalUserList\n open={openUsersModal}\n usersList={usersList}\n title={widgetContent.arr?.[usersListIndex ?? 0]?.title ?? ''}\n setOpen={setOpenUsersModal}\n handleLoadUsersList={(page) => {\n handleLoadUsersList(usersListIndex ?? 0, page);\n }}\n onClose={() => {\n setUsersList({\n limit: 0,\n page: 0,\n data: [],\n cnt: 0,\n });\n }}\n />\n </WrapperContainer>\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';\nimport { JRCHtml } from 'jamespot-react-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 (\n <>\n {widgetWrapper && typeof widgetWrapper.title === 'string' && widgetWrapper.title.length !== 0 && (\n <CSSWidgetTitle>\n <JRCHtml __html={widgetWrapper.title ?? ''} />\n </CSSWidgetTitle>\n )}\n </>\n );\n};\n","import { Widget } from 'jamespot-front-business';\nimport { JRCInputText } from 'jamespot-react-components';\nimport { WidgetsRootState } from 'jamespot-user-api';\nimport React, { useEffect } from 'react';\n\nimport { useForm } from 'react-hook-form';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nexport const WidgetTitleEdit = ({ uniqid }: { uniqid: string }) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const widgetWrapperTitle = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid)?.title,\n shallowEqual,\n );\n\n const { control, watch } = useForm({\n defaultValues: { widgetTitle: widgetWrapperTitle },\n criteriaMode: 'all',\n });\n\n useEffect(() => {\n const subscription = watch((data) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ uniqid, title: 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 margin=\"0\"\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 { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { WidgetsName } from 'jamespot-user-api';\nimport { Registry } from '../../../../registry/Registry';\nimport { useAppDispatch } from '../../../../redux/store';\n\nconst JRCButton = Registry.getLazyComponent('Button');\nconst JRCModalLayout = Registry.getLazyComponent('ModalLayout');\nconst JRCModalContent = 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 fieldset:first-of-type {\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 mode: 'edit',\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 ensureWidgetQuickSurveyType,\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';\nimport { JRCWidgetQuickSurveyWrapper } from './wrapper/JRCWidgetQuickSurveyWrapper';\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, widget.name === 'widget-check-list')) {\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 if (ensureWidgetQuickSurveyType(widget)) {\n return (\n <CSSWidgetWithTitle>\n {mode === 'edit' ? (\n <WidgetHeaderEdit name={widget.name} uniqid={widget.uniqid} />\n ) : (\n <WidgetTitle uniqid={widget.uniqid} />\n )}\n <JRCWidgetQuickSurveyWrapper 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';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { WidgetVector, WidgetsRootState, WidgetDisplayMode, WidgetKeys } from 'jamespot-user-api';\nimport { WidgetEditor, Widget } from 'jamespot-front-business';\nimport WidgetWrapperCore from '../WidgetWrapperCore';\nimport { CSSWidgetLayer } from './WidgetLayer.style';\nimport { Registry } from '../../../registry/Registry';\n\nconst BETA_JRCDoubleClick = 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';\nimport { WidgetKeys, WidgetsRootState } from 'jamespot-user-api';\nimport { Widget } from 'jamespot-front-business';\nimport { Registry } from '../../registry/Registry';\n\nconst JRCLoader = Registry.getLazyComponent('Loader');\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';\nimport { WidgetWrapperProps } from 'jamespot-user-api';\nimport React from 'react';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual, useSelector } from 'react-redux';\nimport WidgetWrapperCore from '../widgets/WidgetWrapperCore';\nimport { CSSCommentsBlocWidgetWrapper } from './CommentsBloc.styles';\nimport { Registry } from '../../registry/Registry';\n\nconst JRCMessage = 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 React from 'react';\nimport { Widget } from 'jamespot-front-business';\nimport { jCommentList, WidgetDisplayMode, WidgetWrapperProps } from 'jamespot-user-api';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual, useSelector } from 'react-redux';\nimport { CSSCommentsBlocWidgetWrapper } from './CommentsBloc.styles';\nimport WidgetWrapperCore from '../widgets/WidgetWrapperCore';\nimport { Registry } from '../../registry/Registry';\n\nconst JRCMessage = 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 return (\n <JRCMessage\n variant={'info'}\n message={intl.formatMessage(\n { id: 'WIDGET_Cannot_Display' },\n { widget },\n )}\n />\n );\n }}\n />\n </CSSCommentsBlocWidgetWrapper>\n ),\n )}\n </>\n );\n};\n","import {\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, jCommentList, UpdateCommentParams, WidgetWrapperProps } from 'jamespot-user-api';\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 { CommentsBlocAddCommentWidgetsWrapper } from './comments/CommentsBlocAddCommentWidgetsWrapper';\nimport { CommentsBlocCommentWidgetsWrapper } from './comments/CommentsBlocCommentWidgetsWrapper';\nimport { Registry } from '../registry/Registry';\nimport { getTinyMCEMentionsQueries } from '../utils/tinymce';\nimport { useMarkdownModal } from '../hooks/useMarkdownModal';\nimport { MarkdownModal } from './tinymce/extension/MarkdownModal';\n\nconst JRCCommentsBloc = 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 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 const {\n open,\n onInsert,\n close: closeMarkdownModal,\n ext: extMarkdown,\n isActive: isMarkdownActive,\n } = useMarkdownModal();\n\n useCommentRT(articleId);\n\n useCommentsLikeRT(\n commentsList.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.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 // set comment token to our widget slice to be able to upload image inside our widgets\n dispatch(Widget.slice.actions.setToken({ token: res.result }));\n })\n .catch((e) => {\n onError(e.errorMsg);\n });\n }\n }, [onError, token, tokenLoading, dispatch]);\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, fetchToken, onError, token, widgetIds, widgets],\n );\n\n useEffect(() => {\n fetchToken();\n }, [fetchToken]);\n\n useEffect(() => {\n dispatch(Comment.actions.fetchComments({ idArticle: articleId }));\n }, [articleId, dispatch]);\n\n useEffect(() => {\n if (!commentsList) {\n return;\n }\n commentsList.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}\n loading={loading}\n token={token}\n comments={commentsList}\n onComment={onComment}\n onCommentUpdate={onCommentUpdate}\n onCommentDelete={onCommentDelete}\n isWidgetActive={\n !!(\n widgetHook?.isActive &&\n widgetHook?.create &&\n widgetHook?.autorize?.includes('comment')\n )\n }\n widgetListComponent={\n <WidgetList\n mode={'comment'}\n namespace={'comment'}\n onChange={(widget) => {\n setWidgets([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 setToken(undefined);\n fetchToken();\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 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 additionalExtensions={[extMarkdown]}\n />\n <EditorsPanel />\n </CommentsBlocWrapper>\n </>\n )}\n {isMarkdownActive && <MarkdownModal onInsert={onInsert} open={open} close={closeMarkdownModal} />}\n </>\n );\n};\n","import { useDispatch } from 'react-redux';\nimport { useEffect, useMemo } from 'react';\nimport { Comment } from 'jamespot-front-business';\nimport socket from '../utils/socket';\n\nconst useCommentsLikeRT = (idComments: number[] | undefined, idArticle: number) => {\n const dispatch = useDispatch();\n const reactSocket = useMemo(() => socket, []);\n const rtHandlers = useMemo(\n () => Comment.getCommentsLikeRTHandlers(dispatch, idComments, idArticle),\n [dispatch, idComments, idArticle],\n );\n\n useEffect(() => {\n rtHandlers.forEach((handler) => {\n reactSocket.onMessage(handler.namespace, handler.function, handler.handler);\n });\n return () => {\n rtHandlers.forEach((handler) => {\n reactSocket.offMessage(handler.namespace, handler.function, handler.handler);\n });\n };\n }, [rtHandlers, reactSocket]);\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: column;\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 { Registry } from '../../registry/Registry';\n\nconst JRCButton = Registry.getLazyComponent('Button');\nconst JRCIcon = 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 { 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 ensureWidgetQuickSurveyType,\n HookListType,\n WidgetArticleAttachmentContent,\n WidgetArticleButtonContent,\n WidgetArticleGalleryContent,\n WidgetArticleImageContent,\n WidgetArticleSliderContent,\n WidgetArticleTextContent,\n WidgetArticleTitleContent,\n WidgetCheckListContent,\n WidgetDatasourceTableContent,\n WidgetPresenceContent,\n WidgetQuickSurveyContent,\n WidgetsRootState,\n WidgetStateProps,\n} from 'jamespot-user-api';\nimport React from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { Registry } from '../../registry/Registry';\nimport { store } from '../../redux/initStore';\n\nconst WidgetArticleTitleEditor = Registry.getLazyComponent('WidgetArticleTitleEditor');\nconst WidgetArticleTextEditor = Registry.getLazyComponent('WidgetArticleTextEditor');\nconst WidgetArticleGalleryEditor = Registry.getLazyComponent('WidgetArticleGalleryEditor');\nconst WidgetArticleAttachmentEditor = Registry.getLazyComponent('WidgetArticleAttachmentEditor');\nconst WidgetArticleSliderEditor = Registry.getLazyComponent('WidgetArticleSliderEditor');\n\nconst WidgetArticleImageEditor = Registry.getLazyComponent('WidgetArticleImageEditor');\nconst WidgetButtonEditor = Registry.getLazyComponent('WidgetButtonEditor');\nconst WidgetCheckListEditor = Registry.getLazyComponent('WidgetCheckListEditor');\nconst WidgetQuickSurveyEditor = Registry.getLazyComponent('WidgetQuickSurveyEditor');\n\nconst WidgetDatasourceTableEditor = Registry.getLazyComponent('WidgetDatasourceTableEditor');\nconst WidgetExcelDatasourceTableEditor = Registry.getLazyComponent('WidgetExcelDatasourceTableEditor');\n\nconst WidgetPresenceEditor = Registry.getLazyComponent('WidgetPresenceEditor');\n\n/*\n Editor Factory\n*/\nexport const Editor = ({ uniqid }: { uniqid: string }) => {\n const dispatch = useDispatch();\n const token = useSelector(Widget.selectors.selectToken);\n const widgetWrapper = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidget(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(store.getState(), name)?.isActive;\n };\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 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 handleChange={(content) =>\n dispatch(updateWidgetContent<WidgetCheckListContent>(uniqid, content, false))\n }\n />\n );\n } else if (ensureWidgetQuickSurveyType(widget)) {\n return (\n <WidgetQuickSurveyEditor\n token={token}\n uniqid={widget.uniqid}\n content={widget.content}\n onChangeContent={(uniqid, content) => {\n dispatch(updateWidgetContent<WidgetQuickSurveyContent>(uniqid, content, false));\n }}\n onChangeWrapper={(content) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ ...content }));\n }}\n handleChange={(content) =>\n dispatch(updateWidgetContent<WidgetQuickSurveyContent>(uniqid, content, false))\n }\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';\nimport { useDispatch } from 'react-redux';\nimport { CSSEditorAction, CSSEditorMenuButton } from './style';\nimport { WidgetEditor } from 'jamespot-front-business';\nimport { Registry } from '../../registry/Registry';\n\nconst Icon = Registry.getLazyComponent('Icon');\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';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { WidgetEditor, Widget } from 'jamespot-front-business';\nimport { ensureWidgetWrapperProps, WidgetKeys, WidgetsRootState, WidgetWrapperProps } from 'jamespot-user-api';\nimport { useIntl } from 'react-intl';\nimport { CSSEditorWidget, CSSEditorWidgetLabel, CSSEditorWidgetOption } from './style';\nimport { Registry } from '../../registry/Registry';\nimport { WidgetList } from '../widgets/WidgetList/WidgetList';\n\nconst BETA_JRCDragAndDrop = Registry.getLazyComponent('BETA_DragAndDrop');\nconst JRCIcon = 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';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Widget } from 'jamespot-front-business';\nimport { WidgetsRootState } from 'jamespot-user-api';\nimport { useForm } from 'react-hook-form';\nimport { useIntl } from 'react-intl';\nimport { Registry } from '../../registry/Registry';\n\nconst JRCInputText = 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\n const { control, watch } = useForm({\n defaultValues: { text: wrapper?.title.replace(/&amp;/g, '&') ?? '' },\n criteriaMode: 'all',\n });\n\n React.useEffect(() => {\n const subscription = watch((data: any) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ uniqid, title: data.text }));\n });\n return () => subscription.unsubscribe();\n }, [watch, uniqid, dispatch]);\n\n return wrapper ? (\n <JRCInputText\n name={'text'}\n width=\"100%\"\n control={control}\n placeholder={intl.formatMessage({ id: 'WIDGET_Title' })}\n />\n ) : (\n <></>\n );\n};\n","import React from 'react';\nimport { shallowEqual, useSelector } from 'react-redux';\nimport { CSSEditorIsBusy } from '../style';\nimport { Widget } from 'jamespot-front-business';\nimport { WidgetsRootState } from 'jamespot-user-api';\nimport { Registry } from '../../../registry/Registry';\n\nconst Loader = Registry.getLazyComponent('Loader');\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 from 'react';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { Toast, Widget, WidgetEditor } from 'jamespot-front-business';\nimport jApi, { CombinedWidgetContent, WidgetDisplayMode, WidgetsRootState } from 'jamespot-user-api';\nimport { useIntl } from 'react-intl';\nimport { Registry } from '../../../registry/Registry';\n\nconst JRCButton = Registry.getLazyComponent('Button');\n\nexport const EditorSave = ({ uniqid, mode }: { uniqid: string; mode: WidgetDisplayMode }) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const wrapper = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid),\n shallowEqual,\n );\n const uri = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObjectUri(state, uniqid),\n shallowEqual,\n );\n\n const handleClick = () => {\n dispatch(WidgetEditor.slice.actions.flushEditor({ uniqid }));\n const content = wrapper && wrapper.widget && wrapper.widget.content;\n if (!uri || !wrapper || !content) return;\n if (mode == 'view') {\n jApi.widget\n .updateWidget<CombinedWidgetContent>({\n uri,\n uniqid: uniqid,\n title: wrapper.title,\n content: content as CombinedWidgetContent,\n v2: true,\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\n if (mode === 'edit') {\n dispatch(Widget.slice.actions.updateWidget({ uniqid, content: content as CombinedWidgetContent }));\n }\n };\n\n return <JRCButton onClick={handleClick}>{intl.formatMessage({ id: 'GLOBAL_Save' })}</JRCButton>;\n};\n","import React, { useEffect, useRef } from 'react';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { Editor } from './Editor';\nimport {\n CSSEditor,\n CSSEditorAction,\n CSSEditorContent,\n CSSEditorHeader,\n CSSEditorLabel,\n CSSEditorMask,\n CSSEditorMenu,\n CSSEditorMenuButton,\n} from './style';\nimport { EditorsRootState, Widget, WidgetEditor } from 'jamespot-front-business';\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\nimport { EditorSave } from './components/EditorSave';\nimport { Registry } from '../../registry/Registry';\n\nconst OVERRIDE_SAVE = ['widget-presence', 'widget-quick-survey', 'widget-check-list'];\n\nconst Icon = Registry.getLazyComponent('Icon');\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 {OVERRIDE_SAVE.includes(editor.name) && <EditorSave uniqid={uniqid} mode={editor.mode} />}\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 isActive = useMemo(() => {\n return J.hooks?.JIAHook?.isActive && J.debug['JIABETA'];\n }, []);\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, isActive } 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 { JRCInputTinyMCEProps } from 'jamespot-react-components';\nimport { FieldValues } from 'react-hook-form';\nimport { AIModal } from './extension/AIModal';\nimport { useMarkdownModal } from '../../hooks/useMarkdownModal';\nimport { MarkdownModal } from './extension/MarkdownModal';\nimport { Registry } from '../../registry/Registry';\nimport { tinymceCommonOptions } from '../../initTinymce';\nimport { getTinyMCEMentionsQueries } from '../../utils/tinymce';\nimport { useAI } from '../../hooks/useAI';\n\nconst JRCInputTinyMCE = 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, ext: extAI, isActive: isAIActive } = useAI();\n const {\n open,\n onInsert,\n close: closeMarkdownModal,\n ext: extMarkdown,\n isActive: isMarkdownActive,\n } = useMarkdownModal();\n\n const extArray = useMemo(() => {\n return [...(isMarkdownActive ? [extMarkdown] : []), ...(isAIActive ? [extAI] : [])];\n }, [extAI, extMarkdown, isAIActive, isMarkdownActive]);\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(() => tinymceCommonOptions, []);\n\n return (\n <>\n {commonOptions && (\n <JRCInputTinyMCE\n commonOptions={commonOptions}\n additionalExtensions={extArray}\n mentionsQueries={tinyMentionsQueries}\n {...props}\n />\n )}\n {isAIActive && <AIModal query={query} />}\n {isMarkdownActive && <MarkdownModal onInsert={onInsert} open={open} close={closeMarkdownModal} />}\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 { JRCInputTinyMCERawProps } from 'jamespot-react-components';\nimport { AIModal } from './extension/AIModal';\nimport { MarkdownModal } from './extension/MarkdownModal';\nimport { useMarkdownModal } from '../../hooks/useMarkdownModal';\nimport { Registry } from '../../registry/Registry';\nimport { tinymceCommonOptions } from '../../initTinymce';\nimport { getTinyMCEMentionsQueries } from '../../utils/tinymce';\nimport { useAI } from '../../hooks/useAI';\n\nconst JRCInputTinyMCERaw = 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, ext: extAI, isActive: isAIActive } = useAI();\n const {\n open,\n onInsert,\n close: closeMarkdownModal,\n ext: extMarkdown,\n isActive: isMarkdownActive,\n } = useMarkdownModal();\n\n const extArray = useMemo(() => {\n return [...(isMarkdownActive ? [extMarkdown] : []), ...(isAIActive ? [extAI] : [])];\n }, [extAI, extMarkdown, isAIActive, isMarkdownActive]);\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(() => tinymceCommonOptions, []);\n\n return (\n <>\n {commonOptions && (\n <JRCInputTinyMCERaw\n commonOptions={commonOptions}\n additionalExtensions={extArray}\n mentionsQueries={tinyMentionsQueries}\n {...props}\n />\n )}\n {isAIActive && <AIModal query={query} />}\n {isMarkdownActive && <MarkdownModal onInsert={onInsert} open={open} close={closeMarkdownModal} />}\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 { Registry } from '../../registry/Registry';\r\n\r\nconst JRCInputAudience = Registry.getLazyComponent('InputAudience');\r\nconst JRCMessage = Registry.getLazyComponent('Message');\r\nconst JRCModal = 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, useLocation } from 'react-router-dom';\nimport { useIntl } from 'react-intl';\nimport { useMemo } from 'react';\nimport { Registry } from '../registry/Registry';\nimport { TwoColLayoutProps } from './types';\n\nconst Container = Registry.getLazyComponent('Container');\nconst AppColumn = Registry.getLazyComponent('AppColumn');\nconst MainColumn = Registry.getLazyComponent('MainColumn');\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} flex={true}>\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","parentIsColumn","grey1","full","DashedFocusBorder","Flex","direction","JRCButton","JRCIconButton","WidgetList","mode","view","namespace","onChange","isOpen","setOpen","widgets","definition","WidgetsName","ArticleTitle","ArticleButton","CheckList","Presence","QuickSurvey","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","InputTextareaRaw","Modal","MarkdownModal","onInsert","close","markdown","setMarkdown","doClose","disabled","async","replace","value","e","useMarkdownModal","editor","setEditor","v","execCommand","ext","JTinyMCEExtensionsBuilders","ed","WidgetArticleText","registry","CSSTextWrapper","JRCWidgetArticleTextWrapper","isBusy","selectWidgetState","busy","tinyMCECommonOptions","selectTinyMCECommonOptions","models","selectAll","closeMarkdownModal","extMarkdown","isMarkdownActive","tinyMentionsQueries","getTinyMCEMentionsQueries","autoFocus","commonOptions","mentionsQueries","additionalExtensions","WidgetArticleTitle","ToolWrapper","Tool","JRCWidgetArticleTitleWrapper","heading","Toolbar","sizeValue","Footer","WidgetRemove","setIsOpen","removeWidget","flushWidget","WidgetFooterView","collaborationRights","handleOpenEditor","widgetObject","selectWidgetObject","widgetObjectRights","selectWidgetObjectRights","canUpdate","update","canDelete","delete","handleOnClick","ensureWidgetObjectHasMinimumProperties","WidgetIsPending","WidgetInlineInputText","placeholder","handleClick","setLabel","control","watch","reset","useForm","defaultValues","criteriaMode","subscription","data","unsubscribe","JRCInputText","WidgetCheckList","WidgetCheckListEditor","CommentContainer","border","CSSWidgetCheckListWrapper","JRCWidgetCheckListWrapper","onWidgetUpdate","widgetContent","entries","setEntries","isPending","setIsPending","selectWidgetObjectUri","allRt","selectAllWidgetRTObject","canEditCollaboration","canAdministrate","administrate","handleReloadWidget","getWidget","ensureWidgetCheckListType","err","aborted","finally","openEditorPanel","flushAllEditor","setToken","finalEntries","arr","checked","links","user","lastRt","at","object","fn","handleCollabAddEntry","contentToUpdate","updateWidget","v2","fs","forEach","el","push","onChangeContent","onChangeWrapper","updateWidgetWrapper","handleChange","useRT","JRCFileViewer","initialEntries","onFileClick","entry","onItemCheckListChange","checkListRespond","handleCheckItem","edit","getVisibleColumns","tableColumnsData","columns","toRet","filter","isVisible","find","JRCHtml","WidgetTable","Loader","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","get","Format","VIEW","model","sort","datasource","setTimeout","rows","tableDefaultSortOrder","tableDefaultSortName","__html","WidgetExcelDatasourceTableWrapper","ExcelDatasourceTable","CSSPaddingMd","CSSHref","secondary","CSSHorizontalAlign","WidgetPresenceWrapperClosing","handleClosing","isClosed","JRCWidgetPresence","ModalUserList","CSSWidgetPresenceWrapper","CSSWidgetPresenceIsClosed","orange","sm","JRCWidgetPresenceWrapper","limitValue","closing","userValue","userAvailableList","userUnavailableList","userAvailableTotal","userUnavailableTotal","isPendingResponse","setIsPendingResponse","abortController","AbortController","openUsersModal","setOpenUsersModal","usersListIndex","setUsersListIndex","usersList","setUsersList","handleError","canRespond","lockedRespondHandler","handleCancelRespond","presenceCancel","handleRespond","presenceRespond","signal","handleResponse","presenceGetResponse","handleLoadUsersList","page","presenceGetResponseUserList","cnt","elm","abort","handleClickAvailable","handleClickUnavailable","handleOpenUsersModal","onClose","WidgetQuickSurvey","WidgetQuickSurveyEditor","WrapperContainer","withPadding","JRCWidgetQuickSurveyWrapper","userResponses","totalRespondent","totalResponse","userLoggedResponses","quickSurveyGetResponse","handleWidgetGet","handleCloseSurvey","finalContent","handleProgressBarClick","quickSurveyRespond","multi","quickSurveyGetResponseUserList","values","userHasAlreadyVoted","canCloseSurvey","anonymize","seeResponseAfter","handleClickFile","newContent","quickSurveyAddEnty","CSSWidgetTitle","WidgetTitle","widgetWrapper","selectWidget","WidgetTitleEdit","widgetWrapperTitle","widgetTitle","margin","CSSModalFooter","CSSWidgetHeaderEdit","CSSWidgetHeaderEditTitle","CSSWidgetHeaderEditActions","WidgetHeaderEdit","handleRemoveWidget","CSSWidgetWithTitle","DisplayWidget","cannotDisplayComponent","ensureWidgetArticleButtonType","ensureWidgetArticleGalleryType","ensureWidgetArticleAttachmentType","ensureWidgetArticleImageType","ensureWidgetArticleSliderType","ensureWidgetArticleTitleType","ensureWidgetArticleTextType","ensureWidgetExcelDatasourceTableType","ensureWidgetDatasourceTableType","ensureWidgetPresenceType","ensureWidgetQuickSurveyType","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","tokenLoading","setTokenLoading","currentUser","widgetIds","selectWidgets","tinyMCEExtendedOptions","selectTinyMCEExtendedOptions","platformConfig","selectPlatformConfig","commentsList","commentList","driveHook","selectHook","fileBank","widgetHook","socialQuestionOptions","setSocialQuestionOptions","useCommentRT","idComments","idArticle","reactSocket","socket","rtHandlers","getCommentsLikeRTHandlers","handler","onMessage","function","offMessage","c","fetchComments","fetchToken","res","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","handlers","drive","filebank","socialAction","questionAnswer","onSelectResponse","responseId","isResolved","onUnselectResponse","StretchContainer","css","Container","stretch","Form","FormElm","onSubmit","FieldsetWrapper","DisplayForm","formRef","configuration","useDisplay","fields","forceMandatory","handleSubmit","formFn","formatValuesForSubmit","k","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","selectEditor","popup","flexDirection","marginTop","flushEditorPopup","WidgetArticleTitleEditor","WidgetArticleTextEditor","WidgetArticleGalleryEditor","WidgetArticleAttachmentEditor","WidgetArticleSliderEditor","WidgetArticleImageEditor","WidgetButtonEditor","WidgetDatasourceTableEditor","WidgetExcelDatasourceTableEditor","WidgetPresenceEditor","Editor","onSaveCallback","onSave","handleHookIsActive","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","EditorSave","OVERRIDE_SAVE","EditorWrapper","tab","setTab","panel","useWrapper","useEditor","useWidgets","CSSEditorPortalWrapper","CSSEditorPortalPopupWrapper","CSSEditorPortalRow","CSSEditorPortalFreeSpace","editors","selectEditors","Empty","useAI","setQuery","J","hooks","JIAHook","debug","PrepareAndSetQuery","fetch","Promise","AICapabilities","develop","summarize","tldr","en","es","formal","funny","jia","JRCInputTinyMCE","JRCInputTinyMCEWithExt","extAI","isAIActive","extArray","onMentionsQueryError","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":""}