jamespot-react-core 1.1.183 → 1.1.185

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/build/724.843c4f66e67a00f149d5.chunk.js +561 -0
  2. package/build/724.843c4f66e67a00f149d5.chunk.js.map +1 -0
  3. package/build/app.bundle.js +653 -641
  4. package/build/app.bundle.js.map +1 -1
  5. package/build/socket.sharedworker.36b2317446c7c433029e.js.map +1 -1
  6. package/build/src/ReactCore.d.ts +10 -4
  7. package/build/src/components/widgets/wrapper/JRCWidgetDatasourceTableWrapper.d.ts +1 -1
  8. package/build/src/components/widgets/wrapper/JRCWidgetExcelDatasourceTableWrapper.d.ts +1 -1
  9. package/build/src/components/widgets/wrapper/utils.d.ts +2 -2
  10. package/build/src/displayer/DisplayForm.component.d.ts +1 -2
  11. package/build/src/displayer/types.d.ts +1 -0
  12. package/build/src/displayer/useDisplay.d.ts +1 -2
  13. package/build/src/initTinymce.d.ts +2 -0
  14. package/build/src/redux/store.d.ts +2644 -0
  15. package/build/src/registry/CommonRegistry.d.ts +2 -0
  16. package/build/src/registry/CoreRegistry.d.ts +2 -0
  17. package/build/src/registry/GlobalRegistry.d.ts +13 -0
  18. package/build/src/registry/ReactCommonRegistry.d.ts +13 -0
  19. package/build/src/registry/ReactCoreRegistry.d.ts +13 -0
  20. package/build/src/registry/index.d.ts +1 -0
  21. package/build/src/registry/types.common.d.ts +14 -0
  22. package/build/src/registry/types.core.d.ts +14 -0
  23. package/build/src/types.d.ts +2 -1
  24. package/build/src/utils/socket.d.ts +1 -1
  25. package/build/src/utils/types.d.ts +4 -50
  26. package/build/src/utils/types.socket.d.ts +48 -0
  27. package/build/tsconfig.tsbuildinfo +1 -0
  28. package/package.json +10 -10
  29. package/build/724.4e810912c9eacc41e4bb.chunk.js +0 -559
  30. package/build/724.4e810912c9eacc41e4bb.chunk.js.map +0 -1
  31. package/build/src/registry/ReactRegistry.d.ts +0 -13
  32. package/build/src/registry/Registry.d.ts +0 -2
  33. package/build/src/registry/types.d.ts +0 -31
@@ -0,0 +1 @@
1
+ {"version":3,"file":"724.843c4f66e67a00f149d5.chunk.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/editors/const.ts","webpack://ReactCore/./src/components/editors/style.tsx","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/widgets/WidgetList/WidgetList.style.tsx","webpack://ReactCore/./src/components/widgets/WidgetList/WidgetList.tsx","webpack://ReactCore/./src/components/widgets/namespace.ts","webpack://ReactCore/./src/components/editors/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/widgets/components/WidgetEditorPanel.tsx","webpack://ReactCore/./src/components/widgets/components/WidgetUploader.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleAttachmentWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleButtonWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleGalleryWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleImageWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleSliderWrapper.tsx","webpack://ReactCore/./src/hooks/useMarkdownModal.ts","webpack://ReactCore/./src/components/tinymce/extension/MarkdownModal.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/components/CommentsBloc.tsx","webpack://ReactCore/./src/hooks/useCommentsLikeRT.ts","webpack://ReactCore/./src/displayer/DisplayForm.component.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 { JRCAvatar, 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 { commonComponentsRegistry } from '../registry/CommonRegistry';\r\n\r\nconst JRCIcon = commonComponentsRegistry.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 { commonComponentsRegistry } from '../registry/CommonRegistry';\n\nconst JRCFlexBox = commonComponentsRegistry.getLazyComponent('FlexBox');\nconst JRCModalContent = commonComponentsRegistry.getLazyComponent('ModalContent');\nconst JRCModalLayout = commonComponentsRegistry.getLazyComponent('ModalLayout');\nconst JRCStyledHref = commonComponentsRegistry.getLazyComponent('StyledHref');\nconst JRCTooltip = commonComponentsRegistry.getLazyComponent('Tooltip');\nconst JRCTypography = commonComponentsRegistry.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 { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { JiaTextEnhanceQuery } from '../../../hooks/useAI';\n\nconst JRCLoader = commonComponentsRegistry.getLazyComponent('Loader');\nconst JRCModalContent = commonComponentsRegistry.getLazyComponent('ModalContent');\nconst JRCModalLayout = commonComponentsRegistry.getLazyComponent('ModalLayout');\nconst JRCTypography = commonComponentsRegistry.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","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 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","import React from 'react';\n\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { CSSEditorAction, CSSEditorHeader, CSSEditorLabel, CSSEditorMenuButton } from './style';\nimport { commonComponentsRegistry } from '../../registry/CommonRegistry';\nimport { EditorsRootState, WidgetEditor } from 'jamespot-front-business';\n\nconst JRCButton = commonComponentsRegistry.getLazyComponent('Button');\nconst JRCIcon = commonComponentsRegistry.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 { commonComponentsRegistry } from '../../registry/CommonRegistry';\nimport { Utils } from 'jamespot-react-components';\nimport { store } from '../../redux/initStore';\n\nconst WidgetArticleTitleEditor = commonComponentsRegistry.getLazyComponent('WidgetArticleTitleEditor');\nconst WidgetArticleTextEditor = commonComponentsRegistry.getLazyComponent('WidgetArticleTextEditor');\nconst WidgetArticleGalleryEditor = commonComponentsRegistry.getLazyComponent('WidgetArticleGalleryEditor');\nconst WidgetArticleAttachmentEditor = commonComponentsRegistry.getLazyComponent('WidgetArticleAttachmentEditor');\nconst WidgetArticleSliderEditor = commonComponentsRegistry.getLazyComponent('WidgetArticleSliderEditor');\n\nconst WidgetArticleImageEditor = commonComponentsRegistry.getLazyComponent('WidgetArticleImageEditor');\nconst WidgetButtonEditor = commonComponentsRegistry.getLazyComponent('WidgetButtonEditor');\nconst WidgetCheckListEditor = commonComponentsRegistry.getLazyComponent('WidgetCheckListEditor');\nconst WidgetQuickSurveyEditor = commonComponentsRegistry.getLazyComponent('WidgetQuickSurveyEditor');\n\nconst WidgetDatasourceTableEditor = commonComponentsRegistry.getLazyComponent('WidgetDatasourceTableEditor');\nconst WidgetExcelDatasourceTableEditor = commonComponentsRegistry.getLazyComponent('WidgetExcelDatasourceTableEditor');\n\nconst WidgetPresenceEditor = commonComponentsRegistry.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={{\n ...widget.content,\n arr: widget.content.arr?.map((w) => ({\n ...w,\n title: Utils.html.htmlDecodeSpecialChars(w.title),\n })),\n }}\n onChangeContent={(uniqid, content) => {\n dispatch(updateWidgetContent(uniqid, content, false));\n }}\n onChangeWrapper={(content) => {\n dispatch(\n Widget.slice.actions.updateWidgetWrapper({\n ...content,\n title: Utils.html.htmlDecodeSpecialChars(content.title),\n }),\n );\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 { commonComponentsRegistry } from '../../registry/CommonRegistry';\n\nconst Icon = commonComponentsRegistry.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 { 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 { commonComponentsRegistry } from '../../../registry/CommonRegistry';\n\nconst JRCButton = commonComponentsRegistry.getLazyComponent('Button');\nconst JRCModalLayout = commonComponentsRegistry.getLazyComponent('ModalLayout');\nconst JRCModalContent = commonComponentsRegistry.getLazyComponent('ModalContent');\nconst JRCTooltip = commonComponentsRegistry.getLazyComponent('Tooltip');\nconst JRCIconButton = commonComponentsRegistry.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 { 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 { commonComponentsRegistry } from '../../registry/CommonRegistry';\nimport { WidgetList } from '../widgets/WidgetList/WidgetList';\n\nconst BETA_JRCDragAndDrop = commonComponentsRegistry.getLazyComponent('BETA_DragAndDrop');\nconst JRCIcon = commonComponentsRegistry.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 { commonComponentsRegistry } from '../../registry/CommonRegistry';\n\nconst JRCInputText = commonComponentsRegistry.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 { commonComponentsRegistry } from '../../../registry/CommonRegistry';\n\nconst Loader = commonComponentsRegistry.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 { commonComponentsRegistry } from '../../../registry/CommonRegistry';\n\nconst JRCButton = commonComponentsRegistry.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 { commonComponentsRegistry } from '../../registry/CommonRegistry';\n\nconst OVERRIDE_SAVE = ['widget-presence', 'widget-quick-survey', 'widget-check-list'];\n\nconst Icon = commonComponentsRegistry.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 React, { useMemo } from 'react';\nimport { createPortal } from 'react-dom';\nimport { v4 as uuidv4 } from 'uuid';\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { EditorsPortal } from '../../editors/EditorsPortal';\n\nconst JRCThemeProvider = commonComponentsRegistry.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 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 { commonComponentsRegistry } from '../../../registry/CommonRegistry';\n\nconst JRCInputFileAdvancedRaw = commonComponentsRegistry.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 { commonComponentsRegistry } from '../../../registry/CommonRegistry';\n\nconst WidgetAttachment = commonComponentsRegistry.getLazyComponent('WidgetAttachment');\nconst JRCWidgetEmptyInplace = commonComponentsRegistry.getLazyComponent('WidgetEmptyInplace');\nconst FileViewer = commonComponentsRegistry.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 { commonComponentsRegistry } from '../../../registry/CommonRegistry';\n\nconst JRCWidgetButton = commonComponentsRegistry.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 { commonComponentsRegistry } from '../../../registry/CommonRegistry';\n\nconst JRCWidgetArticleGallery = commonComponentsRegistry.getLazyComponent('WidgetArticleGallery');\nconst JRCWidgetEmptyInplace = commonComponentsRegistry.getLazyComponent('WidgetEmptyInplace');\nconst FileViewer = commonComponentsRegistry.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 = commonComponentsRegistry.getLazyComponent('WidgetImage');\nconst FileViewer = commonComponentsRegistry.getLazyComponent('FileViewer');\nconst JRCWidgetEmptyInplace = commonComponentsRegistry.getLazyComponent('WidgetEmptyInplace');\n\nimport styled from 'styled-components';\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\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 { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { useAppDispatch } from '../../../redux/store';\n\nconst FileViewer = commonComponentsRegistry.getLazyComponent('FileViewer');\nconst JRCWidgetEmptyInplace = commonComponentsRegistry.getLazyComponent('WidgetEmptyInplace');\nconst JRCWidgetSlider = commonComponentsRegistry.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 { 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 React, { useCallback } from 'react';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport { marked } from 'marked';\r\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\r\n\r\nconst InputTextareaRaw = commonComponentsRegistry.getLazyComponent('InputTextareaRaw');\r\nconst Modal = commonComponentsRegistry.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 { 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';\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { useMarkdownModal } from '../../../hooks/useMarkdownModal';\nimport { getTinyMCEMentionsQueries } from '../../../utils/tinymce';\nimport { MarkdownModal } from '../../tinymce/extension/MarkdownModal';\n\nconst WidgetArticleText = commonComponentsRegistry.getLazyComponent('WidgetArticleText');\n\nconst CSSTextWrapper = styled.div`\n width: 100%;\n cursor: text;\n\n p {\n word-wrap: break-word;\n }\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 { commonComponentsRegistry } from '../../../registry/CommonRegistry';\n\nconst WidgetArticleTitle = commonComponentsRegistry.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 { commonComponentsRegistry } from '../../../../registry/CommonRegistry';\n\nconst JRCButton = commonComponentsRegistry.getLazyComponent('Button');\nconst JRCModalLayout = commonComponentsRegistry.getLazyComponent('ModalLayout');\nconst JRCModalContent = commonComponentsRegistry.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, Utils } 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 { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { RTProvider } from '../../RTProvider.component';\n\nconst WidgetCheckList = commonComponentsRegistry.getLazyComponent('WidgetCheckList');\nconst WidgetCheckListEditor = commonComponentsRegistry.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={{\n ...widgetContent,\n arr: widgetContent.arr?.map((w) => ({\n ...w,\n title: Utils.html.htmlDecodeSpecialChars(w.title),\n })),\n }}\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 { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { useAppDispatch } from '../../../redux/store';\n\nconst JRCButton = commonComponentsRegistry.getLazyComponent('Button');\nconst JRCHtml = commonComponentsRegistry.getLazyComponent('Html');\nconst WidgetTable = commonComponentsRegistry.getLazyComponent('WidgetTable');\nconst Loader = commonComponentsRegistry.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 { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { useAppDispatch } from '../../../redux/store';\n\nconst JRCButton = commonComponentsRegistry.getLazyComponent('Button');\nconst JRCHtml = commonComponentsRegistry.getLazyComponent('Html');\nconst WidgetTable = commonComponentsRegistry.getLazyComponent('WidgetTable');\nconst Loader = commonComponentsRegistry.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 { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { RTProvider } from '../../RTProvider.component';\n\nconst JRCWidgetPresence = commonComponentsRegistry.getLazyComponent('WidgetPresence');\nconst ModalUserList = commonComponentsRegistry.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 { commonComponentsRegistry } from '../../../registry/CommonRegistry';\nimport { RTProvider } from '../../RTProvider.component';\n\nconst WidgetQuickSurvey = commonComponentsRegistry.getLazyComponent('WidgetQuickSurvey');\nconst WidgetQuickSurveyEditor = commonComponentsRegistry.getLazyComponent('WidgetQuickSurveyEditor');\nconst ModalUserList = commonComponentsRegistry.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 { commonComponentsRegistry } from '../../../../registry/CommonRegistry';\nimport { useAppDispatch } from '../../../../redux/store';\n\nconst JRCButton = commonComponentsRegistry.getLazyComponent('Button');\nconst JRCModalLayout = commonComponentsRegistry.getLazyComponent('ModalLayout');\nconst JRCModalContent = commonComponentsRegistry.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';\n// eslint-disable-next-line import/no-cycle\nimport WidgetWrapperCore from '../WidgetWrapperCore';\nimport { CSSWidgetLayer } from './WidgetLayer.style';\nimport { commonComponentsRegistry } from '../../../registry/CommonRegistry';\n\nconst BETA_JRCDoubleClick = commonComponentsRegistry.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 { commonComponentsRegistry } from '../../registry/CommonRegistry';\n\nconst JRCLoader = commonComponentsRegistry.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';\n// eslint-disable-next-line import/no-cycle\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 { commonComponentsRegistry } from '../../registry/CommonRegistry';\n\nconst JRCMessage = commonComponentsRegistry.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 { commonComponentsRegistry } from '../../registry/CommonRegistry';\n\nconst JRCMessage = commonComponentsRegistry.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 { commonComponentsRegistry } from '../registry/CommonRegistry';\nimport { getTinyMCEMentionsQueries } from '../utils/tinymce';\nimport { useMarkdownModal } from '../hooks/useMarkdownModal';\nimport { MarkdownModal } from './tinymce/extension/MarkdownModal';\n\nconst JRCCommentsBloc = commonComponentsRegistry.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 dispatch(Comment.actions.deleteComment({ idComment, idArticle: articleId }));\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 { DisplayFormFieldsConfig, DisplayFormRef } 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 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 * 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 { commonComponentsRegistry } from '../../registry/CommonRegistry';\nimport { tinymceCommonOptions } from '../../initTinymce';\nimport { getTinyMCEMentionsQueries } from '../../utils/tinymce';\nimport { useAI } from '../../hooks/useAI';\n\nconst JRCInputTinyMCE = commonComponentsRegistry.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 { commonComponentsRegistry } from '../../registry/CommonRegistry';\nimport { tinymceCommonOptions } from '../../initTinymce';\nimport { getTinyMCEMentionsQueries } from '../../utils/tinymce';\nimport { useAI } from '../../hooks/useAI';\n\nconst JRCInputTinyMCERaw = commonComponentsRegistry.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 { commonComponentsRegistry } from '../../registry/CommonRegistry';\r\n\r\nconst JRCInputAudience = commonComponentsRegistry.getLazyComponent('InputAudience');\r\nconst JRCMessage = commonComponentsRegistry.getLazyComponent('Message');\r\nconst JRCModal = commonComponentsRegistry.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 { commonComponentsRegistry } from '../registry/CommonRegistry';\nimport { TwoColLayoutProps } from './types';\n\nconst Container = commonComponentsRegistry.getLazyComponent('Container');\nconst AppColumn = commonComponentsRegistry.getLazyComponent('AppColumn');\nconst MainColumn = commonComponentsRegistry.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":["JRCIcon","getLazyComponent","Avatar","props","theme","useTheme","networkPublic","useSelector","selectors","selectNetworkPublic","uri","name","size","color","primary","variant","JRCAvatar","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","CSSEditorPortal","isActive","CSSEditorHeader","grey2","CSSEditorAction","CSSEditorLabel","CSSEditorMask","EDITOR_WIDTH","CSSEditor","CSSEditorContent","CSSEditorIsBusy","CSSEditorIsLocked","CSSEditorMenu","CSSEditorMenuButton","grey1","CSSEditorWidget","grey0","CSSEditorWidgetLabel","CSSEditorWidgetOption","JRCButton","EditorPopup","uniqid","dispatch","useDispatch","editor","state","selectEditor","popup","view","style","flex","display","flexDirection","backgroundColor","marginTop","slice","actions","flushEditorPopup","WidgetArticleTitleEditor","WidgetArticleTextEditor","WidgetArticleGalleryEditor","WidgetArticleAttachmentEditor","WidgetArticleSliderEditor","WidgetArticleImageEditor","WidgetButtonEditor","WidgetCheckListEditor","WidgetQuickSurveyEditor","WidgetDatasourceTableEditor","WidgetExcelDatasourceTableEditor","WidgetPresenceEditor","Editor","token","selectToken","widgetWrapper","selectWidget","shallowEqual","onSaveCallback","onSave","handleHookIsActive","selectHook","getState","content","updateWidget","flushEditor","onStateChange","states","setWidgetState","onOpen","registerEditorPopup","widget","ensureWidgetArticleButtonType","onChange","ensureWidgetArticleGalleryType","ensureWidgetArticleAttachmentType","ensureWidgetArticleImageType","ensureWidgetArticleSliderType","slides","loop","useDots","ensureWidgetArticleTitleType","ensureWidgetArticleTextType","ensureWidgetPresenceType","ensureWidgetCheckListType","arr","w","html","htmlDecodeSpecialChars","onChangeContent","onChangeWrapper","updateWidgetWrapper","handleChange","ensureWidgetQuickSurveyType","ensureWidgetExcelDatasourceTableType","hook","handlers","jamespot","datasource","network","filebank","wedoc","handleStart","busy","handleCatch","err","label","handleFinally","override","onError","ensureWidgetDatasourceTableType","application","Icon","EditorPosition","setEditorPosition","CSSSquareWidgetWrapper","CSSSquareWidget","available","CSSWidgetButton","height","CSSWrapWidgetWrapper","column","CSSWrapTitle","CSSWrapWidget","parentIsColumn","full","DashedFocusBorder","Flex","direction","JRCIconButton","WidgetList","mode","namespace","isOpen","setOpen","widgets","definition","WidgetsName","ArticleTitle","ArticleButton","CheckList","Presence","QuickSurvey","ArticleText","ArticleImage","ArticleSlider","ArticleAttachment","getBuilderWidgets","args","portalId","factory","FormattedMessage","src","img","className","minWidth","WidgetModeArticle","WidgetModeComment","calcHeight","useMemo","Math","ceil","bg","bgHover","iconSize","icon","BETA_JRCDragAndDrop","EditorTabWidgets","Layers","def","registerEditor","filter","_","n","ensureWidgetWrapperProps","console","layers","ids","onDrag","renderEl","layer","EditorWidgetLayer","elms","registerLayer","EditorWidgetLayerLock","updateLayer","locked","EditorWidgetLayerVisibility","visible","EditorWidgetLayerFlush","layerId","flushLayer","alignItems","JRCInputText","EditorTabWrapper","wrapper","control","watch","useForm","defaultValues","replace","criteriaMode","subscription","data","unsubscribe","width","placeholder","Loader","EditorIsBusy","isBusy","selectWidgetState","EditorIsInitialize","initialized","EditorIsLocked","EditorSave","selectWidgetObjectUri","v2","e","OVERRIDE_SAVE","EditorWrapper","ref","useRef","tab","setTab","setTimeout","current","panel","useWrapper","useEditor","useWidgets","includes","inset","opacity","CSSEditorPortalWrapper","CSSEditorPortalPopupWrapper","CSSEditorPortalRow","CSSEditorPortalFreeSpace","EditorsPortal","editors","selectEditors","JRCThemeProvider","EditorsPanel","portalDiv","document","getElementById","portal","parent","createElement","appendChild","createPortalElement","createPortal","JRCInputFileAdvancedRaw","CSSHidden","WidgetUploader","initialFiles","initialClick","multiple","accept","onUploadStart","onUploadEnd","onUploadSuccess","uploadRef","total","setTotal","files","setFiles","click","totalFile","prevTotal","fileResponse","prevFiles","WidgetAttachment","JRCWidgetEmptyInplace","FileViewer","CSSWrapper","JRCWidgetArticleAttachmentWrapper","inplace","message","mounted","empty","onlyOffice","selectById","option","file","getAccessHash","Error","hash","idFile","window","getWedocFilePath","wedocWindowOpen","openWithOptions","condition","f","mimetype","options","Array","isArray","url","JRCWidgetButton","CSSButtonWrapper","CSSPointer","clickable","JRCWidgetArticleButtonWrapper","buttonSize","borderRadius","JRCWidgetArticleGallery","CSSImagePointer","JRCWidgetArticleGalleryWrapper","maxWidth","WidgetImage","CSSImageWrapperHover","mockFileLittle","mainType","dateCreation","str","Date","parse","isNaN","getTime","JRCWidgetArticleImageWrapper","useFilter","setUri","formatImgUrl","now","from","path","JRCWidgetSlider","Wrapper","JRCWidgetArticleSliderWrapper","dynamicWidth","setDynamicWidth","fileViewerFiles","slide","handleResize","offsetWidth","addEventListener","removeEventListener","isEditable","handleEditor","startAt","onClickSlide","useMarkdownModal","setEditor","onInsert","v","execCommand","close","ext","JTinyMCEExtensionsBuilders","markdown","ed","InputTextareaRaw","Modal","MarkdownModal","setMarkdown","doClose","disabled","async","value","WidgetArticleText","CSSTextWrapper","JRCWidgetArticleTextWrapper","tinyMCECommonOptions","selectTinyMCECommonOptions","models","selectAll","closeMarkdownModal","extMarkdown","isMarkdownActive","tinyMentionsQueries","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","handleClick","setLabel","reset","WidgetCheckList","CommentContainer","border","CSSWidgetCheckListWrapper","JRCWidgetCheckListWrapper","onWidgetUpdate","widgetContent","entries","setEntries","isPending","setIsPending","allRt","selectAllWidgetRTObject","canEditCollaboration","canAdministrate","administrate","handleReloadWidget","getWidget","aborted","finally","openEditorPanel","flushAllEditor","setToken","finalEntries","checked","links","user","lastRt","at","object","fn","handleCollabAddEntry","contentToUpdate","fs","forEach","el","push","useRT","JRCFileViewer","initialEntries","onFileClick","entry","onItemCheckListChange","checkListRespond","handleCheckItem","edit","getVisibleColumns","tableColumnsData","columns","toRet","isVisible","find","JRCHtml","WidgetTable","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","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","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","WidgetTitleEdit","widgetWrapperTitle","widgetTitle","margin","CSSModalFooter","CSSWidgetHeaderEdit","CSSWidgetHeaderEditTitle","CSSWidgetHeaderEditActions","WidgetHeaderEdit","handleRemoveWidget","CSSWidgetWithTitle","DisplayWidget","cannotDisplayComponent","CSSWidgetWrapper","grey3","font","CSSWidgetLayer","pointerEvents","BETA_JRCDoubleClick","WidgetLayer","Layer","LayerWidget","top","left","x","DraggableHandler","onMouseUp","onDoubleTap","mouseIsDown","setMouseDown","mouse","setMouse","start","setStart","child","setChild","handleMouseDown","event","nativeEvent","clientX","clientY","handleMouseMove","dx","dy","handleMouseUp","onMouseDown","WidgetState","justifyContent","hover","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","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","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","drive","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","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":""}