jamespot-react-core 1.1.151 → 1.1.152

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"560.bundle.js","mappings":"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","sources":["webpack://ReactCore/./src/components/widgets/WidgetList/WidgetList.style.tsx","webpack://ReactCore/./src/components/widgets/WidgetList/WidgetList.tsx","webpack://ReactCore/./src/components/widgets/namespace.ts","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetApiWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/utils.ts","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetDatasourceTableWrapper.tsx","webpack://ReactCore/./src/components/widgets/components/WidgetUploader.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleAttachmentWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleButtonWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleGalleryWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleImageWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleSliderWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleTextWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleTitleWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetCheckListWrapper.tsx","webpack://ReactCore/./src/components/widgets/Widget.tsx","webpack://ReactCore/./src/components/widgets/WidgetLayer/WidgetLayer.style.tsx","webpack://ReactCore/./src/components/widgets/WidgetLayer/WidgetLayer.tsx","webpack://ReactCore/./src/components/widgets/WidgetState.tsx","webpack://ReactCore/./src/components/widgets/Widget.style.tsx","webpack://ReactCore/./src/components/widgets/WidgetWrapperCore.tsx","webpack://ReactCore/./node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/rng.js","webpack://ReactCore/./node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/regex.js","webpack://ReactCore/./node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/stringify.js","webpack://ReactCore/./node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/validate.js","webpack://ReactCore/./node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/v4.js","webpack://ReactCore/./src/components/widgets/components/WidgetEditorPanel.tsx","webpack://ReactCore/./src/components/CommentsBloc.tsx","webpack://ReactCore/./src/hooks/useCommentRT.ts","webpack://ReactCore/./src/hooks/useCommentsLikeRT.ts","webpack://ReactCore/./src/components/Empty.tsx","webpack://ReactCore/./src/components/TwoColLayout.tsx","webpack://ReactCore/./src/components/editors/style.tsx","webpack://ReactCore/./src/components/editors/const.ts","webpack://ReactCore/./src/components/editors/EditorPopup.tsx","webpack://ReactCore/./src/components/editors/Editor.tsx","webpack://ReactCore/./src/components/editors/EditorTabWidgets.tsx","webpack://ReactCore/./src/components/editors/EditorTabWrapper.tsx","webpack://ReactCore/./src/components/editors/EditorWrapper.tsx","webpack://ReactCore/./src/components/editors/EditorsPortal.tsx","webpack://ReactCore/./src/hooks/useAI.ts","webpack://ReactCore/./src/components/tinymce/extension/AIModal.tsx","webpack://ReactCore/./src/components/tinymce/JRCInputTinyMCEWithExt.tsx","webpack://ReactCore/./src/components/tinymce/JRCInputTinyMCEWithExtRaw.tsx","webpack://ReactCore/./src/displayer/DisplayForm.component.tsx"],"sourcesContent":["import styled from 'styled-components';\n\nexport const CSSSquareWidgetWrapper = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n gap: 10px;\n justify-content: center;\n`;\n\nexport const CSSSquareWidget = styled.div<{ available: boolean }>`\n border: 1px solid ${(props) => props.theme.color.grey2};\n border-radius: 8px;\n cursor: pointer;\n padding: 12px;\n position: relative;\n opacity: ${(props) => (props.available ? '1' : '.4')};\n pointer-events: ${(props) => (props.available ? 'all' : 'none')};\n\n .show-on-hover {\n position: absolute;\n inset: 0;\n border-radius: 8px;\n justify-content: center;\n align-items: center;\n display: flex;\n opacity: 0;\n background-color: #ffffffe6;\n }\n\n &:hover {\n .show-on-hover {\n opacity: 1;\n }\n }\n`;\n\nexport const CSSWidgetButton = styled.div<{ open: boolean }>`\n border: 2px solid ${(props) => props.theme.color.primary};\n height: ${(props) => (props.open ? '320' : '54')}px;\n border-radius: 8px;\n display: flex;\n justify-content: top;\n flex-direction: column;\n transition: height 0.4s;\n overflow: hidden;\n flex-direction: column;\n`;\n\nexport const CSSWrapWidgetWrapper = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: center;\n gap: 10px;\n`;\n\nexport const CSSWrapTitle = styled.div`\n min-height: 50px;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n color: ${(props) => props.theme.color.primary};\n &:hover {\n background-color: ${(props) => props.theme.color.grey0};\n }\n`;\n\nexport const CSSWrapWidget = styled.button<{ open: boolean; index: number; full?: boolean }>`\n height: 72px;\n display: flex;\n align-items: center;\n padding: 0 10px;\n gap: 10px;\n width: 40%;\n border: 1px solid ${(props) => props.theme.color.grey2};\n border-radius: 8px;\n transition: opacity 0.4s ease ${(props) => props.index * 40}ms;\n opacity: ${(props) => (props.open ? 1 : 0)};\n img {\n width: 40px;\n }\n ${(props) => props.full && `flex: 1`}\n`;\n\nexport const Flex = styled.div<{ direction: 'row' | 'column'; gap?: number }>`\n display: flex;\n flex-direction: ${(props) => (props.direction === 'row' ? 'row' : 'column')};\n align-items: ${(props) => (props.direction === 'row' ? 'center' : 'flex-start')};\n justify-content: ${(props) => (props.direction === 'row' ? 'flex-start' : 'center')};\n flex: 1;\n ${(props) => props.gap && `gap:${props.gap}px`}\n`;\n","import React from 'react';\nimport { FormattedMessage, useIntl } from 'react-intl';\n\nimport { WidgetDefinitionProps, WidgetKeys, WidgetWrapperProps } from 'jamespot-user-api';\n\nimport JRCore from 'App';\nimport { Widget } from 'jamespot-front-business';\nimport { JRCModalLayoutProps } from 'jamespot-react-components';\nimport { getBuilderWidgets } from '../namespace';\nimport {\n CSSSquareWidget,\n CSSSquareWidgetWrapper,\n CSSWidgetButton,\n CSSWrapTitle,\n CSSWrapWidget,\n CSSWrapWidgetWrapper,\n Flex,\n} from './WidgetList.style';\n\nconst JRCButton = JRCore.registry.getLazyComponent('Button');\nconst JRCModalLayout = JRCore.registry.getLazyComponent('ModalLayout');\nconst JRCModalContent = JRCore.registry.getLazyComponent('ModalContent');\nconst JRCTooltip = JRCore.registry.getLazyComponent('Tooltip');\nconst JRCIconButton = JRCore.registry.getLazyComponent('IconButton');\n\ntype WidgetListMode = 'button' | 'list' | 'gallery' | 'custom' | 'article' | 'comment';\n\n/*\n Widget Builder\n*/\nexport const WidgetList = ({\n mode,\n view,\n children,\n namespace = 'default',\n onChange,\n}: {\n mode?: WidgetListMode;\n view?: string;\n children?: any;\n namespace?: string;\n onChange: (widget: WidgetWrapperProps) => void;\n}) => {\n const [isOpen, setOpen] = React.useState<boolean>(false);\n const widgets = getBuilderWidgets(namespace);\n const intl = useIntl();\n\n const args: JRCModalLayoutProps = {\n open: isOpen,\n portalId: 'react-modal',\n variant: 'full-height',\n closeHandler: () => setOpen(false),\n };\n\n const onClick = (name: WidgetKeys) => {\n onChange(Widget.factory(name));\n setOpen(false);\n };\n return (\n <>\n <JRCModalLayout {...args}>\n <JRCModalContent\n onClickIconClose={args.closeHandler}\n buttons={\n mode === 'comment'\n ? [\n {\n children: <FormattedMessage id=\"GLOBAL_Close\" />,\n color: 'cancel',\n clickHandler: () => setOpen(false),\n },\n ]\n : undefined\n }\n title={intl.formatMessage({ id: 'WIDGET_Builder' })}>\n {mode === 'comment' ? (\n <CSSWrapWidgetWrapper>\n {widgets.map((widget, index) => (\n <CSSWrapWidget\n key={widget.name}\n open={true}\n full\n index={index}\n onClick={() => onClick(widget.name)}>\n <Flex direction={'row'} gap={12}>\n <img src={widget.img} />\n <Flex direction={'column'}>\n <h3>{intl.formatMessage({ id: widget.label })}</h3>\n <p>{intl.formatMessage({ id: widget.description })}</p>\n </Flex>\n </Flex>\n </CSSWrapWidget>\n ))}\n </CSSWrapWidgetWrapper>\n ) : (\n <CSSSquareWidgetWrapper>\n {widgets.map((widget, index: number) => {\n return (\n <CSSSquareWidget\n key={index}\n onClick={() => onClick(widget.name)}\n available={widget.available}>\n <img src={widget.img} />\n <div className=\"show-on-hover\">{intl.formatMessage({ id: widget.label })}</div>\n </CSSSquareWidget>\n );\n })}\n </CSSSquareWidgetWrapper>\n )}\n </JRCModalContent>\n </JRCModalLayout>\n {mode === 'custom' && children ? <div onClick={() => setOpen(true)}>{children}</div> : <></>}\n {mode === 'button' && view === 'edit' ? (\n <JRCButton onClick={() => setOpen(true)} variant={'outlined'} minWidth={'100%'}>\n {intl.formatMessage({ id: 'WIDGET_Add_Widget' })}\n </JRCButton>\n ) : (\n <></>\n )}\n {mode === 'gallery' && view === 'edit' ? (\n <CSSSquareWidgetWrapper>\n {widgets.map((widget, index: number) => {\n return (\n <CSSSquareWidget\n key={index}\n onClick={() => onClick(widget.name)}\n available={widget.available}>\n <img src={widget.img} />\n <div className=\"show-on-hover\">{intl.formatMessage({ id: widget.label })}</div>\n </CSSSquareWidget>\n );\n })}\n </CSSSquareWidgetWrapper>\n ) : (\n <></>\n )}\n {mode === 'article' && view === 'edit' ? <WidgetModeArticle widgets={widgets} onClick={onClick} /> : <></>}\n {mode === 'comment' && view === 'edit' ? (\n <WidgetModeComment\n onClick={() => {\n setOpen(true);\n }}\n />\n ) : (\n <></>\n )}\n </>\n );\n};\n\nconst WidgetModeArticle = ({\n widgets,\n onClick,\n}: {\n widgets: WidgetDefinitionProps[];\n onClick: (name: WidgetKeys) => void;\n}) => {\n const [open, isOpen] = React.useState(false);\n const intl = useIntl();\n return (\n <>\n <CSSWidgetButton open={open}>\n <CSSWrapTitle onClick={() => isOpen(!open)}>\n {intl.formatMessage({ id: 'WIDGET_Add_Widget' })}\n </CSSWrapTitle>\n <CSSWrapWidgetWrapper>\n {widgets.map((widget, index) => {\n return (\n <CSSWrapWidget\n key={widget.name}\n open={open}\n index={index}\n onClick={() => onClick(widget.name)}>\n <img src={widget.img} />\n {intl.formatMessage({ id: widget.label })}\n </CSSWrapWidget>\n );\n })}\n </CSSWrapWidgetWrapper>\n </CSSWidgetButton>\n </>\n );\n};\n\nconst WidgetModeComment = ({ onClick }: { onClick: () => void }) => {\n const intl = useIntl();\n return (\n <>\n <JRCTooltip description={intl.formatMessage({ id: 'COMMENT_Add_Widget' })}>\n <JRCIconButton\n bg={'grey1'}\n bgHover={'grey2'}\n color={'grey5'}\n iconSize={22}\n onClick={() => {\n onClick();\n }}\n icon={'icon-fs-puzzle'}\n />\n </JRCTooltip>\n </>\n );\n};\n","import { Widget } from 'jamespot-front-business';\nimport { WidgetDefinitionProps, WidgetsName } from 'jamespot-user-api';\n\nexport function getBuilderWidgets(namespace: string): WidgetDefinitionProps[] {\n switch (namespace) {\n case 'widget-article-image':\n return [Widget.definition(WidgetsName.ArticleTitle), Widget.definition(WidgetsName.ArticleButton)];\n case 'comment':\n return [Widget.definition(WidgetsName.CheckList)];\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 ];\n }\n}\n","import React from 'react';\n\nimport { WidgetApiType, WidgetDisplayMode } from 'jamespot-user-api';\n\nimport { JRCWidgetApi } from 'jamespot-react-components';\n\nimport styled from 'styled-components';\n\nconst Wrapper = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n min-height: 60px;\n align-items: center;\n`;\n\nfunction isAValidURL(url: string | undefined) {\n if (typeof url === 'string') {\n return url.length !== 0 && url.startsWith('https://');\n }\n\n return false;\n}\n\nexport const JRCWidgetApiWrapper = ({\n widget,\n}: {\n widget: WidgetApiType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const { url, keys, order, orderBy } = widget.content;\n const [data, setData] = React.useState<Array<Record<string, string>>>([]);\n\n React.useEffect(() => {\n if (url && isAValidURL(url)) {\n fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n .then((resp) => resp.json())\n .then((response) => {\n if (!Array.isArray(response.result)) {\n console.warn('resposne must be an array');\n }\n\n setData(response.result);\n });\n } else {\n console.warn(`${url} is not a valid url`);\n }\n }, [url]);\n\n return (\n <Wrapper>\n <JRCWidgetApi data={data} keys={keys ?? []} order={order ?? ''} orderBy={orderBy ?? 'asc'} />\n </Wrapper>\n );\n};\n","import { WidgetTableColumn, WidgetTableColumnsData } from 'jamespot-user-api';\n\nexport const getVisibleColumns = (tableColumnsData: WidgetTableColumnsData, columns: WidgetTableColumn[]) => {\n const toRet: WidgetTableColumn[] = [];\n tableColumnsData\n .filter((data) => data.isVisible)\n .forEach((data) => {\n const column = columns.find((el) => el.name === data.name);\n if (column) {\n toRet.push(column);\n }\n });\n\n return toRet;\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport JRCore from 'App';\nconst WidgetTable = JRCore.registry.getLazyComponent('WidgetTable');\n\nimport { FormattedMessage } from 'react-intl';\n\nconst Loader = JRCore.registry.getLazyComponent('Loader');\n\nimport jamespot, {\n Format,\n WidgetDatasourceValues,\n WidgetDisplayMode,\n WidgetsName,\n WidgetTableColumn,\n} from 'jamespot-user-api';\n\nimport styled from 'styled-components';\nimport { WidgetDatasourceTableContent } from 'jamespot-user-api';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { useAppDispatch } from 'redux/store';\nimport { JRCButton, JRCHtml } from 'jamespot-react-components';\nimport { getVisibleColumns } from './utils';\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\n const definition = useMemo(() => Widget.definition(WidgetsName.DatasourceTable), []);\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 const registerEditor = useCallback(() => {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: WidgetsName.DatasourceTable }));\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 <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 );\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 />\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 from 'react';\n\nimport { useSelector } from 'react-redux';\n\nimport { jFileLittle } from 'jamespot-user-api';\n\nimport { Widget } from 'jamespot-front-business';\nimport styled from 'styled-components';\nimport { JRCInputFileAdvancedRaw } from 'jamespot-react-components';\n\nexport const CSSHidden = styled.div`\n width: 0;\n height: 0;\n overflow: hidden;\n`;\n\ntype InplaceUploaderProps = {\n children: React.ReactNode;\n initialFiles: jFileLittle[];\n initialClick?: boolean;\n multiple: boolean;\n accept: string;\n onUploadStart: () => void;\n onUploadEnd: () => void;\n onUploadSuccess: (files: jFileLittle[]) => void;\n};\n\nexport const WidgetUploader = ({\n children,\n initialFiles,\n initialClick,\n multiple,\n accept,\n onUploadStart,\n onUploadEnd,\n onUploadSuccess,\n}: InplaceUploaderProps) => {\n const uploadRef = React.useRef<HTMLInputElement>(null);\n const token = useSelector(Widget.selectors.selectToken);\n const [total, setTotal] = React.useState<number>(0);\n const [files, setFiles] = React.useState<jFileLittle[]>(initialFiles);\n\n React.useEffect(() => {\n if (initialClick) {\n uploadRef.current?.click();\n }\n }, [initialClick]);\n\n React.useEffect(() => {\n if (initialFiles.length !== files.length) {\n setFiles(initialFiles);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialFiles]);\n\n React.useEffect(() => {\n onUploadSuccess(files);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [files]);\n\n React.useEffect(() => {\n if (total === 0) {\n onUploadEnd();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [total]);\n\n return (\n <>\n <div\n onClick={() => {\n if (initialClick) {\n uploadRef.current?.click();\n }\n }}>\n {children}\n </div>\n <CSSHidden>\n <JRCInputFileAdvancedRaw\n ref={uploadRef}\n id=\"widget-upload-file\"\n name=\"editorFiles\"\n content={''}\n accept={accept as any}\n multiple={multiple}\n token={token}\n onUploadStart={(totalFile) => {\n if (totalFile !== undefined) {\n setTotal((prevTotal) => prevTotal + totalFile);\n }\n if (typeof onUploadStart === 'function' && totalFile !== 0) {\n onUploadStart();\n }\n }}\n onUploadSuccess={(fileResponse) => {\n if (fileResponse === undefined) {\n return;\n }\n setTotal((prevTotal) => (prevTotal !== undefined ? prevTotal - 1 : 0));\n setFiles((prevFiles) => (multiple ? [...prevFiles, fileResponse] : [fileResponse]));\n }}\n />\n </CSSHidden>\n </>\n );\n};\n","import React, { useEffect } from 'react';\n\nimport styled from 'styled-components';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { useIntl } from 'react-intl';\nimport jamespot, {\n jFileLittle,\n WidgetArticleAttachmentType,\n WidgetDisplayMode,\n WidgetsRootState,\n WidgetArticleAttachmentContent,\n} from 'jamespot-user-api';\n\nimport JRCore from 'App';\nimport { Application, Toast, Widget, updateWidgetContent } from 'jamespot-front-business';\nimport { JRCWidgetEmptyInplace, JRCFileViewerOpenWithOptionsType } from 'jamespot-react-components';\nimport { WidgetUploader } from '../components/WidgetUploader';\n\nconst WidgetAttachment = JRCore.registry.getLazyComponent('WidgetAttachment');\n\nconst FileViewer = JRCore.registry.getLazyComponent('FileViewer');\n\n// DUPLICATE FROM WEDOC\nexport const wedocWindowOpen = (idFile: number, hash: string, target?: '_blank') => {\n window.open(getWedocFilePath(idFile, hash), target);\n};\n\n// DUPLICATE FROM WEDOC\nexport function getWedocFilePath(idFile: number, hash: string) {\n return `/ng/rr/file/${idFile}/${hash}`;\n}\n\nexport const CSSWrapper = styled.div`\n flex: 1;\n`;\n\nexport const JRCWidgetArticleAttachmentWrapper = ({\n widget,\n inplace,\n mode,\n}: {\n widget: WidgetArticleAttachmentType;\n inplace?: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const intl = useIntl();\n const { uniqid } = widget;\n const { files } = widget.content;\n const dispatch = useDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n\n const onError = (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n };\n\n useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, mounted: true }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !files || files.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [files]);\n\n const onlyOffice = useSelector((state: any) => Application.selectors.selectById(state, 'OnlyOfficeHook'));\n\n const onClick = (file: jFileLittle | undefined) => {\n if (!file) {\n return;\n }\n jamespot.object\n .getAccessHash(`fileArticle/${file.id}`)\n .then((response) => {\n if (response.result === '') {\n throw new Error('result empty');\n }\n const hash = response.result;\n wedocWindowOpen(file.id, hash);\n })\n .catch(() => {\n dispatch(Toast.actions.error({ label: 'WIDGET_Open_Failed' }, 6000));\n });\n };\n\n const option = [\n {\n label: intl.formatMessage({ id: 'WIDGET_Open_With_Wedoc' }),\n onClick: onClick,\n },\n ];\n\n const openWithOptions: JRCFileViewerOpenWithOptionsType = onlyOffice\n ? [\n {\n condition: (f) =>\n [\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n ].includes(f.mimetype),\n options: option,\n },\n ]\n : [];\n\n return files !== undefined ? (\n <CSSWrapper>\n {mode !== 'view' ? (\n <WidgetAttachment files={files} onClick={() => undefined} onError={onError} />\n ) : (\n <FileViewer files={files} openWithOptions={openWithOptions}>\n {(open) => {\n return <WidgetAttachment files={files} onClick={(idFile) => open(idFile)} onError={onError} />;\n }}\n </FileViewer>\n )}\n {inplace && mode !== 'view' && (\n <WidgetUploader\n initialFiles={files}\n initialClick={isActive}\n multiple={true}\n accept={'*'}\n onUploadSuccess={(files) => {\n if (Array.isArray(files)) {\n dispatch(updateWidgetContent<WidgetArticleAttachmentContent>(uniqid, { files }));\n }\n }}\n onUploadStart={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: true }));\n }}\n onUploadEnd={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: false }));\n }}>\n {mode === 'edit' ? (\n <JRCWidgetEmptyInplace\n label={'WIDGET_Article_Attachment_Empty_Label'}\n description={'WIDGET_Article_Attachment_Empty_Description'}\n url={'widget-article-image-placeholder.png'}\n onClick={() => undefined}\n />\n ) : (\n <></>\n )}\n </WidgetUploader>\n )}\n </CSSWrapper>\n ) : (\n <></>\n );\n};\n","import React, { useEffect } from 'react';\n\nimport styled from 'styled-components';\n\nimport { WidgetArticleButtonType, WidgetDisplayMode } from 'jamespot-user-api';\n\nimport { JRCWidgetButton } from 'jamespot-react-components';\nimport { useDispatch } from 'react-redux';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\n\nconst CSSButtonWrapper = styled.div`\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n`;\n\nconst CSSPointer = styled.div<{ clickable: boolean }>`\n pointer-events: ${(props) => (props.clickable ? 'all' : 'none')};\n cursor: pointer;\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n`;\n\nexport const JRCWidgetArticleButtonWrapper = ({\n widget,\n mode,\n}: {\n widget: WidgetArticleButtonType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const dispatch = useDispatch();\n const { uniqid } = widget;\n const { text, url, target, color, backgroundColor, buttonSize, borderRadius, variant } = widget.content;\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !text || text.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [text]);\n\n return (\n <CSSButtonWrapper\n onClick={() => {\n if (mode === 'edit') {\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: widget.name }));\n }\n }}>\n <CSSPointer clickable={mode !== 'edit'}>\n <JRCWidgetButton\n text={text}\n url={url}\n target={target}\n color={color}\n backgroundColor={backgroundColor}\n buttonSize={buttonSize}\n borderRadius={borderRadius}\n variant={variant}\n />\n </CSSPointer>\n </CSSButtonWrapper>\n );\n};\n","import React from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\n\nimport {\n WidgetArticleGalleryContent,\n WidgetArticleGalleryType,\n WidgetDisplayMode,\n WidgetsRootState,\n} from 'jamespot-user-api';\n\nimport JRCore from 'App';\nimport { Widget, updateWidgetContent } from 'jamespot-front-business';\nimport { JRCWidgetEmptyInplace } from 'jamespot-react-components';\nimport { WidgetUploader } from '../components/WidgetUploader';\n\nconst JRCWidgetArticleGallery = JRCore.registry.getLazyComponent('WidgetArticleGallery');\n\nconst FileViewer = JRCore.registry.getLazyComponent('FileViewer');\n\nconst CSSImagePointer = styled.button`\n cursor: pointer;\n`;\n\nexport const JRCWidgetArticleGalleryWrapper = ({\n widget,\n inplace,\n mode,\n}: {\n widget: WidgetArticleGalleryType;\n inplace?: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const { uniqid } = widget;\n const { files } = widget.content;\n const dispatch = useDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n\n React.useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, mounted: true }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return files !== undefined ? (\n <>\n {mode === 'edit' ? (\n <JRCWidgetArticleGallery\n files={files}\n maxWidth={800}\n gap={widget.content.gap ?? '10'}\n column={widget.content.column ?? '3'}\n onClick={() => undefined}\n />\n ) : (\n <FileViewer files={files} openWithOptions={[]}>\n {(open) => {\n return (\n <CSSImagePointer>\n <JRCWidgetArticleGallery\n files={files}\n maxWidth={600}\n gap={widget.content.gap ?? '10'}\n column={widget.content.column ?? '3'}\n onClick={(idFile) => open(idFile)}\n />\n </CSSImagePointer>\n );\n }}\n </FileViewer>\n )}\n {inplace && mode === 'edit' ? (\n <WidgetUploader\n initialFiles={files}\n initialClick={isActive}\n accept={'image/png, image/jpeg, image/jpg'}\n multiple={true}\n onUploadSuccess={(files) => {\n if (Array.isArray(files)) {\n dispatch(updateWidgetContent<WidgetArticleGalleryContent>(uniqid, { files }));\n }\n }}\n onUploadStart={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: true }));\n }}\n onUploadEnd={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: false }));\n }}>\n <JRCWidgetEmptyInplace\n label={'WIDGET_Article_Gallery_Empty_Label'}\n description={'WIDGET_Article_Gallery_Empty_Description'}\n url={'widget-article-image-placeholder.png'}\n onClick={() => undefined}\n />\n </WidgetUploader>\n ) : (\n <></>\n )}\n </>\n ) : (\n <></>\n );\n};\n","import React, { useEffect, useState } from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport {\n WidgetArticleImageContent,\n WidgetArticleImageType,\n WidgetDisplayMode,\n WidgetsRootState,\n formatImgUrl,\n jFileLittle,\n} from 'jamespot-user-api';\nimport { useIntl } from 'react-intl';\nimport JRCore from 'App';\nimport { Widget, updateWidgetContent } from 'jamespot-front-business';\nimport { JRCWidgetEmptyInplace } from 'jamespot-react-components';\nimport { WidgetUploader } from '../components/WidgetUploader';\n\nconst WidgetImage = JRCore.registry.getLazyComponent('WidgetImage');\nconst FileViewer = JRCore.registry.getLazyComponent('FileViewer');\n\nimport styled from 'styled-components';\n\nconst CSSImageWrapperHover = styled.div`\n position: absolute;\n inset: 0;\n background-color: rgba(0, 0, 0, 0.4);\n pointer-event: none;\n display: flex;\n justify-content: center;\n align-items: center;\n opacity: 0;\n color: ${(props) => props.theme.color.white};\n &:hover {\n opacity: 1;\n }\n`;\n\nconst CSSImagePointer = styled.button`\n cursor: pointer;\n`;\n\nconst mockFileLittle: jFileLittle = {\n id: 0,\n type: '',\n title: '',\n uri: '',\n mimetype: 'application/octet-stream',\n mainType: '',\n dateCreation: '',\n dateModified: '',\n _url: '',\n size: 10,\n};\n\nexport const strToTimestamp = (str: string): undefined | number => {\n if (str) {\n const timestamp = Date.parse(str);\n if (!isNaN(timestamp)) {\n return new Date(timestamp).getTime() / 1000;\n }\n }\n return;\n};\n\nexport const JRCWidgetArticleImageWrapper = ({\n widget,\n width,\n inplace,\n mode,\n}: {\n widget: WidgetArticleImageType;\n inplace?: boolean;\n mode?: WidgetDisplayMode;\n width?: number;\n}) => {\n const { uniqid } = widget;\n const { file, useFilter } = widget.content;\n const dispatch = useDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n const [uri, setUri] = useState<string | undefined>(undefined);\n const intl = useIntl();\n\n useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, mounted: true }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, empty: !file }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [file]);\n\n useEffect(() => {\n if (file) {\n setUri(\n formatImgUrl({\n timestamp: file.dateModified ? strToTimestamp(file.dateModified) : Date.now(),\n from: 'imagecache',\n size: 'fitx1200',\n uri: file.uri,\n }),\n );\n }\n }, [file]);\n\n return (\n <>\n {mode === 'edit' ? (\n uri !== undefined ? (\n <WidgetImage maxWidth={width ?? 600} uri={uri} useFilter={useFilter ?? false} />\n ) : (\n <></>\n )\n ) : (\n <FileViewer\n files={[\n {\n ...mockFileLittle,\n path: uri,\n mimetype: 'image/png',\n },\n ]}\n openWithOptions={[]}>\n {(open) => {\n return (\n <CSSImagePointer onClick={() => open(0)}>\n <WidgetImage maxWidth={width ?? 600} uri={uri} useFilter={useFilter ?? false} />\n </CSSImagePointer>\n );\n }}\n </FileViewer>\n )}\n\n {inplace && mode === 'edit' ? (\n <WidgetUploader\n initialFiles={[]}\n initialClick={isActive}\n accept={'image/png, image/jpeg, image/jpg'}\n multiple={false}\n onUploadSuccess={(files) => {\n if (Array.isArray(files) && files[0] !== undefined) {\n dispatch(updateWidgetContent<WidgetArticleImageContent>(uniqid, { file: files[0] }));\n }\n }}\n onUploadStart={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: true }));\n }}\n onUploadEnd={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: false }));\n }}>\n {file !== undefined ? (\n <CSSImageWrapperHover>\n {intl.formatMessage({ id: 'ARTICLE_Widget_Image_Change' })}\n </CSSImageWrapperHover>\n ) : (\n <JRCWidgetEmptyInplace\n label={'WIDGET_Article_Image_Empty_Label'}\n description={'WIDGET_Article_Image_Empty_Description'}\n url={'widget-article-image-placeholder.png'}\n onClick={() => undefined}\n />\n )}\n </WidgetUploader>\n ) : (\n <></>\n )}\n </>\n );\n};\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport {\n WidgetArticleSliderType,\n WidgetDisplayMode,\n WidgetsRootState,\n formatImgUrl,\n jFileLittle,\n} from 'jamespot-user-api';\nimport JRCore from 'App';\nimport styled from 'styled-components';\nimport { JRCWidgetEmptyInplace, JRCWidgetSlider } from 'jamespot-react-components';\nimport { useAppDispatch } from 'redux/store';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { shallowEqual, useSelector } from 'react-redux';\n\nconst FileViewer = JRCore.registry.getLazyComponent('FileViewer');\n\nconst Wrapper = styled.div<{ maxWidth: number }>`\n flex: 1;\n display: flex;\n flex-direction: row;\n min-height: 60px;\n align-items: center;\n width: ${(props) => props.maxWidth}px;\n`;\n\nconst mockFileLittle: jFileLittle = {\n id: 0,\n type: '',\n title: '',\n uri: '',\n mimetype: 'application/octet-stream',\n mainType: '',\n dateCreation: '',\n dateModified: '',\n _url: '',\n size: 10,\n};\n\nexport const strToTimestamp = (str: string): undefined | number => {\n if (str) {\n const timestamp = Date.parse(str);\n if (!isNaN(timestamp)) {\n return new Date(timestamp).getTime() / 1000;\n }\n }\n return;\n};\n\nexport const JRCWidgetArticleSliderWrapper = ({\n widget,\n mode,\n width,\n}: {\n widget: WidgetArticleSliderType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n width?: number;\n}) => {\n const { uniqid } = widget;\n const dispatch = useAppDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n const maxWidth = width ?? 600;\n const [dynamicWidth, setDynamicWidth] = useState<number | undefined>(undefined);\n const ref = useRef<HTMLDivElement>(null);\n const fileViewerFiles = useMemo(\n () =>\n widget.content.slides\n ? [\n ...widget.content.slides.map((slide, index) => {\n return {\n ...mockFileLittle,\n id: slide.file ? slide.file.id : index,\n mimetype: slide.file ? slide.file.mimetype : mockFileLittle.mimetype,\n path: formatImgUrl({\n size: 'fitx1200',\n uri: slide.file ? slide.file.uri : '',\n from: 'imagecache',\n timestamp:\n slide.file && slide.file.dateModified\n ? strToTimestamp(slide.file.dateModified)\n : Date.now(),\n }),\n };\n }),\n ]\n : [],\n [widget.content.slides],\n );\n\n const slides = useMemo(\n () =>\n widget.content.slides !== undefined\n ? [\n ...widget.content.slides.map((slide) => {\n if (slide.file) {\n return {\n ...slide,\n uri: formatImgUrl({\n timestamp: slide.file.dateModified\n ? strToTimestamp(slide.file.dateModified)\n : Date.now(),\n size: `fitx${dynamicWidth && dynamicWidth < maxWidth ? dynamicWidth : maxWidth}`,\n from: 'imagecache',\n uri: slide.file.uri,\n }),\n };\n } else {\n return {\n ...slide,\n uri: '',\n };\n }\n }),\n ]\n : [],\n [widget.content.slides, dynamicWidth, maxWidth],\n );\n\n useEffect(() => {\n if (isActive && mode === 'edit') {\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: widget.name }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isActive]);\n\n useEffect(() => {\n const handleResize = () => {\n if (ref.current) {\n setDynamicWidth(ref.current ? ref.current.offsetWidth : maxWidth);\n }\n };\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref]);\n\n useEffect(() => {\n setDynamicWidth(ref.current ? ref.current.offsetWidth : maxWidth);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref]);\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !widget.content.slides || widget.content.slides.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [widget.content.slides]);\n\n const isEditable = useMemo(\n () => mode === 'edit' && Array.isArray(widget.content.slides) && widget.content.slides.length === 0,\n [widget.content.slides, mode],\n );\n\n const handleEditor = useCallback(() => {\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid: widget.uniqid,\n name: widget.name,\n }),\n );\n }, [dispatch, widget.uniqid, widget.name]);\n\n /** small hack to catch the real width of the div */\n if (dynamicWidth === undefined) {\n return <div ref={ref} style={{ width: '100%' }}></div>;\n }\n\n return (\n <Wrapper maxWidth={dynamicWidth && dynamicWidth < maxWidth ? dynamicWidth : maxWidth}>\n <FileViewer files={fileViewerFiles} openWithOptions={[]}>\n {(open) => {\n return (\n <JRCWidgetSlider\n slides={slides}\n maxWidth={dynamicWidth && dynamicWidth < maxWidth ? dynamicWidth : maxWidth}\n useDots={widget.content.useDots ?? true}\n loop={widget.content.loop ?? false}\n startAt={0}\n onClickSlide={(index) => {\n if (mode !== 'edit') {\n if (widget.content.slides) {\n const slide = widget.content.slides[index];\n if (slide && slide.file) {\n open(slide.file.id);\n }\n }\n } else {\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: widget.name }));\n }\n }}\n />\n );\n }}\n </FileViewer>\n {isEditable ? (\n <JRCWidgetEmptyInplace\n label={'WIDGET_Article_Slider_Empty_Label'}\n description={'WIDGET_Article_Slider_Empty_Description'}\n url={'widget-article-image-placeholder.png'}\n onClick={handleEditor}\n />\n ) : (\n <></>\n )}\n </Wrapper>\n );\n};\n","import React, { useCallback, useEffect, useMemo } from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport JRCore from 'App';\nimport { useIntl } from 'react-intl';\nimport {\n WidgetArticleTextContent,\n WidgetArticleTextType,\n WidgetDisplayMode,\n WidgetsRootState,\n} from 'jamespot-user-api';\n\nimport { Model, TinyMCE, Toast, Widget, updateWidgetContent } from 'jamespot-front-business';\n\nconst WidgetArticleText = JRCore.registry.getLazyComponent('WidgetArticleText');\n\nimport { getTinyMCEMentionsQueries } from 'App';\n\nimport styled, { useTheme } from 'styled-components';\n\nconst CSSTextWrapper = styled.div`\n cursor: text;\n p {\n word-wrap: break-word;\n }\n a {\n word-wrap: break-word;\n }\n`;\n\nexport const JRCWidgetArticleTextWrapper = ({\n widget,\n mode,\n}: {\n widget: WidgetArticleTextType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const { uniqid } = widget;\n const theme = useTheme();\n const { text } = widget.content;\n const dispatch = useDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n const isBusy = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidgetState(state, uniqid)?.busy);\n const token = useSelector(Widget.selectors.selectToken);\n const tinyMCECommonOptions = useSelector(TinyMCE.selectors.selectTinyMCECommonOptions);\n const models = useSelector(Model.selectors.selectAll);\n\n const intl = useIntl();\n\n const onError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !text || text.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [text]);\n\n const tinyMentionsQueries = useMemo(() => {\n return getTinyMCEMentionsQueries(models, theme, onError);\n }, [models, onError, theme]);\n\n // small hack to hide and redraw tinymce to avoid initialization issue\n if (isBusy) {\n return <></>;\n }\n\n return (\n <CSSTextWrapper>\n <WidgetArticleText\n autoFocus={isActive}\n text={text ?? ''}\n token={mode === 'edit' && token !== undefined ? token : ''}\n tinyMCECommonOptions={\n mode === 'edit' && tinyMCECommonOptions\n ? {\n tinymceScriptSrc: 'https://ecosysteme.jamespot.pro/js/tinymce/tinymce.min.js',\n commonOptions: tinyMCECommonOptions,\n mentionsQueries: tinyMentionsQueries,\n }\n : undefined\n }\n mode={mode}\n onChange={(text) => {\n dispatch(updateWidgetContent<WidgetArticleTextContent>(uniqid, { text }));\n }}\n />\n </CSSTextWrapper>\n );\n};\n","import React, { useEffect } from 'react';\n\nimport JRCore from 'App';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport {\n WidgetArticleTitleContent,\n WidgetArticleTitleType,\n WidgetDisplayMode,\n WidgetsRootState,\n} from 'jamespot-user-api';\n\nimport { Widget, updateWidgetContent } from 'jamespot-front-business';\n\nconst WidgetArticleTitle = JRCore.registry.getLazyComponent('WidgetArticleTitle');\n\nimport styled from 'styled-components';\n\nconst CSSTextWrapper = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n align-items: center;\n cursor: text;\n`;\n\nconst ToolWrapper = styled.div`\n display: flex;\n flex-direction: row;\n border-radius: 8px;\n overflow: hidden;\n margin: 4px;\n border: 1px solid ${(props) => props.theme.color.grey1};\n`;\n\nconst Tool = styled.button<{ isActive: boolean }>`\n display: flex;\n width: 40px;\n height: 40px;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n opacity: ${(props) => (props.isActive ? '1.0' : '.8')};\n background-color: ${(props) => (props.isActive ? props.theme.color.grey1 : props.theme.color.white)};\n &:hover {\n background-color: ${(props) => props.theme.color.grey1};\n }\n`;\n\nexport const JRCWidgetArticleTitleWrapper = ({\n widget,\n inplace,\n mode,\n}: {\n widget: WidgetArticleTitleType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const { uniqid } = widget;\n const { text, color, heading } = widget.content;\n const dispatch = useDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !text || text.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [text]);\n\n return (\n <CSSTextWrapper>\n <WidgetArticleTitle\n text={text}\n color={color}\n heading={heading}\n autoFocus={isActive}\n inplace={inplace}\n mode={mode}\n onChange={(text) => {\n dispatch(updateWidgetContent<WidgetArticleTitleContent>(uniqid, { text }));\n }}\n />\n {isActive && mode === 'edit' ? (\n <Toolbar\n heading={heading}\n onClick={(heading) => {\n dispatch(updateWidgetContent<WidgetArticleTitleContent>(uniqid, { heading }));\n }}\n />\n ) : (\n <></>\n )}\n </CSSTextWrapper>\n );\n};\n\nexport const Toolbar = ({ heading = 'h1', onClick }: { heading?: string; onClick: (size: string) => void }) => {\n const sizes: string[] = ['h1', 'h2', 'h3', 'h4'];\n return (\n <ToolWrapper>\n {sizes.map((sizeValue, index: number) => (\n <Tool key={index} isActive={heading === sizeValue} onClick={() => onClick(sizeValue)}>\n {sizeValue}\n </Tool>\n ))}\n </ToolWrapper>\n );\n};\n","import { Toast, updateWidgetContent, UserCurrent, Widget, WidgetEditor } from 'jamespot-front-business';\nimport { JRCIconButton, JRCInputTextRaw, JRCModal } from 'jamespot-react-components';\nimport { JRCWidgetCheckListEntries } from 'jamespot-react-components/build/src/components/Widgets/JRCWidgetCheckList/JRCWidgetCheckList';\nimport jamespot, {\n CombinedWidgetContent,\n WidgetCheckListContent,\n WidgetCheckListContentArr,\n WidgetCheckListType,\n WidgetDisplayMode,\n WidgetsName,\n WidgetsRootState,\n} from 'jamespot-user-api';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { FormattedMessage, useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\n\nconst WidgetCheckList = J.react.registry.getLazyComponent('WidgetCheckList');\nconst WidgetCheckListEditor = J.react.registry.getLazyComponent('WidgetCheckListEditor');\nconst Typography = J.react.registry.getLazyComponent('Typography');\n\nexport const CSSRowLinkWrapper = styled.div<{ border?: boolean }>`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n border: ${(props) => (props.border ? `1px solid ${props.theme.color.grey2}` : 'none')};\n min-height: 24px;\n border-radius: 4px;\n padding: 4px 8px;\n`;\n\nconst WidgetConfigWrapper = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n border: 1px solid ${(props) => props.theme.color.grey1};\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n padding: 4px;\n margin-bottom: 8px;\n\n div:first-child {\n margin: 0 auto;\n }\n\n div:last-child {\n align-self: flex-end;\n }\n`;\nconst Column = styled.div`\n width: 100%;\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n gap: 8px;\n`;\n\nconst CommentContainer = styled.div`\n display: flex;\n gap: 14px;\n padding: 10px 10px 0 10px;\n border-radius: 8px;\n background-color: ${({ theme }) => theme.color.white};\n border: 1px solid ${(props) => props.theme.color.grey2};\n`;\n\nexport const FormItemContainer = styled.div<{ border?: boolean }>`\n width: 100%;\n padding-bottom: 12px;\n border-bottom: ${(props) => (props.border ? `1px solid ${props.theme.color.grey1}` : 0)};\n`;\n\ntype JRCWidgetCheckListWrapperProps = {\n widget: WidgetCheckListType;\n commentId?: number;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n editRight: boolean;\n deleteRight: boolean;\n onRemove?: (uniqid: string) => void;\n onWidgetUpdate?: () => void;\n};\n\nexport const JRCWidgetCheckListWrapper = ({\n widget,\n commentId,\n inplace,\n mode,\n editRight,\n deleteRight,\n onRemove,\n onWidgetUpdate,\n}: JRCWidgetCheckListWrapperProps) => {\n const intl = useIntl();\n const { uniqid, content: widgetContent } = widget;\n const dispatch = useDispatch();\n\n const [entries, setEntries] = useState<JRCWidgetCheckListEntries | undefined>();\n\n const [isDeleteModalOpen, setDeleteModalOpen] = useState(false);\n\n const [token, setToken] = useState<string>();\n const [tokenLoading, setTokenLoading] = useState(false);\n\n const widgetWrapper = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid));\n const currentUser = useSelector(UserCurrent.selectors.get);\n\n const onError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const onChange = (uniqid: string, content: CombinedWidgetContent) => {\n dispatch(updateWidgetContent(uniqid, content));\n };\n\n const onChangeWrapper = (content: { uniqid: string; title?: string }) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ ...content }));\n };\n\n const handleCheckItem = (id: string, index: number, items: JRCWidgetCheckListEntries) => {\n if (!commentId) return;\n\n const newItems: WidgetCheckListContentArr[] = items?.map((item) => ({\n title: item.text,\n ...(item.id && { id: item.id }),\n ...(item.links && { links: item.links }),\n ...(item.mimetype && { mimetypes: item.mimetype }),\n ...(currentUser &&\n item.checked && {\n user: {\n id: item.user?.id ?? currentUser.id,\n mainType: 'user',\n type: 'user',\n },\n }),\n ...(item.checked && { value: item.checked }),\n }));\n const content = {\n arr: newItems,\n };\n dispatch(updateWidgetContent<WidgetCheckListContent>(id, content));\n\n jamespot.widget\n .checkListRespond({\n id: commentId,\n type: 'comment',\n idUser: currentUser?.id,\n uniqid: id,\n index: index,\n })\n .then(() => {\n if (onWidgetUpdate) onWidgetUpdate();\n })\n .catch((err) => {\n onError(err.message);\n });\n };\n\n const handleRemoveWidget = () => {\n dispatch(Widget.slice.actions.flushWidget({ uniqid }));\n if (onRemove) {\n onRemove(uniqid);\n }\n setDeleteModalOpen(false);\n };\n\n const openEditorPanel = (token: string) => {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n dispatch(Widget.slice.actions.setToken({ token }));\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid: widget.uniqid,\n name: WidgetsName.CheckList,\n }),\n );\n };\n\n useEffect(() => {\n const finalEntries: JRCWidgetCheckListEntries | undefined = widget.content.arr?.map((item) => ({\n text: item.title ?? '',\n checked: item.value ?? false,\n ...(item.links && {\n links: item.links,\n }),\n ...(item.user && { user: item.user ?? undefined }),\n ...(item.id && { id: item.id, mimetype: 'image/png' }),\n }));\n\n setEntries(finalEntries);\n }, [widget.content.arr, widgetContent]);\n\n useEffect(() => {\n if (token || tokenLoading) return;\n const fetchToken = () => {\n setTokenLoading(true);\n return jamespot.network\n .token()\n .then((res) => {\n setToken(res.result);\n setTokenLoading(false);\n })\n .catch((e) => {\n onError(e.errorMsg);\n });\n };\n fetchToken();\n }, [onError, token, tokenLoading]);\n\n if (mode === 'edit') {\n if (inplace) {\n return (\n <>\n <CommentContainer>\n <Column>\n <FormItemContainer border>\n <label>{intl.formatMessage({ id: 'COMMENT_WIDGET_CHECKLIST_Title' })}</label>\n <JRCInputTextRaw\n id={intl.formatMessage({ id: 'COMMENT_WIDGET_CHECKLIST_Title' })}\n required={true}\n placeholder={intl.formatMessage({ id: 'COMMENT_WIDGET_CHECKLIST_Title' })}\n type=\"text\"\n value={widgetWrapper?.title}\n onChange={(event) => {\n const { value } = event.target;\n onChangeWrapper({ uniqid, title: value });\n }}\n margin={'2px'}\n width=\"100%\"\n />\n </FormItemContainer>\n <WidgetCheckListEditor\n token={token}\n uniqid={uniqid}\n content={widgetContent}\n onChangeContent={onChange}\n onChangeWrapper={onChangeWrapper}\n openEditorPanel={openEditorPanel}\n onRemoveWidget={handleRemoveWidget}\n />\n </Column>\n </CommentContainer>\n </>\n );\n }\n }\n\n return (\n <>\n {entries && (\n <div key={widget.uniqid} style={{ width: '100%' }}>\n <WidgetCheckList\n title={widgetWrapper?.title}\n limit={10}\n initialEntries={entries}\n onFileClick={() => {\n // we did not use the onClick function\n }}\n onItemCheckListChange={(index, items) => handleCheckItem(widget.uniqid, index, items)}\n />\n {editRight && (\n <>\n <WidgetConfigWrapper>\n <div\n style={{ cursor: 'pointer' }}\n onClick={() => {\n if (token) {\n openEditorPanel(token);\n } else {\n onError(intl.formatMessage({ id: 'GLOBAL_Error' }));\n }\n }}>\n <Typography size=\"s\">\n {intl.formatMessage({ id: 'COMMENT_WIDGET_Configure' })}\n </Typography>\n </div>\n\n {deleteRight && (\n <div>\n <JRCIconButton\n iconSize={14}\n onClick={() => setDeleteModalOpen(true)}\n icon=\"icon-trash\"\n />\n </div>\n )}\n </WidgetConfigWrapper>\n </>\n )}\n <JRCModal\n buttons={[\n {\n color: 'cancel',\n clickHandler: () => setDeleteModalOpen(false),\n children: <FormattedMessage id={'GLOBAL_Cancel'} />,\n },\n {\n color: 'danger',\n clickHandler: handleRemoveWidget,\n children: <FormattedMessage id={'GLOBAL_Delete'} />,\n },\n ]}\n open={isDeleteModalOpen}\n closeHandler={() => setDeleteModalOpen(false)}\n title={intl.formatMessage({ id: 'GLOBAL_Delete' })}>\n {intl.formatMessage({ id: 'COMMENT_WIDGET_Delete_Widget' })}\n </JRCModal>\n </div>\n )}\n </>\n );\n};\n","import React from 'react';\n\nimport {\n CombinedWidgetType,\n ensureWidgetApiType,\n ensureWidgetArticleAttachmentType,\n ensureWidgetArticleButtonType,\n ensureWidgetArticleGalleryType,\n ensureWidgetArticleImageType,\n ensureWidgetArticleSliderType,\n ensureWidgetArticleTextType,\n ensureWidgetArticleTitleType,\n ensureWidgetCheckListType,\n ensureWidgetDatasourceTableType,\n WidgetDisplayMode,\n} from 'jamespot-user-api';\n\nimport { JRCWidgetApiWrapper } from './wrapper/JRCWidgetApiWrapper';\nimport { WidgetDatasourceTableWrapper } from './wrapper/JRCWidgetDatasourceTableWrapper';\nimport { JRCWidgetArticleAttachmentWrapper } from './wrapper/JRCWidgetArticleAttachmentWrapper';\nimport { JRCWidgetArticleButtonWrapper } from './wrapper/JRCWidgetArticleButtonWrapper';\nimport { JRCWidgetArticleGalleryWrapper } from './wrapper/JRCWidgetArticleGalleryWrapper';\nimport { JRCWidgetArticleImageWrapper } from './wrapper/JRCWidgetArticleImageWrapper';\nimport { JRCWidgetArticleSliderWrapper } from './wrapper/JRCWidgetArticleSliderWrapper';\nimport { JRCWidgetArticleTextWrapper } from './wrapper/JRCWidgetArticleTextWrapper';\nimport { JRCWidgetArticleTitleWrapper } from './wrapper/JRCWidgetArticleTitleWrapper';\nimport { JRCWidgetCheckListWrapper } from './wrapper/JRCWidgetCheckListWrapper';\n\nexport const DisplayWidget = ({\n widget,\n commentId,\n width,\n inplace = false,\n mode = 'view',\n editRight,\n deleteRight,\n onWidgetUpdate,\n onRemove,\n}: {\n widget: CombinedWidgetType;\n commentId?: number;\n width?: number | undefined;\n inplace: boolean;\n mode: WidgetDisplayMode;\n editRight?: boolean;\n deleteRight?: boolean;\n onRemove?: (id: string) => void;\n onWidgetUpdate?: () => void;\n onClick: () => void;\n}) => {\n const { name } = widget;\n\n 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 (ensureWidgetApiType(widget)) {\n return <JRCWidgetApiWrapper 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 (ensureWidgetDatasourceTableType(widget)) {\n return <WidgetDatasourceTableWrapper {...widget.content} uniqid={widget.uniqid} mode={mode} />;\n } else if (ensureWidgetCheckListType(widget)) {\n return (\n <JRCWidgetCheckListWrapper\n widget={widget}\n commentId={commentId}\n inplace={inplace}\n mode={mode}\n editRight={editRight ?? false}\n deleteRight={deleteRight ?? false}\n onRemove={onRemove}\n onWidgetUpdate={onWidgetUpdate}\n />\n );\n } else {\n return <>cannot display widget ({name})</>;\n }\n};\n","import styled from 'styled-components';\n\nexport const CSSWidgetLayer = styled.div<{ opacity: number; backgroundColor: string; pointerEvents: string }>`\n position: absolute;\n inset: 0;\n opacity: ${(props) => props.opacity};\n background-color: ${(props) => props.backgroundColor};\n pointer-events: ${(props) => props.pointerEvents};\n`;\n","import React, { useCallback } from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { WidgetVector, WidgetsRootState, WidgetDisplayMode, WidgetKeys } from 'jamespot-user-api';\n\nimport { WidgetEditor, Widget } from 'jamespot-front-business';\nimport WidgetWrapperCore from '../WidgetWrapperCore';\nimport { CSSWidgetLayer } from './WidgetLayer.style';\nimport { BETA_JRCDoubleClick } from 'jamespot-react-components';\n\n/*\n Widget layering\n*/\n\nexport const WidgetLayer = ({ uniqid, mode }: { uniqid: string; mode: WidgetDisplayMode }) => {\n const layers = useSelector((state: WidgetsRootState) => state.widgets.ids[uniqid].widget.layers, shallowEqual);\n return (\n <>\n {layers?.map((layer, index) => {\n if (mode === 'edit') {\n return <Layer uniqid={layer} key={index} mode={'edit'} />;\n }\n\n return <Layer uniqid={layer} key={index} mode={'edit'} />;\n })}\n </>\n );\n};\n\nconst Layer = ({ uniqid, mode }: { uniqid: string; mode: WidgetDisplayMode }) => {\n const layer = useSelector((state: WidgetsRootState) => state.widgets.layers[uniqid]);\n if (mode === 'view') {\n return (\n <CSSWidgetLayer opacity={1} backgroundColor={'transparent'} pointerEvents={'none'}>\n {layer.widgets.map((widgetWrapper, index) => {\n return (\n <LayerWidget\n key={index}\n layerId={layer.uniqid}\n uniqid={widgetWrapper.widget.uniqid}\n mode={'view'}\n />\n );\n })}\n </CSSWidgetLayer>\n );\n }\n\n return (\n <CSSWidgetLayer\n opacity={layer.visible ? 1 : 0}\n backgroundColor={layer.visible ? 'rgba(255,255,255,.1)' : 'transparent'}\n pointerEvents={layer.locked ? 'none' : 'all'}>\n {layer.widgets.map((widgetWrapper, index) => {\n return (\n <LayerWidget\n key={index}\n layerId={layer.uniqid}\n uniqid={widgetWrapper.widget.uniqid}\n mode={'edit'}\n />\n );\n })}\n </CSSWidgetLayer>\n );\n};\n\n/*\n Widget from the layer\n*/\nconst LayerWidget = ({ uniqid, layerId, mode }: { uniqid: string; layerId: string; mode: WidgetDisplayMode }) => {\n const dispatch = useDispatch();\n const widgetWrapper = useSelector((state: WidgetsRootState) => state.widgets.ids[uniqid], shallowEqual);\n const layer = useSelector((state: WidgetsRootState) => state.widgets.layers[layerId]);\n\n if (!widgetWrapper) {\n return <></>;\n }\n\n if (!layer) {\n return <></>;\n }\n\n if (!layer.position) {\n return <></>;\n }\n\n const onDoubleTap = (uniqid: string, name: WidgetKeys) => {\n /*\n Open editor\n */\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name }));\n };\n\n const onMouseUp = (position: WidgetVector) => {\n dispatch(Widget.slice.actions.updateLayer({ uniqid: layerId, props: { position } }));\n };\n\n if (mode === 'view') {\n return (\n <div style={{ position: 'absolute', top: layer.position.y, left: layer.position.x }}>\n <WidgetWrapperCore uniqid={uniqid} widget={widgetWrapper} mode={mode} inplace={true} />\n </div>\n );\n }\n\n return (\n <DraggableHandler\n position={{ x: layer.position.x, y: layer.position.y }}\n onMouseUp={(position: WidgetVector) => {\n if (\n (layer.position && layer.position.x !== position.x) ||\n (layer.position && layer.position.y !== position.y)\n ) {\n onMouseUp(position);\n }\n }}>\n <BETA_JRCDoubleClick\n onDoubleTap={() => onDoubleTap(widgetWrapper.widget.uniqid, widgetWrapper.widget.name)}>\n <WidgetWrapperCore uniqid={uniqid} widget={widgetWrapper} mode={mode} inplace={true} />\n </BETA_JRCDoubleClick>\n </DraggableHandler>\n );\n};\n\nexport type Vector = {\n x: number;\n y: number;\n};\n\n// TODO: COMBINE WITH THE ONE USED ON COLOR PICKER\n// TODO: COMBINE WITH THE ONE USED ON COLOR PICKER\n// TODO: COMBINE WITH THE ONE USED ON COLOR PICKER\nexport const DraggableHandler = ({\n position,\n children,\n onMouseUp,\n}: {\n position: Vector;\n children: React.ReactElement;\n onMouseUp: (position: Vector) => void;\n}) => {\n const [mouseIsDown, setMouseDown] = React.useState<boolean>(false);\n const [mouse, setMouse] = React.useState<Vector>({ x: 0, y: 0 });\n const [start, setStart] = React.useState<Vector>({ x: 0, y: 0 });\n const [child, setChild] = React.useState<Vector>({ x: position.x, y: position.y });\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n const handleMouseDown = useCallback(\n (event: any) => {\n setMouseDown(true);\n if (ref.current) {\n setMouse({ x: event.nativeEvent.clientX, y: event.nativeEvent.clientY });\n setStart({ x: child.x, y: child.y });\n }\n },\n [child.x, child.y],\n );\n\n const handleMouseMove = React.useCallback(\n (event: any) => {\n if (mouseIsDown && ref.current) {\n const dx = start.x + (event.clientX - mouse.x);\n const dy = start.y + (event.clientY - mouse.y);\n\n setChild({ x: dx, y: dy });\n }\n },\n [mouse.x, mouse.y, mouseIsDown, start.x, start.y],\n );\n\n const handleMouseUp = useCallback(() => {\n setMouseDown(false);\n onMouseUp({ x: child.x, y: child.y });\n }, [child.x, child.y, onMouseUp]);\n\n React.useEffect(() => {\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [handleMouseMove, handleMouseUp]);\n\n return (\n <div style={{ position: 'absolute', top: child.y, left: child.x }} ref={ref} onMouseDown={handleMouseDown}>\n {children}\n </div>\n );\n};\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport JRCore from 'App';\n\nconst JRCLoader = JRCore.registry.getLazyComponent('Loader');\n\nimport { WidgetKeys, WidgetsRootState } from 'jamespot-user-api';\nimport { Widget } from 'jamespot-front-business';\n\n/*\n Widget state\n*/\n\nexport const WidgetState = ({ name, uniqid, inplace }: { name: WidgetKeys; uniqid: string; inplace: boolean }) => {\n const state = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidgetState(state, uniqid));\n const def = Widget.definition(name);\n\n if (state?.loading) {\n return (\n <div\n style={{\n position: 'absolute',\n inset: 0,\n backgroundColor: 'rgba(255,255,255,.7)',\n display: 'flex',\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n }}>\n <JRCLoader />\n </div>\n );\n }\n\n if (state?.hover) {\n return (\n <div\n style={{\n position: 'absolute',\n inset: 0,\n backgroundColor: 'rgba(255,255,255,.7)',\n display: 'flex',\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n }}></div>\n );\n }\n\n if (!state?.initialized && inplace) {\n return <></>;\n }\n\n if (!state?.initialized && !inplace) {\n return (\n <div\n style={{\n position: 'absolute',\n inset: 0,\n backgroundColor: 'rgba(255,255,255,1)',\n display: 'flex',\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n }}>\n <img src={def.img} />\n </div>\n );\n }\n\n return <></>;\n};\n","import 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 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 { DisplayWidget } from './Widget';\nimport { WidgetLayer } from './WidgetLayer/WidgetLayer';\nimport { WidgetState } from './WidgetState';\nimport { useComponentVisible } from './hooks';\nimport { CSSWidgetWrapper } from './Widget.style';\n\ntype WidgetWrapperCoreProps = {\n uniqid: string;\n widgetObject?: Partial<jCommentList>;\n commentId?: number;\n widget: WidgetWrapperProps;\n inplace?: boolean;\n mode: WidgetDisplayMode;\n width?: number | undefined;\n editRight?: boolean;\n deleteRight?: boolean;\n onWidgetUpdate?: () => void;\n onRemove?: (id: string) => void;\n};\n\n/*\n This is a widget wrapper\n*/\nexport const WidgetWrapperCore = ({\n uniqid,\n widgetObject,\n commentId,\n widget,\n inplace = true,\n mode,\n width,\n editRight,\n deleteRight,\n onWidgetUpdate,\n onRemove,\n}: WidgetWrapperCoreProps) => {\n const dispatch = useDispatch();\n const widgetWrapper = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid));\n const indexOrder = useSelector((state: WidgetsRootState) => state.widgets.editableMap[uniqid], shallowEqual);\n const currentEditableWidgetId = useSelector(\n (state: WidgetsRootState) => state.widgets.currentEditableWidgetId,\n shallowEqual,\n );\n const isActive = useSelector(\n (state: WidgetsRootState) => state.widgets.currentEditableWidgetId === uniqid,\n shallowEqual,\n );\n const { ref, isComponentVisible, setIsComponentVisible } = useComponentVisible(false);\n\n useEffect(() => {\n if (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={widgetWrapper.widget}\n inplace={inplace}\n mode={mode}\n onClick={onClick}\n onRemove={onRemove}\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 commentId={commentId}\n inplace={inplace}\n mode={mode}\n width={width}\n onClick={onClick}\n editRight={editRight}\n deleteRight={deleteRight}\n onWidgetUpdate={onWidgetUpdate}\n onRemove={onRemove}\n />\n <WidgetLayer uniqid={uniqid} mode={mode} />\n <WidgetState name={widgetWrapper.widget.name} uniqid={widgetWrapper.widget.uniqid} inplace={inplace} />\n </CSSWidgetWrapper>\n );\n};\n\nexport default WidgetWrapperCore;\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","import React, { useMemo } from 'react';\nimport { createPortal } from 'react-dom';\nimport { v4 as uuidv4 } from 'uuid';\n\nconst EditorsPortal = J.react.registry.getLazyComponent('EditorsPortal');\nconst JRCThemeProvider = J.react.registry.getLazyComponent('ThemeProvider');\n\nconst createPortalElement = (parent: HTMLElement): HTMLDivElement => {\n let portal = document.getElementById('react-portals') as HTMLDivElement;\n\n if (!portal) {\n portal = document.createElement('div');\n portal.id = uuidv4();\n parent.appendChild(portal);\n }\n\n return portal;\n};\nexport const EditorsPanel = () => {\n const portalDiv = document.getElementById('react-portals');\n const portal = useMemo(() => portalDiv && createPortalElement(portalDiv), [portalDiv]);\n\n if (!portal) {\n return null;\n }\n return createPortal(\n <JRCThemeProvider>\n <EditorsPortal />\n </JRCThemeProvider>,\n portal,\n );\n};\n","import { getTinyMCEMentionsQueries } from 'App';\nimport {\n Application,\n ApplicationRootState,\n Comment,\n CommentRootState,\n Hook,\n HookRootState,\n Model,\n Platform,\n TinyMCE,\n Toast,\n UserCurrent,\n Widget,\n} from 'jamespot-front-business';\nimport { DriveOrFilebank, JRCCommentsBloc } from 'jamespot-react-components';\nimport jamespot, {\n AddCommentParams,\n AddRemoveActionParams,\n UpdateCommentParams,\n WidgetWrapperProps,\n jUserView,\n} from 'jamespot-user-api';\nimport { jCommentList } from 'jamespot-user-api/lib/src/types/comment';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\nimport styled, { useTheme } from 'styled-components';\nimport { WidgetList } from './widgets/WidgetList/WidgetList';\nimport WidgetWrapperCore from './widgets/WidgetWrapperCore';\nimport useCommentsLikeRT from '../hooks/useCommentsLikeRT';\nimport useCommentRT from '../hooks/useCommentRT';\n\nexport type CommentsBlocProps = {\n articleId: number;\n variant?: 'modal' | 'inline';\n};\nimport { EditorsPanel } from './widgets/components/WidgetEditorPanel';\n\nconst CommentsBlocWrapper = styled.div`\n display: flex;\n flex-direction: column;\n gap: 4px;\n flex: 1;\n width: 100%;\n margin-top: 10px;\n`;\n\nexport const CommentsBloc = ({ articleId, variant = 'inline' }: 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 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\n useCommentRT(articleId);\n\n useCommentsLikeRT(\n commentsList?.list.map((c) => c.id),\n articleId,\n );\n\n const onError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const onCommentUpdate = async (args: UpdateCommentParams) => {\n const commentToUpdate: jCommentList | undefined = commentsList?.list.find((item) => item.id === args.idComment);\n if (!commentToUpdate) return;\n return jamespot.article\n .updateComment({\n idComment: args.idComment,\n description: args.description ?? commentToUpdate.description ?? undefined,\n token: args.token,\n widgets: args.widgets,\n })\n .then(() => {\n dispatch(Comment.actions.fetchComments({ idArticle: articleId }));\n fetchToken();\n })\n .catch((e) => {\n onError(e.errorMsg);\n });\n };\n\n const onCommentDelete = async (idComment: number) => {\n // TODO : passer par le store pour avoir une réactivité directe après suppression (confirmée ensuite par retour RT)\n // -> état intermédiaire PENDING à gérer.\n jamespot.article.deleteComment(idComment).catch(onError);\n };\n\n const onWidgetUpdate = () => {\n dispatch(Comment.actions.fetchComments({ idArticle: articleId }));\n fetchToken();\n };\n\n const fetchToken = useCallback(() => {\n if (!token && !tokenLoading) {\n setTokenLoading(true);\n jamespot.network\n .token()\n .then((res) => {\n setToken(res.result);\n setTokenLoading(false);\n })\n .catch((e) => {\n onError(e.errorMsg);\n });\n }\n }, [onError, token, tokenLoading]);\n\n const onComment = useCallback(\n async (params: Pick<AddCommentParams, 'content' | 'alertAuthor' | 'sendAlert'>) => {\n if (token) {\n setLoading(true);\n const finalWidget: WidgetWrapperProps[] = Object.keys(widgetIds)\n .map((id) => {\n if (widgets?.some((w) => w.widget.uniqid === id)) {\n return widgetIds[id];\n }\n return null;\n })\n .filter((w): w is WidgetWrapperProps => w !== null);\n\n try {\n // TODO : passer par le store pour avoir une réactivité directe après ajout (confirmée ensuite par retour RT)\n // -> état intermédiaire PENDING à gérer.\n await jamespot.article\n .addComment({\n ...params,\n widgets: finalWidget,\n token,\n idArticle: articleId,\n })\n .then(() => {\n widgets.forEach((widget) => {\n dispatch(Widget.slice.actions.flushWidget({ uniqid: widget.widget.uniqid }));\n });\n setWidgets([]);\n });\n fetchToken();\n } catch (e: any) {\n onError(e.errorMsg);\n } finally {\n setLoading(false);\n }\n }\n },\n [articleId, dispatch, fetchToken, onError, token, widgetIds, widgets],\n );\n\n useEffect(() => {\n fetchToken();\n }, [fetchToken]);\n\n useEffect(() => {\n dispatch(Comment.actions.fetchComments({ idArticle: articleId }));\n\n return () => {\n dispatch(Comment.actions.discardComments({ idArticle: articleId }));\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleSocialAdd = ({\n targetId,\n targetType,\n type,\n }: AddRemoveActionParams): ReturnType<typeof jamespot.socialAction.add> =>\n jamespot.socialAction.add({\n targetType,\n targetId,\n type,\n });\n\n const handleSocialRemove = ({\n targetId,\n targetType,\n type,\n }: AddRemoveActionParams): ReturnType<typeof jamespot.socialAction.remove> =>\n jamespot.socialAction.remove({\n targetType,\n targetId,\n type,\n });\n\n const handleSocialGetUsers = ({\n targetId,\n targetType,\n type,\n }: AddRemoveActionParams): ReturnType<typeof jamespot.socialAction.getUsers<jUserView>> =>\n jamespot.socialAction.getUsers({\n targetType,\n targetId,\n type,\n });\n const handleFetchUser = (id: string): ReturnType<typeof jamespot.user.get<jUserView>> => jamespot.user.get(id);\n\n const handleFetchUserField = (id: number, type: 'popover'): ReturnType<typeof jamespot.user.getFields> =>\n jamespot.user.getFields(id, type);\n\n return (\n <>\n {tinyMCECommonOptions && (\n <>\n <CommentsBlocWrapper>\n <JRCCommentsBloc\n loading={loading}\n token={token}\n comments={commentsList?.list}\n onComment={onComment}\n onCommentUpdate={onCommentUpdate}\n onCommentDelete={onCommentDelete}\n isWidgetActive={\n !!(\n widgetHook?.isActive &&\n widgetHook?.create &&\n widgetHook?.autorize?.includes('comment')\n )\n }\n widgetListComponent={\n <WidgetList\n mode={'comment'}\n namespace={'comment'}\n onChange={(widget) => {\n setWidgets([...widgets, widget]);\n dispatch(\n Widget.slice.actions.registerWidget({\n uniqid: widget.widget.uniqid,\n widget: widget,\n }),\n );\n }}\n view={'edit'}\n />\n }\n newWidgetsWrapperComponent={\n <>\n {widgets.map(\n (widget) =>\n widget &&\n widget.widget && (\n <div key={widget.widget.uniqid}>\n <WidgetWrapperCore\n uniqid={widget.widget.uniqid}\n widget={widget}\n inplace\n mode={'edit'}\n onRemove={(id) =>\n setWidgets(widgets.filter((w) => w.widget.uniqid !== id))\n }\n />\n </div>\n ),\n )}\n </>\n }\n existingWidgetsWrapperComponent={(\n comment,\n content,\n mode,\n inplace = true,\n idComment,\n editRight = false,\n deleteRight = false,\n ) => (\n <>\n {content?.map(\n (widget) =>\n widget && (\n <div key={widget.widget.uniqid}>\n <WidgetWrapperCore\n uniqid={widget.widget.uniqid}\n widgetObject={comment}\n commentId={idComment}\n widget={widget}\n inplace={inplace}\n mode={mode}\n editRight={editRight}\n deleteRight={deleteRight}\n onWidgetUpdate={onWidgetUpdate}\n onRemove={(id) => {\n jamespot.widget\n .removeWidget({\n id: idComment,\n type: 'comment',\n uniqid: id,\n })\n .then(() => {\n dispatch(\n Comment.actions.fetchComments({\n idArticle: articleId,\n }),\n );\n fetchToken();\n })\n .catch((e) => {\n onError(e.errorMsg);\n });\n }}\n />\n </div>\n ),\n )}\n </>\n )}\n currentUser={currentUser}\n tinyMCEConfig={{\n commonOptions: tinyMCECommonOptions,\n mentionsQueries: getTinyMCEMentionsQueries(models, theme, onError),\n }}\n onError={onError}\n highlightFields={platformConfig.userHighlightFields}\n userAccountStatus={platformConfig.userAccountStatus}\n userModel={models.find((m) => m.type === 'user')}\n isWedocActive={!!onlyOffice}\n onGetHashError={(message?: string) =>\n dispatch(\n Toast.actions.error({\n label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }),\n }),\n )\n }\n activeDrives={\n // TODO : cf. https://github.com/Jamespot/jamespot-react-extensions/pull/487/\n J.debug.UploadFromDrives\n ? ([\n ...(fileBank && driveHook ? ['fileBank'] : []),\n ...Hook.utils.buildDrivesArrayFromObject(driveHook?.drives),\n ] as DriveOrFilebank[])\n : []\n }\n socialActionAdd={handleSocialAdd}\n deleteFile={async (articleId) => {\n if (!token) return;\n await jamespot.file.deleteFile(articleId, 'attachment', token);\n }}\n fetchUser={handleFetchUser}\n fetchUserFields={handleFetchUserField}\n fetchSocialActionUserList={handleSocialGetUsers}\n removeLike={handleSocialRemove}\n variant={variant}\n />\n <EditorsPanel />\n </CommentsBlocWrapper>\n </>\n )}\n </>\n );\n};\n","import { useDispatch } from 'react-redux';\nimport JRCore from '../App';\nimport { useEffect, useMemo } from 'react';\nimport { Comment } from 'jamespot-front-business';\n\nconst useCommentRT = (idArticle: number) => {\n const dispatch = useDispatch();\n const socket = useMemo(() => JRCore.socket, []);\n const rtHandlers = useMemo(() => Comment.getCommentRTHandlers(dispatch, idArticle), [dispatch, idArticle]);\n\n useEffect(() => {\n rtHandlers.forEach((handler) => {\n socket.onMessage(handler.namespace, handler.function, handler.handler);\n });\n return () => {\n rtHandlers.forEach((handler) => {\n socket.offMessage(handler.namespace, handler.function, handler.handler);\n });\n };\n }, [rtHandlers, socket]);\n};\n\nexport default useCommentRT;\n","import { useDispatch } from 'react-redux';\nimport JRCore from '../App';\nimport { useEffect, useMemo } from 'react';\nimport { Comment } from 'jamespot-front-business';\n\nconst useCommentsLikeRT = (idComments: number[] | undefined, idArticle: number) => {\n const dispatch = useDispatch();\n const socket = useMemo(() => JRCore.socket, []);\n const rtHandlers = useMemo(\n () => Comment.getCommentsLikeRTHandlers(dispatch, idComments, idArticle),\n [dispatch, idComments, idArticle],\n );\n\n useEffect(() => {\n rtHandlers.forEach((handler) => {\n socket.onMessage(handler.namespace, handler.function, handler.handler);\n });\n return () => {\n rtHandlers.forEach((handler) => {\n socket.offMessage(handler.namespace, handler.function, handler.handler);\n });\n };\n }, [rtHandlers, socket]);\n};\n\nexport default useCommentsLikeRT;\n","import * as React from 'react';\n\n// FIXME move to j-react-components + display error if dev mode\nexport const Empty = () => <></>;\n","import * as React from 'react';\nimport { Outlet, matchPath } from 'react-router-dom';\nimport { useIntl } from 'react-intl';\nimport type { JRCAppColumnProps } from 'jamespot-react-components';\nimport JRCore from 'App';\nimport { useLocation } from 'react-router-dom';\nimport { LayoutMode } from 'jamespot-react-components';\nimport { useMemo } from 'react';\n\nconst Container = JRCore.registry.getLazyComponent('Container');\nconst AppColumn = JRCore.registry.getLazyComponent('AppColumn');\nconst MainColumn = JRCore.registry.getLazyComponent('MainColumn');\n\nexport type TwoColLayoutRoute = {\n path: string;\n paths?: string[];\n key: string;\n icon: string;\n label: string;\n group?: string;\n absolutePath?: boolean;\n};\n\nexport type TwoColLayoutRoutes<T extends TwoColLayoutRoute = TwoColLayoutRoute> = Record<string, T>;\n\nexport type TwoColLayoutProps = {\n extensionRoute: string;\n routes: TwoColLayoutRoutes;\n mode?: LayoutMode;\n description: JRCAppColumnProps['description'];\n};\n\nexport function TwoColLayout({ extensionRoute, routes, description, mode = 'center' }: TwoColLayoutProps) {\n const intl = useIntl();\n const { pathname } = useLocation();\n\n const ROUTES_ARRAY = useMemo(() => Object.values(routes), [routes]);\n const [activeTab, setActiveTab] = React.useState(ROUTES_ARRAY?.[0]?.key);\n\n const tabs = ROUTES_ARRAY.map((tab) => ({\n ...tab,\n label: intl.formatMessage({ id: tab.label }),\n href: tab.absolutePath ? tab.path : `/ng/rr/${extensionRoute}/${tab.path}`,\n group: tab.group ? intl.formatMessage({ id: tab.group }) : undefined,\n }));\n\n React.useEffect(() => {\n const activeRoute = ROUTES_ARRAY.find((route) => {\n if (`/ng/rr/${extensionRoute}/${route.path}` === pathname) {\n return true;\n }\n\n return route.paths?.reduce<boolean>((previousValue: boolean, currentValue: string) => {\n const pattern = `/ng/rr/${extensionRoute}/${currentValue}`;\n const isMatch = matchPath(pattern, pathname) !== null;\n return previousValue || isMatch;\n }, false);\n });\n if (activeRoute) setActiveTab(activeRoute.key);\n }, [pathname, ROUTES_ARRAY, extensionRoute]);\n\n return (\n <React.Suspense fallback={<></>}>\n <Container mode={mode}>\n <AppColumn mode={mode} description={description} tabs={tabs} activeTab={activeTab || ''} />\n <MainColumn mode={mode}>\n <Outlet />\n </MainColumn>\n </Container>\n </React.Suspense>\n );\n}\n","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<{ visible: boolean; position: 'left' | 'right' }>`\n position: absolute;\n top: 0;\n ${(props) => (props.position === 'left' ? 'left: 0px' : '')}\n right: ${(props) => (props.visible ? '0' : '-1000')}px;\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\nexport const CSSEditorContent = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n padding: 12px;\n overflow: auto;\n margin-bottom: 12px;\n`;\n\nexport const CSSEditorMenu = styled.div`\n width: ${EDITOR_MENU_WIDTH}px;\n padding-top: 60px;\n display: flex;\n flex-direction: column;\n border-right: 1px solid ${(props) => props.theme.color.grey2};\n`;\n\nexport const CSSEditorMenuButton = styled.button<{ isActive?: boolean }>`\n border-radius: 4px;\n cursor: pointer;\n height: 42px;\n margin: 4px;\n width: 42px;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: ${(props) => (props.isActive ? props.theme.color.grey1 : props.theme.color.white)};\n &:hover {\n background-color: ${(props) => props.theme.color.grey1};\n }\n`;\n\nexport const CSSInputWrapper = styled.div`\n display: flex;\n border: 1px solid ${(props) => props.theme.color.grey1};\n border-radius: ${RADIUS}px;\n margin-bottom: 24px;\n input {\n width: 100%;\n border: 0;\n height: ${INPUT_HEIGHT}px;\n margin: 0;\n }\n`;\n\nexport const CSSEditorWidget = styled.div`\n display: flex;\n flex-direction: row;\n padding: 12px;\n background-color: ${(props) => props.theme.color.grey0};\n border-radius: 8px;\n margin-bottom: 4px;\n`;\n\nexport const CSSEditorWidgetLabel = styled.div`\n display: flex;\n flex: 1;\n align-items: center;\n`;\n\nexport const CSSEditorWidgetOption = styled.div`\n width: 40px;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nexport const CSSEditorLayer = styled.div`\n flex-direction: row;\n display: flex;\n align-items: center;\n`;\n\nexport const CSSEditorLayerTitle = styled.div`\n flex: 1;\n display: flex;\n align-items: center;\n`;\n","export const EDITOR_TOP = 90;\nexport const EDITOR_WIDTH = 440;\nexport const EDITOR_MENU_WIDTH = 50;\n","import React from 'react';\n\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { JRCButton, JRCIcon } from 'jamespot-react-components';\n\nimport { CSSEditorAction, CSSEditorHeader, CSSEditorLabel, CSSEditorMenuButton } from './style';\nimport { WidgetEditor, EditorsRootState } from 'jamespot-front-business';\n\n/*\n Editor popup (center part)\n*/\nexport const EditorPopup = ({ uniqid }: { uniqid: string }) => {\n const dispatch = useDispatch();\n const editor = useSelector((state: EditorsRootState) => WidgetEditor.selectors.selectEditor(state, uniqid));\n\n const onClick = () => {\n dispatch(WidgetEditor.slice.actions.flushEditorPopup({ uniqid }));\n };\n\n const onSave = () => {\n dispatch(WidgetEditor.slice.actions.flushEditorPopup({ uniqid }));\n };\n\n if (editor && editor.popup && editor.view) {\n return (\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column', backgroundColor: 'white', marginTop: 90 }}>\n <CSSEditorHeader>\n <CSSEditorAction />\n <CSSEditorLabel>Popup</CSSEditorLabel>\n <CSSEditorAction>\n <CSSEditorMenuButton onClick={onClick}>\n <JRCIcon name=\"icon-times\" color=\"grey2\" />\n </CSSEditorMenuButton>\n </CSSEditorAction>\n </CSSEditorHeader>\n <div style={{ flex: 1, display: 'flex' }}>{editor.view}</div>\n <CSSEditorHeader>\n <JRCButton onClick={onSave}>Save</JRCButton>\n </CSSEditorHeader>\n </div>\n );\n }\n\n return <></>;\n};\n","import React from 'react';\n\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { WidgetEditor, Widget, updateWidgetContent, Application, Toast } from 'jamespot-front-business';\n\nimport JRCore from 'App';\n\nimport jamespot, {\n CombinedWidgetContent,\n ensureWidgetApiType,\n ensureWidgetArticleAttachmentType,\n ensureWidgetArticleButtonType,\n ensureWidgetArticleGalleryType,\n ensureWidgetArticleImageType,\n ensureWidgetArticleSliderType,\n ensureWidgetArticleTextType,\n ensureWidgetArticleTitleType,\n ensureWidgetCheckListType,\n ensureWidgetDatasourceTableType,\n jObjectLittle,\n WidgetApiContent,\n WidgetArticleAttachmentContent,\n WidgetArticleButtonContent,\n WidgetArticleGalleryContent,\n WidgetArticleImageContent,\n WidgetArticleSliderContent,\n WidgetArticleTextContent,\n WidgetArticleTitleContent,\n WidgetDatasourceTableContent,\n WidgetsRootState,\n WidgetStateProps,\n} from 'jamespot-user-api';\nimport { useIntl } from 'react-intl';\n\nconst WidgetArticleTitleEditor = JRCore.registry.getLazyComponent('WidgetArticleTitleEditor');\nconst WidgetArticleTextEditor = JRCore.registry.getLazyComponent('WidgetArticleTextEditor');\nconst WidgetArticleGalleryEditor = JRCore.registry.getLazyComponent('WidgetArticleGalleryEditor');\nconst WidgetArticleAttachmentEditor = JRCore.registry.getLazyComponent('WidgetArticleAttachmentEditor');\nconst WidgetArticleSliderEditor = JRCore.registry.getLazyComponent('WidgetArticleSliderEditor');\n\nconst WidgetArticleImageEditor = JRCore.registry.getLazyComponent('WidgetArticleImageEditor');\nconst WidgetButtonEditor = JRCore.registry.getLazyComponent('WidgetButtonEditor');\nconst WidgetApiEditor = JRCore.registry.getLazyComponent('WidgetApiEditor');\nconst WidgetCheckListEditor = JRCore.registry.getLazyComponent('WidgetCheckListEditor');\n\nconst WidgetDatasourceTableEditor = JRCore.registry.getLazyComponent('WidgetDatasourceTableEditor');\n\n/*\n Editor Factory\n*/\nexport const Editor = ({ uniqid }: { uniqid: string }) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const token = useSelector(Widget.selectors.selectToken);\n const widgetWrapper = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid));\n const widgetObject = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidgetObject(state, uniqid));\n\n const onSave = (content: Partial<CombinedWidgetContent>) => {\n /*\n Update widget & Flush editor\n */\n if (widgetWrapper) {\n dispatch(Widget.slice.actions.updateWidget({ uniqid, content }));\n }\n\n dispatch(WidgetEditor.slice.actions.flushEditor({ uniqid }));\n };\n\n const onStateChange = (states: WidgetStateProps, id?: string) => {\n /*\n Set widget state (busy, loading, initialized)\n */\n if (id !== undefined) {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid: id, ...states }));\n } else {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, ...states }));\n }\n };\n\n const onOpen = (view: React.ReactElement) => {\n /*\n Register popup (central)\n */\n dispatch(WidgetEditor.slice.actions.registerEditorPopup({ uniqid, view }));\n };\n\n const validateWidgetObject = (object?: Partial<jObjectLittle>): object is jObjectLittle => {\n return object !== undefined && object.id !== undefined && object.type !== undefined;\n };\n\n const widget = widgetWrapper?.widget;\n\n if (!widget) return null;\n\n if (ensureWidgetArticleButtonType(widget)) {\n return (\n <WidgetButtonEditor\n {...widget.content}\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleButtonContent>(uniqid, content, false));\n }}\n onSave={() => onSave({})}\n />\n );\n } else if (ensureWidgetArticleGalleryType(widget)) {\n return (\n <WidgetArticleGalleryEditor\n token={token}\n content={widget.content}\n onChange={(content) =>\n dispatch(updateWidgetContent<WidgetArticleGalleryContent>(uniqid, content, false))\n }\n onSave={onSave}\n onStateChange={onStateChange}\n />\n );\n } else if (ensureWidgetArticleAttachmentType(widget)) {\n return (\n <WidgetArticleAttachmentEditor\n token={token}\n content={widget.content}\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleAttachmentContent>(uniqid, content, false));\n }}\n onSave={onSave}\n onStateChange={onStateChange}\n onOpen={onOpen}\n />\n );\n } else if (ensureWidgetArticleImageType(widget)) {\n return (\n <WidgetArticleImageEditor\n content={widget.content}\n token={token}\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleImageContent>(uniqid, content, false));\n }}\n onSave={onSave}\n onStateChange={onStateChange}\n />\n );\n } else if (ensureWidgetApiType(widget)) {\n return (\n <WidgetApiEditor\n onChange={(content) => dispatch(updateWidgetContent<WidgetApiContent>(uniqid, content, false))}\n provider={async (url: string) => {\n return fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n .then((resp) => resp.json())\n .then((response) => {\n return response.result;\n });\n }}\n initialUrl={widget.content.url ?? ''}\n order={widget.content.order ?? ''}\n orderBy={widget.content.orderBy ?? 'asc'}\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 (ensureWidgetCheckListType(widget)) {\n return (\n <WidgetCheckListEditor\n token={token}\n uniqid={widget.uniqid}\n content={widget.content}\n onChangeContent={(uniqid, content) => {\n dispatch(updateWidgetContent(uniqid, content, false));\n }}\n onChangeWrapper={(content) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ ...content }));\n }}\n onSave={(uniqid, content) => {\n if (!validateWidgetObject(widgetObject)) {\n onSave(content);\n return;\n }\n\n jamespot.widget\n .updateWidget({\n id: widgetObject.id,\n uniqid: uniqid,\n type: widgetObject.type,\n title: widgetWrapper.title,\n content,\n })\n .then(() => {\n onSave(content);\n })\n .catch((e: any) => {\n dispatch(\n Toast.actions.error({\n label: e.errorMsg ?? intl.formatMessage({ id: 'GLOBAL_Error' }),\n }),\n );\n });\n }}\n />\n );\n } else if (ensureWidgetDatasourceTableType(widget)) {\n const studioHook = Application.selectors.selectById(JRCore.store.getState(), 'StudioHook');\n const fileBankHook = Application.selectors.selectById(JRCore.store.getState(), 'FileBankHook');\n return (\n <WidgetDatasourceTableEditor\n {...widget.content}\n uri={widget.content.uri}\n limit={widget.content.limit ?? 20}\n editorAppDependencies={{\n useStudio: studioHook ? true : false,\n useFileBank: fileBankHook ? true : false,\n }}\n onSave={onSave}\n onChange={(content, override) =>\n dispatch(updateWidgetContent<WidgetDatasourceTableContent>(uniqid, content, override ?? false))\n }\n onError={(label) => {\n dispatch(Toast.actions.error({ label }));\n }}\n />\n );\n } else {\n return <>cannot display editor</>;\n }\n};\n","import React from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { WidgetEditor, Widget } from 'jamespot-front-business';\n\nimport { WidgetKeys, WidgetsRootState } from 'jamespot-user-api';\nimport { useIntl } from 'react-intl';\nimport { CSSEditorWidget, CSSEditorWidgetLabel, CSSEditorWidgetOption } from './style';\nimport { BETA_JRCDragAndDrop, JRCIcon } from 'jamespot-react-components';\nimport { WidgetList } from 'registry/coreComponents';\n\n/*\n Editor widgets (widgets)\n*/\nexport const EditorTabWidgets = ({ uniqid }: { uniqid: string; namespace: string }) => {\n const dispatch = useDispatch();\n const intl = useIntl();\n const content = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidgetContent(state, uniqid));\n\n const onClick = (uniqid: string, name: WidgetKeys) => {\n /*\n Register Editor\n */\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name }));\n };\n\n return (\n <div style={{ flex: 1 }}>\n <Layers uniqid={uniqid} />\n {content && content.widgets ? (\n content.widgets.map((widgetWrapper, index: number) => {\n const def = Widget.definition(widgetWrapper.widget.name);\n return (\n <div key={index}>\n <CSSEditorWidget>\n <CSSEditorWidgetLabel\n onClick={() => onClick(widgetWrapper.widget.uniqid, widgetWrapper.widget.name)}>\n {intl.formatMessage({ id: def.label })}\n </CSSEditorWidgetLabel>\n <CSSEditorWidgetOption\n onClick={() => {\n if (content.widgets) {\n dispatch(\n Widget.slice.actions.updateWidget({\n uniqid,\n content: {\n ...content,\n widgets: [\n ...content.widgets.filter((_, n: number) => n !== index),\n ],\n },\n }),\n );\n }\n }}>\n <JRCIcon name={'icon-trash'} />\n </CSSEditorWidgetOption>\n </CSSEditorWidget>\n </div>\n );\n })\n ) : (\n <></>\n )}\n </div>\n );\n};\n\nconst Layers = ({ uniqid }: { uniqid: string }) => {\n const dispatch = useDispatch();\n const layers = useSelector((state: WidgetsRootState) => state.widgets.ids[uniqid].widget.layers, shallowEqual);\n\n //const flushEditor = () => dispatch(WidgetEditor.slice.actions.flushEditor({ uniqid }));\n\n return (\n <>\n <BETA_JRCDragAndDrop\n onDrag={() => {\n //console.log(dragIndex, hoverIndex)\n }}\n renderEl={(layer, index) => {\n return <EditorWidgetLayer uniqid={layer} key={index} />;\n }}\n elms={layers ? layers : []}\n />\n <WidgetList\n namespace={'default'}\n onChange={(widget) => {\n dispatch(Widget.slice.actions.registerLayer({ uniqid, widget }));\n }}\n mode={'button'}\n />\n </>\n );\n};\n\nconst EditorWidgetLayerLock = ({ uniqid }: { uniqid: string }) => {\n const dispatch = useDispatch();\n const layer = useSelector((state: WidgetsRootState) => state.widgets.layers[uniqid]);\n return (\n <div\n onClick={() => {\n dispatch(Widget.slice.actions.updateLayer({ uniqid, props: { locked: !layer.locked } }));\n }}>\n <JRCIcon name={layer.locked ? 'icon-lock' : 'icon-unlock'} />\n </div>\n );\n};\n\nconst EditorWidgetLayerVisibility = ({ uniqid }: { uniqid: string }) => {\n const dispatch = useDispatch();\n const layer = useSelector((state: WidgetsRootState) => state.widgets.layers[uniqid]);\n return (\n <div\n onClick={() => {\n dispatch(Widget.slice.actions.updateLayer({ uniqid, props: { visible: !layer.visible } }));\n }}>\n <JRCIcon name={layer.visible ? 'icon-eye' : 'icon-eye-slash'} />\n </div>\n );\n};\n\nconst EditorWidgetLayerFlush = ({ uniqid, layerId }: { uniqid: string; layerId: string }) => {\n const dispatch = useDispatch();\n return (\n <div\n onClick={() => {\n dispatch(Widget.slice.actions.flushLayer({ uniqid, layerId }));\n }}>\n <JRCIcon name={'icon-trash'} />\n </div>\n );\n};\n\nconst EditorWidgetLayer = ({ uniqid }: { uniqid: string }) => {\n const layer = useSelector((state: WidgetsRootState) => state.widgets.layers[uniqid]);\n return (\n <>\n {layer.title}\n {layer.widgets.map((widget, index) => {\n const def = Widget.definition(widget.widget.name);\n\n return (\n <div style={{ flexDirection: 'row', display: 'flex' }} key={index}>\n <div style={{ flex: 1, alignItems: 'center' }}>{def.label}</div>\n <EditorWidgetLayerLock uniqid={uniqid} />\n <EditorWidgetLayerVisibility uniqid={uniqid} />\n <EditorWidgetLayerFlush uniqid={widget.widget.uniqid} layerId={layer.uniqid} />\n </div>\n );\n })}\n </>\n );\n};\n","import React from 'react';\n\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport JRCore from 'App';\n\nconst JRCButton = JRCore.registry.getLazyComponent('Button');\n\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { JRCInputText } from 'jamespot-react-components';\nimport { WidgetsRootState } from 'jamespot-user-api';\nimport { useForm } from 'react-hook-form';\nimport { useIntl } from 'react-intl';\n\n/*\n Editor tab wrapper (this is all the properties available on a widget wrapper)\n*/\nexport const EditorTabWrapper = ({ uniqid }: { uniqid: string }) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const wrapper = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid));\n const [title, setTitle] = React.useState<string | undefined>(wrapper?.title);\n\n const onClick = () => {\n if (title !== undefined) {\n /*\n Update editor\n */\n dispatch(Widget.slice.actions.updateWidgetWrapper({ uniqid, title }));\n /*\n Flush editor\n */\n dispatch(WidgetEditor.slice.actions.flushEditor({ uniqid }));\n }\n };\n\n const { control, watch } = useForm({\n defaultValues: { text: title ?? '' },\n criteriaMode: 'all',\n });\n\n React.useEffect(() => {\n const subscription = watch((data: any) => {\n setTitle(data.text);\n });\n return () => subscription.unsubscribe();\n }, [watch]);\n\n return wrapper ? (\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column', justifyContent: 'space-between' }}>\n <JRCInputText\n name={'text'}\n control={control}\n placeholder={intl.formatMessage({ id: 'WIDGET_Title' })}></JRCInputText>\n <JRCButton onClick={onClick} minWidth={'100%'}>\n {intl.formatMessage({ id: 'GLOBAL_Save' })}\n </JRCButton>\n </div>\n ) : (\n <>No wrapper</>\n );\n};\n","import React from 'react';\n\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { Editor } from './Editor';\n\nimport JRCore from 'App';\n\nconst JRCIcon = JRCore.registry.getLazyComponent('Icon');\n\nimport {\n CSSEditor,\n CSSEditorAction,\n CSSEditorContent,\n CSSEditorHeader,\n CSSEditorLabel,\n CSSEditorMask,\n CSSEditorMenu,\n CSSEditorMenuButton,\n} from './style';\n\nimport { EditorsRootState, Widget, WidgetEditor } from 'jamespot-front-business';\nimport { WidgetsRootState } from 'jamespot-user-api';\nimport { useIntl } from 'react-intl';\nimport { EditorTabWidgets } from './EditorTabWidgets';\nimport { EditorTabWrapper } from './EditorTabWrapper';\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 editor = useSelector((state: EditorsRootState) => WidgetEditor.selectors.selectEditor(state, uniqid));\n\n const def = Widget.definition(editor?.name);\n\n const [visible, isVisibile] = React.useState<boolean>(false);\n const [tab, setTab] = React.useState<string>('default');\n\n const onClose = () => {\n dispatch(WidgetEditor.slice.actions.flushEditor({ uniqid }));\n };\n\n React.useEffect(() => {\n setTimeout(() => {\n isVisibile(true);\n }, 0);\n });\n\n return editor ? (\n <CSSEditorMask>\n <CSSEditor visible={visible} 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 <JRCIcon name=\"icon-font\" color=\"grey2\" />\n </CSSEditorMenuButton>\n ) : (\n <></>\n )}\n {def.panel.useEditor ? (\n <CSSEditorMenuButton isActive={tab === 'default'} onClick={() => setTab('default')}>\n <JRCIcon name=\"icon-pen\" color=\"grey2\" />\n </CSSEditorMenuButton>\n ) : (\n <></>\n )}\n {def.panel.useWidgets ? (\n <EditorConditonalTab uniqid={uniqid}>\n <CSSEditorMenuButton isActive={tab === 'widgets'} onClick={() => setTab('widgets')}>\n <JRCIcon name=\"icon-sliders\" color=\"grey2\" />\n </CSSEditorMenuButton>\n </EditorConditonalTab>\n ) : (\n <></>\n )}\n </CSSEditorMenu>\n )}\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column' }}>\n <CSSEditorHeader>\n <EditorPositionOption uniqid={uniqid} position={editor.position}></EditorPositionOption>\n <CSSEditorLabel>{intl.formatMessage({ id: def.label })}</CSSEditorLabel>\n <CSSEditorAction>\n <CSSEditorMenuButton onClick={onClose}>\n <JRCIcon name=\"icon-times\" color=\"grey2\" />\n </CSSEditorMenuButton>\n </CSSEditorAction>\n </CSSEditorHeader>\n <CSSEditorContent>\n {tab === 'default' && def.panel.useEditor ? <Editor uniqid={editor.uniqid} /> : <></>}\n {tab === 'wrapper' && def.panel.useWrapper ? (\n <EditorTabWrapper uniqid={editor.uniqid} />\n ) : (\n <></>\n )}\n {tab === 'widgets' && def.panel.useWidgets ? (\n <EditorTabWidgets uniqid={uniqid} namespace={def.name} />\n ) : (\n <></>\n )}\n </CSSEditorContent>\n </div>\n </CSSEditor>\n {editor?.popup ? (\n <div style={{ position: 'absolute', inset: 0, backgroundColor: '#000', opacity: '.7' }}></div>\n ) : (\n <></>\n )}\n </CSSEditorMask>\n ) : (\n <></>\n );\n};\n\nconst EditorPositionOption = ({ uniqid, position }: { uniqid: string; position: 'left' | 'right' }) => {\n const dispatch = useDispatch();\n\n const onClick = () => {\n dispatch(\n WidgetEditor.slice.actions.setEditorPosition({ uniqid, position: position === 'left' ? 'right' : 'left' }),\n );\n };\n\n return (\n <CSSEditorAction>\n <CSSEditorMenuButton onClick={onClick}>\n <JRCIcon name={position === 'left' ? 'icon-angle-right' : 'icon-angle-left'} color=\"grey2\" />\n </CSSEditorMenuButton>\n </CSSEditorAction>\n );\n};\n\nconst EditorConditonalTab = ({ uniqid, children }: { uniqid: string; children: React.ReactElement }) => {\n const widgetState = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidgetState(state, uniqid));\n\n if (widgetState?.initialized) {\n return children;\n }\n\n return <></>;\n};\n","import React from 'react';\n\nimport { useSelector } from 'react-redux';\n\nimport { EDITOR_TOP, EDITOR_WIDTH } from './const';\nimport { EditorPopup } from './EditorPopup';\nimport { EditorWrapper } from './EditorWrapper';\nimport { CSSEditorPortal } from './style';\nimport { WidgetEditor } from 'jamespot-front-business';\n\nimport styled from 'styled-components';\n\nexport const CSSEditorPortalWrapper = styled.div`\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 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);\n return (\n <CSSEditorPortalWrapper>\n {editors.map((editor, index: number) => {\n if (editor.position === 'left') {\n return (\n <CSSEditorPortal isActive={false} key={index}>\n <CSSEditorPortalRow>\n <EditorWrapper uniqid={editor.uniqid} 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 { JTinyMCEExtensionsBuilders } from 'jamespot-react-components';\nimport { JIACapabilities } from 'jamespot-user-api';\nimport { useCallback, useMemo, useState } from 'react';\nimport { useIntl } from 'react-intl';\n\nexport type JiaTextEnhanceQuery = {\n resolve: (value: string | PromiseLike<string>) => void;\n reject: (reason?: any) => void;\n capability: JIACapabilities;\n text: string;\n};\n\nexport const useAI = () => {\n const [query, setQuery] = useState<JiaTextEnhanceQuery | undefined>();\n const intl = useIntl();\n\n const PrepareAndSetQuery = useCallback((query: JiaTextEnhanceQuery) => {\n const internalResolve = (value: string | PromiseLike<string>) => {\n query.resolve(value);\n setQuery(undefined);\n };\n const internalReject = (value: any) => {\n query.reject(value);\n setQuery(undefined);\n };\n setQuery({\n ...query,\n reject: internalReject,\n resolve: internalResolve,\n });\n }, []);\n\n const fetch = useCallback(\n (text: string, capability: JIACapabilities) => {\n return new Promise<string>((resolve, reject) => {\n PrepareAndSetQuery({\n reject,\n resolve,\n text,\n capability,\n });\n });\n },\n [PrepareAndSetQuery],\n );\n\n const AICapabilities = useMemo(() => {\n return {\n develop: (text: string) => fetch(text, 'develop'),\n summarize: (text: string) => fetch(text, 'summarize'),\n tldr: (text: string) => fetch(text, 'tldr'),\n en: (text: string) => fetch(text, 'en'),\n es: (text: string) => fetch(text, 'es'),\n formal: (text: string) => fetch(text, 'formal'),\n funny: (text: string) => fetch(text, 'funny'),\n };\n }, [fetch]);\n\n const ext = useMemo(() => JTinyMCEExtensionsBuilders.jia(AICapabilities, intl), [intl, AICapabilities]);\n\n return [query, ext] as const;\n};\n","import { JiaTextEnhanceQuery } from 'hooks/useAI';\nimport { JRCLoader, JRCModalContent, JRCModalLayout, JRCTypography } from 'jamespot-react-components';\nimport jamespot from 'jamespot-user-api';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { useIntl } from 'react-intl';\n\nimport styled, { useTheme } from 'styled-components';\n\nconst TextWrapper = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n`;\n\nexport type AIModalProps = {\n query: JiaTextEnhanceQuery | undefined;\n};\n\ntype ResponseType = {\n response: string | undefined;\n loading: boolean;\n error: string | undefined;\n};\n\nconst loadingResponse: ResponseType = {\n response: undefined,\n loading: true,\n error: undefined,\n};\n\nexport const AIModal = ({ query }: AIModalProps) => {\n const intl = useIntl();\n const [response, setResponse] = useState<ResponseType>(loadingResponse);\n const theme = useTheme();\n\n const sendAIRequest = useCallback(\n (query: JiaTextEnhanceQuery) => {\n setResponse(loadingResponse);\n jamespot.jia\n .textEnhancement({ text: query.text, capacity: query.capability })\n .then((response) => {\n if (response.error) {\n setResponse({\n error: `${intl.formatMessage({ id: 'JIA_ERROR_AI_CALL' })}${\n response.errorMsg && ': ' + response.errorMsg\n }`,\n loading: false,\n response: undefined,\n });\n return;\n }\n const textResponse = response.result.text;\n setResponse({\n error: undefined,\n loading: false,\n response: textResponse,\n });\n })\n .catch((_err) => {\n setResponse({\n error: intl.formatMessage({ id: 'JIA_ERROR_AI_CALL' }),\n loading: false,\n response: undefined,\n });\n });\n },\n [intl],\n );\n\n useEffect(() => {\n if (query && query.text.trim().length > 0) {\n sendAIRequest(query);\n }\n }, [query, sendAIRequest]);\n\n return (\n <JRCModalLayout\n zIndex={theme.zIndex.tinyMCEModal}\n open={!!query}\n closeHandler={() => {\n query?.reject();\n }}>\n <JRCModalContent\n overflow=\"scroll\"\n buttons={[\n {\n children: intl.formatMessage({ id: 'GLOBAL_Try_Again' }),\n clickHandler: () => {\n query && sendAIRequest(query);\n },\n },\n {\n children: intl.formatMessage({ id: 'GLOBAL_Validation' }),\n clickHandler: () => response.response && query?.resolve(response.response),\n },\n {\n children: intl.formatMessage({ id: 'GLOBAL_Cancel' }),\n clickHandler: () => query?.reject(),\n },\n ]}\n isFull>\n <TextWrapper>\n {response.loading && (\n <>\n <JRCLoader />\n <JRCTypography align=\"center\">\n {intl.formatMessage({ id: 'JIA_WAITING_WARNIG' })}\n </JRCTypography>\n </>\n )}\n {!response.loading && response.error && <p>{response.error}</p>}\n {!response.loading && response.response && <p>{response.response}</p>}\n </TextWrapper>\n </JRCModalContent>\n </JRCModalLayout>\n );\n};\n","import { Model, Toast } from 'jamespot-front-business';\nimport React, { useCallback, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useIntl } from 'react-intl';\nimport { useTheme } from 'styled-components';\nimport { useAI } from 'hooks/useAI';\nimport { getTinyMCEMentionsQueries } from 'App';\nimport { JRCInputTinyMCE, JRCInputTinyMCEProps } from 'jamespot-react-components';\nimport { FieldValues } from 'react-hook-form/dist/types';\nimport { AIModal } from './extension/AIModal';\nimport JRCore from 'App';\n\nexport type JRCInputTinyMCEWithExtProps<T extends FieldValues> = Omit<\n JRCInputTinyMCEProps<T>,\n 'commonOptions' | 'mentionsQueries' | 'additionalExtensions'\n>;\n\nexport const JRCInputTinyMCEWithExt = <T extends FieldValues = FieldValues>(props: JRCInputTinyMCEWithExtProps<T>) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const theme = useTheme();\n const models = useSelector(Model.selectors.selectAll);\n const [query, extAI] = useAI();\n\n const isAIActive = useMemo(() => {\n return J.hooks?.JIAHook?.isActive && J.debug['JIABETA'];\n }, []);\n\n const extArray = useMemo(() => {\n return isAIActive ? [extAI] : [];\n }, [extAI, isAIActive]);\n\n const onMentionsQueryError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const tinyMentionsQueries = useMemo(() => {\n return getTinyMCEMentionsQueries(models, theme, onMentionsQueryError);\n }, [models, onMentionsQueryError, theme]);\n\n const commonOptions = useMemo(() => JRCore.tinymceCommonOptions, []);\n\n return (\n <>\n {commonOptions && (\n <JRCInputTinyMCE\n commonOptions={commonOptions}\n additionalExtensions={extArray}\n mentionsQueries={tinyMentionsQueries}\n {...props}\n />\n )}\n <AIModal query={query} />\n </>\n );\n};\n","import { Model, Toast } from 'jamespot-front-business';\nimport React, { useCallback, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useIntl } from 'react-intl';\nimport { useTheme } from 'styled-components';\nimport { useAI } from 'hooks/useAI';\nimport { getTinyMCEMentionsQueries } from 'App';\nimport { JRCInputTinyMCERaw, JRCInputTinyMCERawProps } from 'jamespot-react-components';\nimport { AIModal } from './extension/AIModal';\nimport JRCore from 'App';\n\nexport type JRCInputTinyMCEWithExtProps = Omit<\n JRCInputTinyMCERawProps,\n 'commonOptions' | 'mentionsQueries' | 'additionalExtensions'\n>;\n\nexport const JRCInputTinyMCEWithExtRaw = (props: JRCInputTinyMCEWithExtProps) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const theme = useTheme();\n const models = useSelector(Model.selectors.selectAll);\n const [query, extAI] = useAI();\n\n const isAIActive = useMemo(() => {\n return J.hooks?.JIAHook?.isActive && J.debug['JIABETA'];\n }, []);\n\n const extArray = useMemo(() => {\n return isAIActive ? [extAI] : [];\n }, [extAI, isAIActive]);\n\n const onMentionsQueryError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const tinyMentionsQueries = useMemo(() => {\n return getTinyMCEMentionsQueries(models, theme, onMentionsQueryError);\n }, [models, onMentionsQueryError, theme]);\n\n const commonOptions = useMemo(() => JRCore.tinymceCommonOptions, []);\n\n return (\n <>\n {commonOptions && (\n <JRCInputTinyMCERaw\n commonOptions={commonOptions}\n additionalExtensions={extArray}\n mentionsQueries={tinyMentionsQueries}\n {...props}\n />\n )}\n <AIModal query={query} />\n </>\n );\n};\n","import * as React from 'react';\nimport { DisplayFormRef, FieldsWith } from './types';\nimport { useForm, Control, FieldValues } from 'react-hook-form';\nimport { useDisplayForm } from './useDisplay';\nimport styled, { css } from 'styled-components';\nimport { FormEventHandler, ReactNode, Ref } from 'react';\n\nconst StretchContainer = css`\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n`;\n\nconst Container = styled.div<{ stretch?: boolean }>`\n ${({ stretch }) => stretch && StretchContainer}\n`;\n\nconst Form = styled.form<{ stretch?: boolean }>`\n ${({ stretch }) => stretch && StretchContainer}\n`;\n\nconst 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: FieldsWith<'input', TFieldValues>;\n extraInputs?: (control: Control<TFieldValues>) => React.ReactNode;\n defaultValues?: any;\n onSubmit?: any;\n buttons?: React.ReactNode;\n readOnly?: boolean;\n dataCy?: string;\n stretch?: boolean;\n children?: React.ReactNode;\n};\n\n/****\n * The jamespot model depend on the platform\n * For example a user can have the size attribute only for a given platform\n * The model specifics of a platform are stored in J.model\n *\n * This component display an array of attributes only if this attribute is activated on the platform\n */\nconst _DisplayForm = <TFieldValues extends FieldValues>(\n props: DisplayFormProps<TFieldValues>,\n ref: React.ForwardedRef<DisplayFormRef>,\n) => {\n const formRef = React.useRef<HTMLFormElement | HTMLDivElement>(null);\n\n const [configuration, defaultValues] = useDisplayForm(props.fields, props.type);\n\n const { handleSubmit, control, reset, ...formFn } = useForm({\n defaultValues: {\n ...defaultValues,\n ...props.defaultValues,\n },\n criteriaMode: 'all',\n });\n\n React.useImperativeHandle(\n ref,\n () => ({\n ...formFn,\n handleSubmit,\n control,\n reset: () => {\n // in case the form is scrollable\n formRef?.current?.scrollTo(0, 0);\n // reset react-hook-form form\n reset();\n },\n }),\n // 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"],"names":["CSSSquareWidgetWrapper","CSSSquareWidget","props","theme","color","grey2","available","CSSWidgetButton","primary","open","CSSWrapWidgetWrapper","CSSWrapTitle","grey0","CSSWrapWidget","index","full","Flex","direction","gap","JRCButton","registry","getLazyComponent","JRCModalLayout","JRCModalContent","JRCTooltip","JRCIconButton","WidgetList","mode","view","children","namespace","onChange","isOpen","setOpen","widgets","definition","WidgetsName","ArticleTitle","ArticleButton","CheckList","ArticleText","ArticleImage","ArticleSlider","ArticleAttachment","getBuilderWidgets","intl","useIntl","args","portalId","variant","closeHandler","onClick","name","factory","onClickIconClose","buttons","FormattedMessage","id","clickHandler","undefined","title","formatMessage","map","widget","key","src","img","label","description","className","minWidth","WidgetModeArticle","WidgetModeComment","bg","bgHover","iconSize","icon","Wrapper","JRCWidgetApiWrapper","url","keys","order","orderBy","content","data","setData","length","startsWith","isAValidURL","fetch","method","headers","then","resp","json","response","Array","isArray","result","console","warn","JRCWidgetApi","WidgetTable","Loader","AbsoluteWrapper","space","md","WrapperEditMode","WidgetDatasourceTableWrapper","uniqid","uri","limit","tableHeadColor","tableHeadTextColor","tableHeadIconColor","tableRowColor","tableRowTextColor","tableColumnsData","tableBorderRadius","tableSizedColumns","tableSizedColumnsWidth","dispatch","isEditorOpenOnFirstRender","setIsEditorOpenOnFirstRender","useState","isLoading","setIsLoading","datasourceData","setDatasourceData","datasourceModel","setDatasourceModel","useMemo","DatasourceTable","useEffect","get","Format","VIEW","model","finally","registerEditor","useCallback","slice","actions","flushAllEditor","columns","toRet","filter","isVisible","forEach","column","find","el","push","getVisibleColumns","rows","alt","JRCHtml","__html","CSSHidden","WidgetUploader","initialFiles","initialClick","multiple","accept","onUploadStart","onUploadEnd","onUploadSuccess","uploadRef","token","useSelector","selectors","selectToken","total","setTotal","files","setFiles","current","click","JRCInputFileAdvancedRaw","ref","totalFile","prevTotal","fileResponse","prevFiles","WidgetAttachment","FileViewer","CSSWrapper","JRCWidgetArticleAttachmentWrapper","inplace","useDispatch","isActive","state","shallowEqual","onError","message","error","setWidgetState","mounted","empty","onlyOffice","selectById","option","file","getAccessHash","Error","hash","idFile","target","window","getWedocFilePath","wedocWindowOpen","catch","openWithOptions","condition","f","includes","mimetype","options","loading","JRCWidgetEmptyInplace","CSSButtonWrapper","CSSPointer","clickable","JRCWidgetArticleButtonWrapper","text","backgroundColor","buttonSize","borderRadius","JRCWidgetButton","JRCWidgetArticleGallery","CSSImagePointer","JRCWidgetArticleGalleryWrapper","maxWidth","WidgetImage","CSSImageWrapperHover","white","mockFileLittle","type","mainType","dateCreation","dateModified","_url","size","strToTimestamp","str","timestamp","Date","parse","isNaN","getTime","JRCWidgetArticleImageWrapper","width","useFilter","setUri","formatImgUrl","now","from","path","JRCWidgetArticleSliderWrapper","dynamicWidth","setDynamicWidth","useRef","fileViewerFiles","slides","slide","handleResize","offsetWidth","addEventListener","removeEventListener","isEditable","handleEditor","style","JRCWidgetSlider","useDots","loop","startAt","onClickSlide","WidgetArticleText","CSSTextWrapper","JRCWidgetArticleTextWrapper","useTheme","isBusy","selectWidgetState","busy","tinyMCECommonOptions","selectTinyMCECommonOptions","models","selectAll","tinyMentionsQueries","getTinyMCEMentionsQueries","autoFocus","tinymceScriptSrc","commonOptions","mentionsQueries","WidgetArticleTitle","ToolWrapper","grey1","Tool","JRCWidgetArticleTitleWrapper","heading","Toolbar","sizeValue","WidgetCheckList","J","react","WidgetCheckListEditor","Typography","WidgetConfigWrapper","border","Column","CommentContainer","FormItemContainer","JRCWidgetCheckListWrapper","commentId","editRight","deleteRight","onRemove","onWidgetUpdate","widgetContent","entries","setEntries","isDeleteModalOpen","setDeleteModalOpen","setToken","tokenLoading","setTokenLoading","widgetWrapper","selectWidget","currentUser","onChangeWrapper","updateWidgetWrapper","handleRemoveWidget","flushWidget","openEditorPanel","finalEntries","arr","item","checked","value","links","user","res","e","errorMsg","JRCInputTextRaw","required","placeholder","event","margin","onChangeContent","onRemoveWidget","initialEntries","onFileClick","onItemCheckListChange","items","mimetypes","checkListRespond","idUser","err","handleCheckItem","cursor","JRCModal","DisplayWidget","ensureWidgetArticleButtonType","ensureWidgetArticleGalleryType","ensureWidgetArticleAttachmentType","ensureWidgetArticleImageType","ensureWidgetApiType","ensureWidgetArticleSliderType","ensureWidgetArticleTitleType","ensureWidgetArticleTextType","ensureWidgetDatasourceTableType","ensureWidgetCheckListType","CSSWidgetLayer","opacity","pointerEvents","WidgetLayer","layers","ids","layer","Layer","LayerWidget","layerId","visible","locked","position","top","y","left","x","DraggableHandler","onMouseUp","updateLayer","BETA_JRCDoubleClick","onDoubleTap","mouseIsDown","setMouseDown","mouse","setMouse","start","setStart","child","setChild","handleMouseDown","nativeEvent","clientX","clientY","handleMouseMove","dx","dy","handleMouseUp","document","onMouseDown","JRCLoader","WidgetState","def","inset","display","flex","justifyContent","alignItems","hover","initialized","grey3","font","CSSWidgetWrapper","WidgetWrapperCore","widgetObject","indexOrder","editableMap","currentEditableWidgetId","isComponentVisible","setIsComponentVisible","registerWidgetObject","object","registerWidget","setEditableWidgetId","_widget","openingType","openingTypeLink","setEditableIndex","getRandomValues","rnds8","Uint8Array","rng","crypto","bind","msCrypto","byteToHex","i","toString","substr","offset","arguments","uuid","toLowerCase","test","TypeError","buf","rnds","random","EditorsPortal","JRCThemeProvider","EditorsPanel","portalDiv","getElementById","portal","parent","createElement","appendChild","createPortalElement","createPortal","CommentsBlocWrapper","CommentsBloc","articleId","setLoading","setWidgets","widgetIds","selectWidgets","platformConfig","selectPlatformConfig","commentsList","commentList","driveHook","selectHook","fileBank","widgetHook","idArticle","socket","rtHandlers","getCommentRTHandlers","handler","onMessage","function","offMessage","idComments","getCommentsLikeRTHandlers","list","c","fetchComments","fetchToken","onComment","params","finalWidget","Object","some","w","addComment","discardComments","JRCCommentsBloc","comments","onCommentUpdate","commentToUpdate","idComment","updateComment","onCommentDelete","deleteComment","isWidgetActive","create","autorize","widgetListComponent","newWidgetsWrapperComponent","existingWidgetsWrapperComponent","comment","removeWidget","tinyMCEConfig","highlightFields","userHighlightFields","userAccountStatus","userModel","m","isWedocActive","onGetHashError","activeDrives","debug","UploadFromDrives","utils","buildDrivesArrayFromObject","drives","socialActionAdd","targetId","targetType","add","deleteFile","fetchUser","fetchUserFields","getFields","fetchSocialActionUserList","getUsers","removeLike","remove","Empty","Container","AppColumn","MainColumn","TwoColLayout","extensionRoute","routes","pathname","useLocation","ROUTES_ARRAY","values","activeTab","setActiveTab","tabs","tab","href","absolutePath","group","activeRoute","route","paths","reduce","previousValue","currentValue","pattern","isMatch","matchPath","fallback","Outlet","CSSEditorPortal","CSSEditorHeader","CSSEditorAction","CSSEditorLabel","CSSEditorMask","EDITOR_WIDTH","CSSEditor","CSSEditorContent","CSSEditorMenu","CSSEditorMenuButton","CSSEditorWidget","CSSEditorWidgetLabel","CSSEditorWidgetOption","EditorPopup","editor","selectEditor","popup","flexDirection","marginTop","flushEditorPopup","JRCIcon","WidgetArticleTitleEditor","WidgetArticleTextEditor","WidgetArticleGalleryEditor","WidgetArticleAttachmentEditor","WidgetArticleSliderEditor","WidgetArticleImageEditor","WidgetButtonEditor","WidgetApiEditor","WidgetDatasourceTableEditor","Editor","selectWidgetObject","onSave","updateWidget","flushEditor","onStateChange","states","onOpen","registerEditorPopup","provider","initialUrl","studioHook","store","getState","fileBankHook","editorAppDependencies","useStudio","useFileBank","override","EditorTabWidgets","selectWidgetContent","Layers","_","n","BETA_JRCDragAndDrop","onDrag","renderEl","EditorWidgetLayer","elms","registerLayer","EditorWidgetLayerLock","EditorWidgetLayerVisibility","EditorWidgetLayerFlush","flushLayer","EditorTabWrapper","wrapper","setTitle","control","watch","useForm","defaultValues","criteriaMode","subscription","unsubscribe","JRCInputText","EditorWrapper","isVisibile","setTab","setTimeout","panel","useWrapper","useEditor","useWidgets","EditorConditonalTab","EditorPositionOption","setEditorPosition","widgetState","CSSEditorPortalWrapper","CSSEditorPortalPopupWrapper","CSSEditorPortalRow","CSSEditorPortalFreeSpace","editors","selectEditors","useAI","query","setQuery","PrepareAndSetQuery","reject","resolve","capability","Promise","AICapabilities","develop","summarize","tldr","en","es","formal","funny","JTinyMCEExtensionsBuilders","jia","TextWrapper","loadingResponse","AIModal","setResponse","sendAIRequest","textEnhancement","capacity","textResponse","_err","trim","zIndex","tinyMCEModal","overflow","isFull","JRCTypography","align","JRCInputTinyMCEWithExt","extAI","isAIActive","hooks","JIAHook","extArray","onMentionsQueryError","tinymceCommonOptions","JRCInputTinyMCE","additionalExtensions","JRCInputTinyMCEWithExtRaw","JRCInputTinyMCERaw","StretchContainer","css","stretch","Form","FormElm","onSubmit","FieldsetWrapper","DisplayForm","formRef","configuration","useDisplay","fields","handleSubmit","reset","formFn","scrollTo","Input","conf","dataCy","readOnly","extraInputs"],"sourceRoot":""}
1
+ {"version":3,"file":"560.bundle.js","mappings":"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","sources":["webpack://ReactCore/./src/components/widgets/WidgetList/WidgetList.style.tsx","webpack://ReactCore/./src/components/widgets/WidgetList/WidgetList.tsx","webpack://ReactCore/./src/components/widgets/namespace.ts","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetApiWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/utils.ts","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetDatasourceTableWrapper.tsx","webpack://ReactCore/./src/components/widgets/components/WidgetUploader.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleAttachmentWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleButtonWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleGalleryWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleImageWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleSliderWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleTextWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleTitleWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetCheckListWrapper.tsx","webpack://ReactCore/./src/components/widgets/Widget.tsx","webpack://ReactCore/./src/components/widgets/WidgetLayer/WidgetLayer.style.tsx","webpack://ReactCore/./src/components/widgets/WidgetLayer/WidgetLayer.tsx","webpack://ReactCore/./src/components/widgets/WidgetState.tsx","webpack://ReactCore/./src/components/widgets/Widget.style.tsx","webpack://ReactCore/./src/components/widgets/WidgetWrapperCore.tsx","webpack://ReactCore/./node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/rng.js","webpack://ReactCore/./node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/regex.js","webpack://ReactCore/./node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/stringify.js","webpack://ReactCore/./node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/validate.js","webpack://ReactCore/./node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/v4.js","webpack://ReactCore/./src/components/widgets/components/WidgetEditorPanel.tsx","webpack://ReactCore/./src/components/CommentsBloc.tsx","webpack://ReactCore/./src/hooks/useCommentRT.ts","webpack://ReactCore/./src/hooks/useCommentsLikeRT.ts","webpack://ReactCore/./src/components/Empty.tsx","webpack://ReactCore/./src/components/TwoColLayout.tsx","webpack://ReactCore/./src/components/editors/style.tsx","webpack://ReactCore/./src/components/editors/const.ts","webpack://ReactCore/./src/components/editors/EditorPopup.tsx","webpack://ReactCore/./src/components/editors/Editor.tsx","webpack://ReactCore/./src/components/editors/EditorTabWidgets.tsx","webpack://ReactCore/./src/components/editors/EditorTabWrapper.tsx","webpack://ReactCore/./src/components/editors/EditorWrapper.tsx","webpack://ReactCore/./src/components/editors/EditorsPortal.tsx","webpack://ReactCore/./src/hooks/useAI.ts","webpack://ReactCore/./src/components/tinymce/extension/AIModal.tsx","webpack://ReactCore/./src/components/tinymce/JRCInputTinyMCEWithExt.tsx","webpack://ReactCore/./src/components/tinymce/JRCInputTinyMCEWithExtRaw.tsx","webpack://ReactCore/./src/displayer/DisplayForm.component.tsx"],"sourcesContent":["import styled from 'styled-components';\n\nexport const CSSSquareWidgetWrapper = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n gap: 10px;\n justify-content: center;\n`;\n\nexport const CSSSquareWidget = styled.div<{ available: boolean }>`\n border: 1px solid ${(props) => props.theme.color.grey2};\n border-radius: 8px;\n cursor: pointer;\n padding: 12px;\n position: relative;\n opacity: ${(props) => (props.available ? '1' : '.4')};\n pointer-events: ${(props) => (props.available ? 'all' : 'none')};\n\n .show-on-hover {\n position: absolute;\n inset: 0;\n border-radius: 8px;\n justify-content: center;\n align-items: center;\n display: flex;\n opacity: 0;\n background-color: #ffffffe6;\n }\n\n &:hover {\n .show-on-hover {\n opacity: 1;\n }\n }\n`;\n\nexport const CSSWidgetButton = styled.div<{ open: boolean }>`\n border: 2px solid ${(props) => props.theme.color.primary};\n height: ${(props) => (props.open ? '320' : '54')}px;\n border-radius: 8px;\n display: flex;\n justify-content: top;\n flex-direction: column;\n transition: height 0.4s;\n overflow: hidden;\n flex-direction: column;\n`;\n\nexport const CSSWrapWidgetWrapper = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: center;\n gap: 10px;\n`;\n\nexport const CSSWrapTitle = styled.div`\n min-height: 50px;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n color: ${(props) => props.theme.color.primary};\n &:hover {\n background-color: ${(props) => props.theme.color.grey0};\n }\n`;\n\nexport const CSSWrapWidget = styled.button<{ open: boolean; index: number; full?: boolean }>`\n height: 72px;\n display: flex;\n align-items: center;\n padding: 0 10px;\n gap: 10px;\n width: 40%;\n border: 1px solid ${(props) => props.theme.color.grey2};\n border-radius: 8px;\n transition: opacity 0.4s ease ${(props) => props.index * 40}ms;\n opacity: ${(props) => (props.open ? 1 : 0)};\n img {\n width: 40px;\n }\n ${(props) => props.full && `flex: 1`}\n`;\n\nexport const Flex = styled.div<{ direction: 'row' | 'column'; gap?: number }>`\n display: flex;\n flex-direction: ${(props) => (props.direction === 'row' ? 'row' : 'column')};\n align-items: ${(props) => (props.direction === 'row' ? 'center' : 'flex-start')};\n justify-content: ${(props) => (props.direction === 'row' ? 'flex-start' : 'center')};\n flex: 1;\n ${(props) => props.gap && `gap:${props.gap}px`}\n`;\n","import React from 'react';\nimport { FormattedMessage, useIntl } from 'react-intl';\n\nimport { WidgetDefinitionProps, WidgetKeys, WidgetWrapperProps } from 'jamespot-user-api';\n\nimport JRCore from 'App';\nimport { Widget } from 'jamespot-front-business';\nimport { JRCModalLayoutProps } from 'jamespot-react-components';\nimport { getBuilderWidgets } from '../namespace';\nimport {\n CSSSquareWidget,\n CSSSquareWidgetWrapper,\n CSSWidgetButton,\n CSSWrapTitle,\n CSSWrapWidget,\n CSSWrapWidgetWrapper,\n Flex,\n} from './WidgetList.style';\n\nconst JRCButton = JRCore.registry.getLazyComponent('Button');\nconst JRCModalLayout = JRCore.registry.getLazyComponent('ModalLayout');\nconst JRCModalContent = JRCore.registry.getLazyComponent('ModalContent');\nconst JRCTooltip = JRCore.registry.getLazyComponent('Tooltip');\nconst JRCIconButton = JRCore.registry.getLazyComponent('IconButton');\n\ntype WidgetListMode = 'button' | 'list' | 'gallery' | 'custom' | 'article' | 'comment';\n\n/*\n Widget Builder\n*/\nexport const WidgetList = ({\n mode,\n view,\n children,\n namespace = 'default',\n onChange,\n}: {\n mode?: WidgetListMode;\n view?: string;\n children?: any;\n namespace?: string;\n onChange: (widget: WidgetWrapperProps) => void;\n}) => {\n const [isOpen, setOpen] = React.useState<boolean>(false);\n const widgets = getBuilderWidgets(namespace);\n const intl = useIntl();\n\n const args: JRCModalLayoutProps = {\n open: isOpen,\n portalId: 'react-modal',\n variant: 'full-height',\n closeHandler: () => setOpen(false),\n };\n\n const onClick = (name: WidgetKeys) => {\n onChange(Widget.factory(name));\n setOpen(false);\n };\n return (\n <>\n <JRCModalLayout {...args}>\n <JRCModalContent\n onClickIconClose={args.closeHandler}\n buttons={\n mode === 'comment'\n ? [\n {\n children: <FormattedMessage id=\"GLOBAL_Close\" />,\n color: 'cancel',\n clickHandler: () => setOpen(false),\n },\n ]\n : undefined\n }\n title={intl.formatMessage({ id: 'WIDGET_Builder' })}>\n {mode === 'comment' ? (\n <CSSWrapWidgetWrapper>\n {widgets.map((widget, index) => (\n <CSSWrapWidget\n key={widget.name}\n open={true}\n full\n index={index}\n onClick={() => onClick(widget.name)}>\n <Flex direction={'row'} gap={12}>\n <img src={widget.img} />\n <Flex direction={'column'}>\n <h3>{intl.formatMessage({ id: widget.label })}</h3>\n <p>{intl.formatMessage({ id: widget.description })}</p>\n </Flex>\n </Flex>\n </CSSWrapWidget>\n ))}\n </CSSWrapWidgetWrapper>\n ) : (\n <CSSSquareWidgetWrapper>\n {widgets.map((widget, index: number) => {\n return (\n <CSSSquareWidget\n key={index}\n onClick={() => onClick(widget.name)}\n available={widget.available}>\n <img src={widget.img} />\n <div className=\"show-on-hover\">{intl.formatMessage({ id: widget.label })}</div>\n </CSSSquareWidget>\n );\n })}\n </CSSSquareWidgetWrapper>\n )}\n </JRCModalContent>\n </JRCModalLayout>\n {mode === 'custom' && children ? <div onClick={() => setOpen(true)}>{children}</div> : <></>}\n {mode === 'button' && view === 'edit' ? (\n <JRCButton onClick={() => setOpen(true)} variant={'outlined'} minWidth={'100%'}>\n {intl.formatMessage({ id: 'WIDGET_Add_Widget' })}\n </JRCButton>\n ) : (\n <></>\n )}\n {mode === 'gallery' && view === 'edit' ? (\n <CSSSquareWidgetWrapper>\n {widgets.map((widget, index: number) => {\n return (\n <CSSSquareWidget\n key={index}\n onClick={() => onClick(widget.name)}\n available={widget.available}>\n <img src={widget.img} />\n <div className=\"show-on-hover\">{intl.formatMessage({ id: widget.label })}</div>\n </CSSSquareWidget>\n );\n })}\n </CSSSquareWidgetWrapper>\n ) : (\n <></>\n )}\n {mode === 'article' && view === 'edit' ? <WidgetModeArticle widgets={widgets} onClick={onClick} /> : <></>}\n {mode === 'comment' && view === 'edit' ? (\n <WidgetModeComment\n onClick={() => {\n setOpen(true);\n }}\n />\n ) : (\n <></>\n )}\n </>\n );\n};\n\nconst WidgetModeArticle = ({\n widgets,\n onClick,\n}: {\n widgets: WidgetDefinitionProps[];\n onClick: (name: WidgetKeys) => void;\n}) => {\n const [open, isOpen] = React.useState(false);\n const intl = useIntl();\n return (\n <>\n <CSSWidgetButton open={open}>\n <CSSWrapTitle onClick={() => isOpen(!open)}>\n {intl.formatMessage({ id: 'WIDGET_Add_Widget' })}\n </CSSWrapTitle>\n <CSSWrapWidgetWrapper>\n {widgets.map((widget, index) => {\n return (\n <CSSWrapWidget\n key={widget.name}\n open={open}\n index={index}\n onClick={() => onClick(widget.name)}>\n <img src={widget.img} />\n {intl.formatMessage({ id: widget.label })}\n </CSSWrapWidget>\n );\n })}\n </CSSWrapWidgetWrapper>\n </CSSWidgetButton>\n </>\n );\n};\n\nconst WidgetModeComment = ({ onClick }: { onClick: () => void }) => {\n const intl = useIntl();\n return (\n <>\n <JRCTooltip description={intl.formatMessage({ id: 'COMMENT_Add_Widget' })}>\n <JRCIconButton\n bg={'grey1'}\n bgHover={'grey2'}\n color={'grey5'}\n iconSize={22}\n onClick={() => {\n onClick();\n }}\n icon={'icon-fs-puzzle'}\n />\n </JRCTooltip>\n </>\n );\n};\n","import { Widget } from 'jamespot-front-business';\nimport { WidgetDefinitionProps, WidgetsName } from 'jamespot-user-api';\n\nexport function getBuilderWidgets(namespace: string): WidgetDefinitionProps[] {\n switch (namespace) {\n case 'widget-article-image':\n return [Widget.definition(WidgetsName.ArticleTitle), Widget.definition(WidgetsName.ArticleButton)];\n case 'comment':\n return [Widget.definition(WidgetsName.CheckList)];\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 ];\n }\n}\n","import React from 'react';\n\nimport { WidgetApiType, WidgetDisplayMode } from 'jamespot-user-api';\n\nimport { JRCWidgetApi } from 'jamespot-react-components';\n\nimport styled from 'styled-components';\n\nconst Wrapper = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n min-height: 60px;\n align-items: center;\n`;\n\nfunction isAValidURL(url: string | undefined) {\n if (typeof url === 'string') {\n return url.length !== 0 && url.startsWith('https://');\n }\n\n return false;\n}\n\nexport const JRCWidgetApiWrapper = ({\n widget,\n}: {\n widget: WidgetApiType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const { url, keys, order, orderBy } = widget.content;\n const [data, setData] = React.useState<Array<Record<string, string>>>([]);\n\n React.useEffect(() => {\n if (url && isAValidURL(url)) {\n fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n .then((resp) => resp.json())\n .then((response) => {\n if (!Array.isArray(response.result)) {\n console.warn('resposne must be an array');\n }\n\n setData(response.result);\n });\n } else {\n console.warn(`${url} is not a valid url`);\n }\n }, [url]);\n\n return (\n <Wrapper>\n <JRCWidgetApi data={data} keys={keys ?? []} order={order ?? ''} orderBy={orderBy ?? 'asc'} />\n </Wrapper>\n );\n};\n","import { WidgetTableColumn, WidgetTableColumnsData } from 'jamespot-user-api';\n\nexport const getVisibleColumns = (tableColumnsData: WidgetTableColumnsData, columns: WidgetTableColumn[]) => {\n const toRet: WidgetTableColumn[] = [];\n tableColumnsData\n .filter((data) => data.isVisible)\n .forEach((data) => {\n const column = columns.find((el) => el.name === data.name);\n if (column) {\n toRet.push(column);\n }\n });\n\n return toRet;\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport JRCore from 'App';\nconst WidgetTable = JRCore.registry.getLazyComponent('WidgetTable');\n\nimport { FormattedMessage } from 'react-intl';\n\nconst Loader = JRCore.registry.getLazyComponent('Loader');\n\nimport jamespot, {\n Format,\n WidgetDatasourceValues,\n WidgetDisplayMode,\n WidgetsName,\n WidgetTableColumn,\n} from 'jamespot-user-api';\n\nimport styled from 'styled-components';\nimport { WidgetDatasourceTableContent } from 'jamespot-user-api';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { useAppDispatch } from 'redux/store';\nimport { JRCButton, JRCHtml } from 'jamespot-react-components';\nimport { getVisibleColumns } from './utils';\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\n const definition = useMemo(() => Widget.definition(WidgetsName.DatasourceTable), []);\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 const registerEditor = useCallback(() => {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: WidgetsName.DatasourceTable }));\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 <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 );\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 />\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 from 'react';\n\nimport { useSelector } from 'react-redux';\n\nimport { jFileLittle } from 'jamespot-user-api';\n\nimport { Widget } from 'jamespot-front-business';\nimport styled from 'styled-components';\nimport { JRCInputFileAdvancedRaw } from 'jamespot-react-components';\n\nexport const CSSHidden = styled.div`\n width: 0;\n height: 0;\n overflow: hidden;\n`;\n\ntype InplaceUploaderProps = {\n children: React.ReactNode;\n initialFiles: jFileLittle[];\n initialClick?: boolean;\n multiple: boolean;\n accept: string;\n onUploadStart: () => void;\n onUploadEnd: () => void;\n onUploadSuccess: (files: jFileLittle[]) => void;\n};\n\nexport const WidgetUploader = ({\n children,\n initialFiles,\n initialClick,\n multiple,\n accept,\n onUploadStart,\n onUploadEnd,\n onUploadSuccess,\n}: InplaceUploaderProps) => {\n const uploadRef = React.useRef<HTMLInputElement>(null);\n const token = useSelector(Widget.selectors.selectToken);\n const [total, setTotal] = React.useState<number>(0);\n const [files, setFiles] = React.useState<jFileLittle[]>(initialFiles);\n\n React.useEffect(() => {\n if (initialClick) {\n uploadRef.current?.click();\n }\n }, [initialClick]);\n\n React.useEffect(() => {\n if (initialFiles.length !== files.length) {\n setFiles(initialFiles);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialFiles]);\n\n React.useEffect(() => {\n onUploadSuccess(files);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [files]);\n\n React.useEffect(() => {\n if (total === 0) {\n onUploadEnd();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [total]);\n\n return (\n <>\n <div\n onClick={() => {\n if (initialClick) {\n uploadRef.current?.click();\n }\n }}>\n {children}\n </div>\n <CSSHidden>\n <JRCInputFileAdvancedRaw\n ref={uploadRef}\n id=\"widget-upload-file\"\n name=\"editorFiles\"\n content={''}\n accept={accept as any}\n multiple={multiple}\n token={token}\n onUploadStart={(totalFile) => {\n if (totalFile !== undefined) {\n setTotal((prevTotal) => prevTotal + totalFile);\n }\n if (typeof onUploadStart === 'function' && totalFile !== 0) {\n onUploadStart();\n }\n }}\n onUploadSuccess={(fileResponse) => {\n if (fileResponse === undefined) {\n return;\n }\n setTotal((prevTotal) => (prevTotal !== undefined ? prevTotal - 1 : 0));\n setFiles((prevFiles) => (multiple ? [...prevFiles, fileResponse] : [fileResponse]));\n }}\n />\n </CSSHidden>\n </>\n );\n};\n","import React, { useEffect } from 'react';\n\nimport styled from 'styled-components';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { useIntl } from 'react-intl';\nimport jamespot, {\n jFileLittle,\n WidgetArticleAttachmentType,\n WidgetDisplayMode,\n WidgetsRootState,\n WidgetArticleAttachmentContent,\n} from 'jamespot-user-api';\n\nimport JRCore from 'App';\nimport { Application, Toast, Widget, updateWidgetContent } from 'jamespot-front-business';\nimport { JRCWidgetEmptyInplace, JRCFileViewerOpenWithOptionsType } from 'jamespot-react-components';\nimport { WidgetUploader } from '../components/WidgetUploader';\n\nconst WidgetAttachment = JRCore.registry.getLazyComponent('WidgetAttachment');\n\nconst FileViewer = JRCore.registry.getLazyComponent('FileViewer');\n\n// DUPLICATE FROM WEDOC\nexport const wedocWindowOpen = (idFile: number, hash: string, target?: '_blank') => {\n window.open(getWedocFilePath(idFile, hash), target);\n};\n\n// DUPLICATE FROM WEDOC\nexport function getWedocFilePath(idFile: number, hash: string) {\n return `/ng/rr/file/${idFile}/${hash}`;\n}\n\nexport const CSSWrapper = styled.div`\n flex: 1;\n`;\n\nexport const JRCWidgetArticleAttachmentWrapper = ({\n widget,\n inplace,\n mode,\n}: {\n widget: WidgetArticleAttachmentType;\n inplace?: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const intl = useIntl();\n const { uniqid } = widget;\n const { files } = widget.content;\n const dispatch = useDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n\n const onError = (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n };\n\n useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, mounted: true }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !files || files.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [files]);\n\n const onlyOffice = useSelector((state: any) => Application.selectors.selectById(state, 'OnlyOfficeHook'));\n\n const onClick = (file: jFileLittle | undefined) => {\n if (!file) {\n return;\n }\n jamespot.object\n .getAccessHash(`fileArticle/${file.id}`)\n .then((response) => {\n if (response.result === '') {\n throw new Error('result empty');\n }\n const hash = response.result;\n wedocWindowOpen(file.id, hash);\n })\n .catch(() => {\n dispatch(Toast.actions.error({ label: 'WIDGET_Open_Failed' }, 6000));\n });\n };\n\n const option = [\n {\n label: intl.formatMessage({ id: 'WIDGET_Open_With_Wedoc' }),\n onClick: onClick,\n },\n ];\n\n const openWithOptions: JRCFileViewerOpenWithOptionsType = onlyOffice\n ? [\n {\n condition: (f) =>\n [\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n ].includes(f.mimetype),\n options: option,\n },\n ]\n : [];\n\n return files !== undefined ? (\n <CSSWrapper>\n {mode !== 'view' ? (\n <WidgetAttachment files={files} onClick={() => undefined} onError={onError} />\n ) : (\n <FileViewer files={files} openWithOptions={openWithOptions}>\n {(open) => {\n return <WidgetAttachment files={files} onClick={(idFile) => open(idFile)} onError={onError} />;\n }}\n </FileViewer>\n )}\n {inplace && mode !== 'view' && (\n <WidgetUploader\n initialFiles={files}\n initialClick={isActive}\n multiple={true}\n accept={'*'}\n onUploadSuccess={(files) => {\n if (Array.isArray(files)) {\n dispatch(updateWidgetContent<WidgetArticleAttachmentContent>(uniqid, { files }));\n }\n }}\n onUploadStart={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: true }));\n }}\n onUploadEnd={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: false }));\n }}>\n {mode === 'edit' ? (\n <JRCWidgetEmptyInplace\n label={'WIDGET_Article_Attachment_Empty_Label'}\n description={'WIDGET_Article_Attachment_Empty_Description'}\n url={'widget-article-image-placeholder.png'}\n onClick={() => undefined}\n />\n ) : (\n <></>\n )}\n </WidgetUploader>\n )}\n </CSSWrapper>\n ) : (\n <></>\n );\n};\n","import React, { useEffect } from 'react';\n\nimport styled from 'styled-components';\n\nimport { WidgetArticleButtonType, WidgetDisplayMode } from 'jamespot-user-api';\n\nimport { JRCWidgetButton } from 'jamespot-react-components';\nimport { useDispatch } from 'react-redux';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\n\nconst CSSButtonWrapper = styled.div`\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n`;\n\nconst CSSPointer = styled.div<{ clickable: boolean }>`\n pointer-events: ${(props) => (props.clickable ? 'all' : 'none')};\n cursor: pointer;\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n`;\n\nexport const JRCWidgetArticleButtonWrapper = ({\n widget,\n mode,\n}: {\n widget: WidgetArticleButtonType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const dispatch = useDispatch();\n const { uniqid } = widget;\n const { text, url, target, color, backgroundColor, buttonSize, borderRadius, variant } = widget.content;\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !text || text.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [text]);\n\n return (\n <CSSButtonWrapper\n onClick={() => {\n if (mode === 'edit') {\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: widget.name }));\n }\n }}>\n <CSSPointer clickable={mode !== 'edit'}>\n <JRCWidgetButton\n text={text}\n url={url}\n target={target}\n color={color}\n backgroundColor={backgroundColor}\n buttonSize={buttonSize}\n borderRadius={borderRadius}\n variant={variant}\n />\n </CSSPointer>\n </CSSButtonWrapper>\n );\n};\n","import React from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\n\nimport {\n WidgetArticleGalleryContent,\n WidgetArticleGalleryType,\n WidgetDisplayMode,\n WidgetsRootState,\n} from 'jamespot-user-api';\n\nimport JRCore from 'App';\nimport { Widget, updateWidgetContent } from 'jamespot-front-business';\nimport { JRCWidgetEmptyInplace } from 'jamespot-react-components';\nimport { WidgetUploader } from '../components/WidgetUploader';\n\nconst JRCWidgetArticleGallery = JRCore.registry.getLazyComponent('WidgetArticleGallery');\n\nconst FileViewer = JRCore.registry.getLazyComponent('FileViewer');\n\nconst CSSImagePointer = styled.button`\n cursor: pointer;\n`;\n\nexport const JRCWidgetArticleGalleryWrapper = ({\n widget,\n inplace,\n mode,\n}: {\n widget: WidgetArticleGalleryType;\n inplace?: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const { uniqid } = widget;\n const { files } = widget.content;\n const dispatch = useDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n\n React.useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, mounted: true }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return files !== undefined ? (\n <>\n {mode === 'edit' ? (\n <JRCWidgetArticleGallery\n files={files}\n maxWidth={800}\n gap={widget.content.gap ?? '10'}\n column={widget.content.column ?? '3'}\n onClick={() => undefined}\n />\n ) : (\n <FileViewer files={files} openWithOptions={[]}>\n {(open) => {\n return (\n <CSSImagePointer>\n <JRCWidgetArticleGallery\n files={files}\n maxWidth={600}\n gap={widget.content.gap ?? '10'}\n column={widget.content.column ?? '3'}\n onClick={(idFile) => open(idFile)}\n />\n </CSSImagePointer>\n );\n }}\n </FileViewer>\n )}\n {inplace && mode === 'edit' ? (\n <WidgetUploader\n initialFiles={files}\n initialClick={isActive}\n accept={'image/png, image/jpeg, image/jpg'}\n multiple={true}\n onUploadSuccess={(files) => {\n if (Array.isArray(files)) {\n dispatch(updateWidgetContent<WidgetArticleGalleryContent>(uniqid, { files }));\n }\n }}\n onUploadStart={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: true }));\n }}\n onUploadEnd={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: false }));\n }}>\n <JRCWidgetEmptyInplace\n label={'WIDGET_Article_Gallery_Empty_Label'}\n description={'WIDGET_Article_Gallery_Empty_Description'}\n url={'widget-article-image-placeholder.png'}\n onClick={() => undefined}\n />\n </WidgetUploader>\n ) : (\n <></>\n )}\n </>\n ) : (\n <></>\n );\n};\n","import React, { useEffect, useState } from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport {\n WidgetArticleImageContent,\n WidgetArticleImageType,\n WidgetDisplayMode,\n WidgetsRootState,\n formatImgUrl,\n jFileLittle,\n} from 'jamespot-user-api';\nimport { useIntl } from 'react-intl';\nimport JRCore from 'App';\nimport { Widget, updateWidgetContent } from 'jamespot-front-business';\nimport { JRCWidgetEmptyInplace } from 'jamespot-react-components';\nimport { WidgetUploader } from '../components/WidgetUploader';\n\nconst WidgetImage = JRCore.registry.getLazyComponent('WidgetImage');\nconst FileViewer = JRCore.registry.getLazyComponent('FileViewer');\n\nimport styled from 'styled-components';\n\nconst CSSImageWrapperHover = styled.div`\n position: absolute;\n inset: 0;\n background-color: rgba(0, 0, 0, 0.4);\n pointer-event: none;\n display: flex;\n justify-content: center;\n align-items: center;\n opacity: 0;\n color: ${(props) => props.theme.color.white};\n &:hover {\n opacity: 1;\n }\n`;\n\nconst CSSImagePointer = styled.button`\n cursor: pointer;\n`;\n\nconst mockFileLittle: jFileLittle = {\n id: 0,\n type: '',\n title: '',\n uri: '',\n mimetype: 'application/octet-stream',\n mainType: '',\n dateCreation: '',\n dateModified: '',\n _url: '',\n size: 10,\n};\n\nexport const strToTimestamp = (str: string): undefined | number => {\n if (str) {\n const timestamp = Date.parse(str);\n if (!isNaN(timestamp)) {\n return new Date(timestamp).getTime() / 1000;\n }\n }\n return;\n};\n\nexport const JRCWidgetArticleImageWrapper = ({\n widget,\n width,\n inplace,\n mode,\n}: {\n widget: WidgetArticleImageType;\n inplace?: boolean;\n mode?: WidgetDisplayMode;\n width?: number;\n}) => {\n const { uniqid } = widget;\n const { file, useFilter } = widget.content;\n const dispatch = useDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n const [uri, setUri] = useState<string | undefined>(undefined);\n const intl = useIntl();\n\n useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, mounted: true }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, empty: !file }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [file]);\n\n useEffect(() => {\n if (file) {\n setUri(\n formatImgUrl({\n timestamp: file.dateModified ? strToTimestamp(file.dateModified) : Date.now(),\n from: 'imagecache',\n size: 'fitx1200',\n uri: file.uri,\n }),\n );\n }\n }, [file]);\n\n return (\n <>\n {mode === 'edit' ? (\n uri !== undefined ? (\n <WidgetImage maxWidth={width ?? 600} uri={uri} useFilter={useFilter ?? false} />\n ) : (\n <></>\n )\n ) : (\n <FileViewer\n files={[\n {\n ...mockFileLittle,\n path: uri,\n mimetype: 'image/png',\n },\n ]}\n openWithOptions={[]}>\n {(open) => {\n return (\n <CSSImagePointer onClick={() => open(0)}>\n <WidgetImage maxWidth={width ?? 600} uri={uri} useFilter={useFilter ?? false} />\n </CSSImagePointer>\n );\n }}\n </FileViewer>\n )}\n\n {inplace && mode === 'edit' ? (\n <WidgetUploader\n initialFiles={[]}\n initialClick={isActive}\n accept={'image/png, image/jpeg, image/jpg'}\n multiple={false}\n onUploadSuccess={(files) => {\n if (Array.isArray(files) && files[0] !== undefined) {\n dispatch(updateWidgetContent<WidgetArticleImageContent>(uniqid, { file: files[0] }));\n }\n }}\n onUploadStart={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: true }));\n }}\n onUploadEnd={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: false }));\n }}>\n {file !== undefined ? (\n <CSSImageWrapperHover>\n {intl.formatMessage({ id: 'ARTICLE_Widget_Image_Change' })}\n </CSSImageWrapperHover>\n ) : (\n <JRCWidgetEmptyInplace\n label={'WIDGET_Article_Image_Empty_Label'}\n description={'WIDGET_Article_Image_Empty_Description'}\n url={'widget-article-image-placeholder.png'}\n onClick={() => undefined}\n />\n )}\n </WidgetUploader>\n ) : (\n <></>\n )}\n </>\n );\n};\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport {\n WidgetArticleSliderType,\n WidgetDisplayMode,\n WidgetsRootState,\n formatImgUrl,\n jFileLittle,\n} from 'jamespot-user-api';\nimport JRCore from 'App';\nimport styled from 'styled-components';\nimport { JRCWidgetEmptyInplace, JRCWidgetSlider } from 'jamespot-react-components';\nimport { useAppDispatch } from 'redux/store';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { shallowEqual, useSelector } from 'react-redux';\n\nconst FileViewer = JRCore.registry.getLazyComponent('FileViewer');\n\nconst Wrapper = styled.div<{ maxWidth: number }>`\n flex: 1;\n display: flex;\n flex-direction: row;\n min-height: 60px;\n align-items: center;\n width: ${(props) => props.maxWidth}px;\n`;\n\nconst mockFileLittle: jFileLittle = {\n id: 0,\n type: '',\n title: '',\n uri: '',\n mimetype: 'application/octet-stream',\n mainType: '',\n dateCreation: '',\n dateModified: '',\n _url: '',\n size: 10,\n};\n\nexport const strToTimestamp = (str: string): undefined | number => {\n if (str) {\n const timestamp = Date.parse(str);\n if (!isNaN(timestamp)) {\n return new Date(timestamp).getTime() / 1000;\n }\n }\n return;\n};\n\nexport const JRCWidgetArticleSliderWrapper = ({\n widget,\n mode,\n width,\n}: {\n widget: WidgetArticleSliderType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n width?: number;\n}) => {\n const { uniqid } = widget;\n const dispatch = useAppDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n const maxWidth = width ?? 600;\n const [dynamicWidth, setDynamicWidth] = useState<number | undefined>(undefined);\n const ref = useRef<HTMLDivElement>(null);\n const fileViewerFiles = useMemo(\n () =>\n widget.content.slides\n ? [\n ...widget.content.slides.map((slide, index) => {\n return {\n ...mockFileLittle,\n id: slide.file ? slide.file.id : index,\n mimetype: slide.file ? slide.file.mimetype : mockFileLittle.mimetype,\n path: formatImgUrl({\n size: 'fitx1200',\n uri: slide.file ? slide.file.uri : '',\n from: 'imagecache',\n timestamp:\n slide.file && slide.file.dateModified\n ? strToTimestamp(slide.file.dateModified)\n : Date.now(),\n }),\n };\n }),\n ]\n : [],\n [widget.content.slides],\n );\n\n const slides = useMemo(\n () =>\n widget.content.slides !== undefined\n ? [\n ...widget.content.slides.map((slide) => {\n if (slide.file) {\n return {\n ...slide,\n uri: formatImgUrl({\n timestamp: slide.file.dateModified\n ? strToTimestamp(slide.file.dateModified)\n : Date.now(),\n size: `fitx${dynamicWidth && dynamicWidth < maxWidth ? dynamicWidth : maxWidth}`,\n from: 'imagecache',\n uri: slide.file.uri,\n }),\n };\n } else {\n return {\n ...slide,\n uri: '',\n };\n }\n }),\n ]\n : [],\n [widget.content.slides, dynamicWidth, maxWidth],\n );\n\n useEffect(() => {\n if (isActive && mode === 'edit') {\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: widget.name }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isActive]);\n\n useEffect(() => {\n const handleResize = () => {\n if (ref.current) {\n setDynamicWidth(ref.current ? ref.current.offsetWidth : maxWidth);\n }\n };\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref]);\n\n useEffect(() => {\n setDynamicWidth(ref.current ? ref.current.offsetWidth : maxWidth);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref]);\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !widget.content.slides || widget.content.slides.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [widget.content.slides]);\n\n const isEditable = useMemo(\n () => mode === 'edit' && Array.isArray(widget.content.slides) && widget.content.slides.length === 0,\n [widget.content.slides, mode],\n );\n\n const handleEditor = useCallback(() => {\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid: widget.uniqid,\n name: widget.name,\n }),\n );\n }, [dispatch, widget.uniqid, widget.name]);\n\n /** small hack to catch the real width of the div */\n if (dynamicWidth === undefined) {\n return <div ref={ref} style={{ width: '100%' }}></div>;\n }\n\n return (\n <Wrapper maxWidth={dynamicWidth && dynamicWidth < maxWidth ? dynamicWidth : maxWidth}>\n <FileViewer files={fileViewerFiles} openWithOptions={[]}>\n {(open) => {\n return (\n <JRCWidgetSlider\n slides={slides}\n maxWidth={dynamicWidth && dynamicWidth < maxWidth ? dynamicWidth : maxWidth}\n useDots={widget.content.useDots ?? true}\n loop={widget.content.loop ?? false}\n startAt={0}\n onClickSlide={(index) => {\n if (mode !== 'edit') {\n if (widget.content.slides) {\n const slide = widget.content.slides[index];\n if (slide && slide.file) {\n open(slide.file.id);\n }\n }\n } else {\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: widget.name }));\n }\n }}\n />\n );\n }}\n </FileViewer>\n {isEditable ? (\n <JRCWidgetEmptyInplace\n label={'WIDGET_Article_Slider_Empty_Label'}\n description={'WIDGET_Article_Slider_Empty_Description'}\n url={'widget-article-image-placeholder.png'}\n onClick={handleEditor}\n />\n ) : (\n <></>\n )}\n </Wrapper>\n );\n};\n","import React, { useCallback, useEffect, useMemo } from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport JRCore from 'App';\nimport { useIntl } from 'react-intl';\nimport {\n WidgetArticleTextContent,\n WidgetArticleTextType,\n WidgetDisplayMode,\n WidgetsRootState,\n} from 'jamespot-user-api';\n\nimport { Model, TinyMCE, Toast, Widget, updateWidgetContent } from 'jamespot-front-business';\n\nconst WidgetArticleText = JRCore.registry.getLazyComponent('WidgetArticleText');\n\nimport { getTinyMCEMentionsQueries } from 'App';\n\nimport styled, { useTheme } from 'styled-components';\n\nconst CSSTextWrapper = styled.div`\n cursor: text;\n p {\n word-wrap: break-word;\n }\n a {\n word-wrap: break-word;\n }\n`;\n\nexport const JRCWidgetArticleTextWrapper = ({\n widget,\n mode,\n}: {\n widget: WidgetArticleTextType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const { uniqid } = widget;\n const theme = useTheme();\n const { text } = widget.content;\n const dispatch = useDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n const isBusy = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidgetState(state, uniqid)?.busy);\n const token = useSelector(Widget.selectors.selectToken);\n const tinyMCECommonOptions = useSelector(TinyMCE.selectors.selectTinyMCECommonOptions);\n const models = useSelector(Model.selectors.selectAll);\n\n const intl = useIntl();\n\n const onError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !text || text.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [text]);\n\n const tinyMentionsQueries = useMemo(() => {\n return getTinyMCEMentionsQueries(models, theme, onError);\n }, [models, onError, theme]);\n\n // small hack to hide and redraw tinymce to avoid initialization issue\n if (isBusy) {\n return <></>;\n }\n\n return (\n <CSSTextWrapper>\n <WidgetArticleText\n autoFocus={isActive}\n text={text ?? ''}\n token={mode === 'edit' && token !== undefined ? token : ''}\n tinyMCECommonOptions={\n mode === 'edit' && tinyMCECommonOptions\n ? {\n tinymceScriptSrc: 'https://ecosysteme.jamespot.pro/js/tinymce/tinymce.min.js',\n commonOptions: tinyMCECommonOptions,\n mentionsQueries: tinyMentionsQueries,\n }\n : undefined\n }\n mode={mode}\n onChange={(text) => {\n dispatch(updateWidgetContent<WidgetArticleTextContent>(uniqid, { text }));\n }}\n />\n </CSSTextWrapper>\n );\n};\n","import React, { useEffect } from 'react';\n\nimport JRCore from 'App';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport {\n WidgetArticleTitleContent,\n WidgetArticleTitleType,\n WidgetDisplayMode,\n WidgetsRootState,\n} from 'jamespot-user-api';\n\nimport { Widget, updateWidgetContent } from 'jamespot-front-business';\n\nconst WidgetArticleTitle = JRCore.registry.getLazyComponent('WidgetArticleTitle');\n\nimport styled from 'styled-components';\n\nconst CSSTextWrapper = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n align-items: center;\n cursor: text;\n`;\n\nconst ToolWrapper = styled.div`\n display: flex;\n flex-direction: row;\n border-radius: 8px;\n overflow: hidden;\n margin: 4px;\n border: 1px solid ${(props) => props.theme.color.grey1};\n`;\n\nconst Tool = styled.button<{ isActive: boolean }>`\n display: flex;\n width: 40px;\n height: 40px;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n opacity: ${(props) => (props.isActive ? '1.0' : '.8')};\n background-color: ${(props) => (props.isActive ? props.theme.color.grey1 : props.theme.color.white)};\n &:hover {\n background-color: ${(props) => props.theme.color.grey1};\n }\n`;\n\nexport const JRCWidgetArticleTitleWrapper = ({\n widget,\n inplace,\n mode,\n}: {\n widget: WidgetArticleTitleType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const { uniqid } = widget;\n const { text, color, heading } = widget.content;\n const dispatch = useDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !text || text.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [text]);\n\n return (\n <CSSTextWrapper>\n <WidgetArticleTitle\n text={text}\n color={color}\n heading={heading}\n autoFocus={isActive}\n inplace={inplace}\n mode={mode}\n onChange={(text) => {\n dispatch(updateWidgetContent<WidgetArticleTitleContent>(uniqid, { text }));\n }}\n />\n {isActive && mode === 'edit' ? (\n <Toolbar\n heading={heading}\n onClick={(heading) => {\n dispatch(updateWidgetContent<WidgetArticleTitleContent>(uniqid, { heading }));\n }}\n />\n ) : (\n <></>\n )}\n </CSSTextWrapper>\n );\n};\n\nexport const Toolbar = ({ heading = 'h1', onClick }: { heading?: string; onClick: (size: string) => void }) => {\n const sizes: string[] = ['h1', 'h2', 'h3', 'h4'];\n return (\n <ToolWrapper>\n {sizes.map((sizeValue, index: number) => (\n <Tool key={index} isActive={heading === sizeValue} onClick={() => onClick(sizeValue)}>\n {sizeValue}\n </Tool>\n ))}\n </ToolWrapper>\n );\n};\n","import { Toast, updateWidgetContent, UserCurrent, Widget, WidgetEditor } from 'jamespot-front-business';\nimport { JRCIconButton, JRCInputTextRaw, JRCModal } from 'jamespot-react-components';\nimport { JRCWidgetCheckListEntries } from 'jamespot-react-components/build/src/components/Widgets/JRCWidgetCheckList/JRCWidgetCheckList';\nimport jamespot, {\n CombinedWidgetContent,\n WidgetCheckListContent,\n WidgetCheckListContentArr,\n WidgetCheckListType,\n WidgetDisplayMode,\n WidgetsName,\n WidgetsRootState,\n} from 'jamespot-user-api';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { FormattedMessage, useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\n\nconst WidgetCheckList = J.react.registry.getLazyComponent('WidgetCheckList');\nconst WidgetCheckListEditor = J.react.registry.getLazyComponent('WidgetCheckListEditor');\nconst Typography = J.react.registry.getLazyComponent('Typography');\n\nexport const CSSRowLinkWrapper = styled.div<{ border?: boolean }>`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n border: ${(props) => (props.border ? `1px solid ${props.theme.color.grey2}` : 'none')};\n min-height: 24px;\n border-radius: 4px;\n padding: 4px 8px;\n`;\n\nconst WidgetConfigWrapper = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n border: 1px solid ${(props) => props.theme.color.grey1};\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n padding: 4px;\n margin-bottom: 8px;\n\n div:first-child {\n margin: 0 auto;\n }\n\n div:last-child {\n align-self: flex-end;\n }\n`;\nconst Column = styled.div`\n width: 100%;\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n gap: 8px;\n`;\n\nconst CommentContainer = styled.div`\n display: flex;\n gap: 14px;\n padding: 10px 10px 0 10px;\n border-radius: 8px;\n background-color: ${({ theme }) => theme.color.white};\n border: 1px solid ${(props) => props.theme.color.grey2};\n`;\n\nexport const FormItemContainer = styled.div<{ border?: boolean }>`\n width: 100%;\n padding-bottom: 12px;\n border-bottom: ${(props) => (props.border ? `1px solid ${props.theme.color.grey1}` : 0)};\n`;\n\ntype JRCWidgetCheckListWrapperProps = {\n widget: WidgetCheckListType;\n commentId?: number;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n editRight: boolean;\n deleteRight: boolean;\n onRemove?: (uniqid: string) => void;\n onWidgetUpdate?: () => void;\n};\n\nexport const JRCWidgetCheckListWrapper = ({\n widget,\n commentId,\n inplace,\n mode,\n editRight,\n deleteRight,\n onRemove,\n onWidgetUpdate,\n}: JRCWidgetCheckListWrapperProps) => {\n const intl = useIntl();\n const { uniqid, content: widgetContent } = widget;\n const dispatch = useDispatch();\n\n const [entries, setEntries] = useState<JRCWidgetCheckListEntries | undefined>();\n\n const [isDeleteModalOpen, setDeleteModalOpen] = useState(false);\n\n const [token, setToken] = useState<string>();\n const [tokenLoading, setTokenLoading] = useState(false);\n\n const widgetWrapper = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid));\n const currentUser = useSelector(UserCurrent.selectors.get);\n\n const onError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const onChange = (uniqid: string, content: CombinedWidgetContent) => {\n dispatch(updateWidgetContent(uniqid, content));\n };\n\n const onChangeWrapper = (content: { uniqid: string; title?: string }) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ ...content }));\n };\n\n const handleCheckItem = (id: string, index: number, items: JRCWidgetCheckListEntries) => {\n if (!commentId) return;\n\n const newItems: WidgetCheckListContentArr[] = items?.map((item) => ({\n title: item.text,\n ...(item.id && { id: item.id }),\n ...(item.links && { links: item.links }),\n ...(item.mimetype && { mimetypes: item.mimetype }),\n ...(currentUser &&\n item.checked && {\n user: {\n id: item.user?.id ?? currentUser.id,\n mainType: 'user',\n type: 'user',\n },\n }),\n ...(item.checked && { value: item.checked }),\n }));\n const content = {\n arr: newItems,\n };\n dispatch(updateWidgetContent<WidgetCheckListContent>(id, content));\n\n jamespot.widget\n .checkListRespond({\n id: commentId,\n type: 'comment',\n idUser: currentUser?.id,\n uniqid: id,\n index: index,\n })\n .then(() => {\n if (onWidgetUpdate) onWidgetUpdate();\n })\n .catch((err) => {\n onError(err.message);\n });\n };\n\n const handleRemoveWidget = () => {\n dispatch(Widget.slice.actions.flushWidget({ uniqid }));\n if (onRemove) {\n onRemove(uniqid);\n }\n setDeleteModalOpen(false);\n };\n\n const openEditorPanel = (token: string) => {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n dispatch(Widget.slice.actions.setToken({ token }));\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid: widget.uniqid,\n name: WidgetsName.CheckList,\n }),\n );\n };\n\n useEffect(() => {\n const finalEntries: JRCWidgetCheckListEntries | undefined = widget.content.arr?.map((item) => ({\n text: item.title ?? '',\n checked: item.value ?? false,\n ...(item.links && {\n links: item.links,\n }),\n ...(item.user && { user: item.user ?? undefined }),\n ...(item.id && { id: item.id, mimetype: 'image/png' }),\n }));\n\n setEntries(finalEntries);\n }, [widget.content.arr, widgetContent]);\n\n useEffect(() => {\n if (token || tokenLoading) return;\n const fetchToken = () => {\n setTokenLoading(true);\n return jamespot.network\n .token()\n .then((res) => {\n setToken(res.result);\n setTokenLoading(false);\n })\n .catch((e) => {\n onError(e.errorMsg);\n });\n };\n fetchToken();\n }, [onError, token, tokenLoading]);\n\n if (mode === 'edit') {\n if (inplace) {\n return (\n <>\n <CommentContainer>\n <Column>\n <FormItemContainer border>\n <label>{intl.formatMessage({ id: 'COMMENT_WIDGET_CHECKLIST_Title' })}</label>\n <JRCInputTextRaw\n id={intl.formatMessage({ id: 'COMMENT_WIDGET_CHECKLIST_Title' })}\n required={true}\n placeholder={intl.formatMessage({ id: 'COMMENT_WIDGET_CHECKLIST_Title' })}\n type=\"text\"\n value={widgetWrapper?.title}\n onChange={(event) => {\n const { value } = event.target;\n onChangeWrapper({ uniqid, title: value });\n }}\n margin={'2px'}\n width=\"100%\"\n />\n </FormItemContainer>\n <WidgetCheckListEditor\n token={token}\n uniqid={uniqid}\n content={widgetContent}\n onChangeContent={onChange}\n onChangeWrapper={onChangeWrapper}\n openEditorPanel={openEditorPanel}\n onRemoveWidget={handleRemoveWidget}\n />\n </Column>\n </CommentContainer>\n </>\n );\n }\n }\n\n return (\n <>\n {entries && (\n <div key={widget.uniqid} style={{ width: '100%' }}>\n <WidgetCheckList\n title={widgetWrapper?.title}\n limit={10}\n initialEntries={entries}\n onFileClick={() => {\n // we did not use the onClick function\n }}\n onItemCheckListChange={(index, items) => handleCheckItem(widget.uniqid, index, items)}\n />\n {editRight && (\n <>\n <WidgetConfigWrapper>\n <div\n style={{ cursor: 'pointer' }}\n onClick={() => {\n if (token) {\n openEditorPanel(token);\n } else {\n onError(intl.formatMessage({ id: 'GLOBAL_Error' }));\n }\n }}>\n <Typography size=\"s\">\n {intl.formatMessage({ id: 'COMMENT_WIDGET_Configure' })}\n </Typography>\n </div>\n\n {deleteRight && (\n <div>\n <JRCIconButton\n iconSize={14}\n onClick={() => setDeleteModalOpen(true)}\n icon=\"icon-trash\"\n />\n </div>\n )}\n </WidgetConfigWrapper>\n </>\n )}\n <JRCModal\n buttons={[\n {\n color: 'cancel',\n clickHandler: () => setDeleteModalOpen(false),\n children: <FormattedMessage id={'GLOBAL_Cancel'} />,\n },\n {\n color: 'danger',\n clickHandler: handleRemoveWidget,\n children: <FormattedMessage id={'GLOBAL_Delete'} />,\n },\n ]}\n open={isDeleteModalOpen}\n closeHandler={() => setDeleteModalOpen(false)}\n title={intl.formatMessage({ id: 'GLOBAL_Delete' })}>\n {intl.formatMessage({ id: 'COMMENT_WIDGET_Delete_Widget' })}\n </JRCModal>\n </div>\n )}\n </>\n );\n};\n","import React from 'react';\n\nimport {\n CombinedWidgetType,\n ensureWidgetApiType,\n ensureWidgetArticleAttachmentType,\n ensureWidgetArticleButtonType,\n ensureWidgetArticleGalleryType,\n ensureWidgetArticleImageType,\n ensureWidgetArticleSliderType,\n ensureWidgetArticleTextType,\n ensureWidgetArticleTitleType,\n ensureWidgetCheckListType,\n ensureWidgetDatasourceTableType,\n WidgetDisplayMode,\n} from 'jamespot-user-api';\n\nimport { JRCWidgetApiWrapper } from './wrapper/JRCWidgetApiWrapper';\nimport { WidgetDatasourceTableWrapper } from './wrapper/JRCWidgetDatasourceTableWrapper';\nimport { JRCWidgetArticleAttachmentWrapper } from './wrapper/JRCWidgetArticleAttachmentWrapper';\nimport { JRCWidgetArticleButtonWrapper } from './wrapper/JRCWidgetArticleButtonWrapper';\nimport { JRCWidgetArticleGalleryWrapper } from './wrapper/JRCWidgetArticleGalleryWrapper';\nimport { JRCWidgetArticleImageWrapper } from './wrapper/JRCWidgetArticleImageWrapper';\nimport { JRCWidgetArticleSliderWrapper } from './wrapper/JRCWidgetArticleSliderWrapper';\nimport { JRCWidgetArticleTextWrapper } from './wrapper/JRCWidgetArticleTextWrapper';\nimport { JRCWidgetArticleTitleWrapper } from './wrapper/JRCWidgetArticleTitleWrapper';\nimport { JRCWidgetCheckListWrapper } from './wrapper/JRCWidgetCheckListWrapper';\n\nexport const DisplayWidget = ({\n widget,\n commentId,\n width,\n inplace = false,\n mode = 'view',\n editRight,\n deleteRight,\n onWidgetUpdate,\n onRemove,\n}: {\n widget: CombinedWidgetType;\n commentId?: number;\n width?: number | undefined;\n inplace: boolean;\n mode: WidgetDisplayMode;\n editRight?: boolean;\n deleteRight?: boolean;\n onRemove?: (id: string) => void;\n onWidgetUpdate?: () => void;\n onClick: () => void;\n}) => {\n const { name } = widget;\n\n 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 (ensureWidgetApiType(widget)) {\n return <JRCWidgetApiWrapper 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 (ensureWidgetDatasourceTableType(widget)) {\n return <WidgetDatasourceTableWrapper {...widget.content} uniqid={widget.uniqid} mode={mode} />;\n } else if (ensureWidgetCheckListType(widget)) {\n return (\n <JRCWidgetCheckListWrapper\n widget={widget}\n commentId={commentId}\n inplace={inplace}\n mode={mode}\n editRight={editRight ?? false}\n deleteRight={deleteRight ?? false}\n onRemove={onRemove}\n onWidgetUpdate={onWidgetUpdate}\n />\n );\n } else {\n return <>cannot display widget ({name})</>;\n }\n};\n","import styled from 'styled-components';\n\nexport const CSSWidgetLayer = styled.div<{ opacity: number; backgroundColor: string; pointerEvents: string }>`\n position: absolute;\n inset: 0;\n opacity: ${(props) => props.opacity};\n background-color: ${(props) => props.backgroundColor};\n pointer-events: ${(props) => props.pointerEvents};\n`;\n","import React, { useCallback } from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { WidgetVector, WidgetsRootState, WidgetDisplayMode, WidgetKeys } from 'jamespot-user-api';\n\nimport { WidgetEditor, Widget } from 'jamespot-front-business';\nimport WidgetWrapperCore from '../WidgetWrapperCore';\nimport { CSSWidgetLayer } from './WidgetLayer.style';\nimport { BETA_JRCDoubleClick } from 'jamespot-react-components';\n\n/*\n Widget layering\n*/\n\nexport const WidgetLayer = ({ uniqid, mode }: { uniqid: string; mode: WidgetDisplayMode }) => {\n const layers = useSelector((state: WidgetsRootState) => state.widgets.ids[uniqid].widget.layers, shallowEqual);\n return (\n <>\n {layers?.map((layer, index) => {\n if (mode === 'edit') {\n return <Layer uniqid={layer} key={index} mode={'edit'} />;\n }\n\n return <Layer uniqid={layer} key={index} mode={'edit'} />;\n })}\n </>\n );\n};\n\nconst Layer = ({ uniqid, mode }: { uniqid: string; mode: WidgetDisplayMode }) => {\n const layer = useSelector((state: WidgetsRootState) => state.widgets.layers[uniqid]);\n if (mode === 'view') {\n return (\n <CSSWidgetLayer opacity={1} backgroundColor={'transparent'} pointerEvents={'none'}>\n {layer.widgets.map((widgetWrapper, index) => {\n return (\n <LayerWidget\n key={index}\n layerId={layer.uniqid}\n uniqid={widgetWrapper.widget.uniqid}\n mode={'view'}\n />\n );\n })}\n </CSSWidgetLayer>\n );\n }\n\n return (\n <CSSWidgetLayer\n opacity={layer.visible ? 1 : 0}\n backgroundColor={layer.visible ? 'rgba(255,255,255,.1)' : 'transparent'}\n pointerEvents={layer.locked ? 'none' : 'all'}>\n {layer.widgets.map((widgetWrapper, index) => {\n return (\n <LayerWidget\n key={index}\n layerId={layer.uniqid}\n uniqid={widgetWrapper.widget.uniqid}\n mode={'edit'}\n />\n );\n })}\n </CSSWidgetLayer>\n );\n};\n\n/*\n Widget from the layer\n*/\nconst LayerWidget = ({ uniqid, layerId, mode }: { uniqid: string; layerId: string; mode: WidgetDisplayMode }) => {\n const dispatch = useDispatch();\n const widgetWrapper = useSelector((state: WidgetsRootState) => state.widgets.ids[uniqid], shallowEqual);\n const layer = useSelector((state: WidgetsRootState) => state.widgets.layers[layerId]);\n\n if (!widgetWrapper) {\n return <></>;\n }\n\n if (!layer) {\n return <></>;\n }\n\n if (!layer.position) {\n return <></>;\n }\n\n const onDoubleTap = (uniqid: string, name: WidgetKeys) => {\n /*\n Open editor\n */\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name }));\n };\n\n const onMouseUp = (position: WidgetVector) => {\n dispatch(Widget.slice.actions.updateLayer({ uniqid: layerId, props: { position } }));\n };\n\n if (mode === 'view') {\n return (\n <div style={{ position: 'absolute', top: layer.position.y, left: layer.position.x }}>\n <WidgetWrapperCore uniqid={uniqid} widget={widgetWrapper} mode={mode} inplace={true} />\n </div>\n );\n }\n\n return (\n <DraggableHandler\n position={{ x: layer.position.x, y: layer.position.y }}\n onMouseUp={(position: WidgetVector) => {\n if (\n (layer.position && layer.position.x !== position.x) ||\n (layer.position && layer.position.y !== position.y)\n ) {\n onMouseUp(position);\n }\n }}>\n <BETA_JRCDoubleClick\n onDoubleTap={() => onDoubleTap(widgetWrapper.widget.uniqid, widgetWrapper.widget.name)}>\n <WidgetWrapperCore uniqid={uniqid} widget={widgetWrapper} mode={mode} inplace={true} />\n </BETA_JRCDoubleClick>\n </DraggableHandler>\n );\n};\n\nexport type Vector = {\n x: number;\n y: number;\n};\n\n// TODO: COMBINE WITH THE ONE USED ON COLOR PICKER\n// TODO: COMBINE WITH THE ONE USED ON COLOR PICKER\n// TODO: COMBINE WITH THE ONE USED ON COLOR PICKER\nexport const DraggableHandler = ({\n position,\n children,\n onMouseUp,\n}: {\n position: Vector;\n children: React.ReactElement;\n onMouseUp: (position: Vector) => void;\n}) => {\n const [mouseIsDown, setMouseDown] = React.useState<boolean>(false);\n const [mouse, setMouse] = React.useState<Vector>({ x: 0, y: 0 });\n const [start, setStart] = React.useState<Vector>({ x: 0, y: 0 });\n const [child, setChild] = React.useState<Vector>({ x: position.x, y: position.y });\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n const handleMouseDown = useCallback(\n (event: any) => {\n setMouseDown(true);\n if (ref.current) {\n setMouse({ x: event.nativeEvent.clientX, y: event.nativeEvent.clientY });\n setStart({ x: child.x, y: child.y });\n }\n },\n [child.x, child.y],\n );\n\n const handleMouseMove = React.useCallback(\n (event: any) => {\n if (mouseIsDown && ref.current) {\n const dx = start.x + (event.clientX - mouse.x);\n const dy = start.y + (event.clientY - mouse.y);\n\n setChild({ x: dx, y: dy });\n }\n },\n [mouse.x, mouse.y, mouseIsDown, start.x, start.y],\n );\n\n const handleMouseUp = useCallback(() => {\n setMouseDown(false);\n onMouseUp({ x: child.x, y: child.y });\n }, [child.x, child.y, onMouseUp]);\n\n React.useEffect(() => {\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [handleMouseMove, handleMouseUp]);\n\n return (\n <div style={{ position: 'absolute', top: child.y, left: child.x }} ref={ref} onMouseDown={handleMouseDown}>\n {children}\n </div>\n );\n};\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport JRCore from 'App';\n\nconst JRCLoader = JRCore.registry.getLazyComponent('Loader');\n\nimport { WidgetKeys, WidgetsRootState } from 'jamespot-user-api';\nimport { Widget } from 'jamespot-front-business';\n\n/*\n Widget state\n*/\n\nexport const WidgetState = ({ name, uniqid, inplace }: { name: WidgetKeys; uniqid: string; inplace: boolean }) => {\n const state = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidgetState(state, uniqid));\n const def = Widget.definition(name);\n\n if (state?.loading) {\n return (\n <div\n style={{\n position: 'absolute',\n inset: 0,\n backgroundColor: 'rgba(255,255,255,.7)',\n display: 'flex',\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n }}>\n <JRCLoader />\n </div>\n );\n }\n\n if (state?.hover) {\n return (\n <div\n style={{\n position: 'absolute',\n inset: 0,\n backgroundColor: 'rgba(255,255,255,.7)',\n display: 'flex',\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n }}></div>\n );\n }\n\n if (!state?.initialized && inplace) {\n return <></>;\n }\n\n if (!state?.initialized && !inplace) {\n return (\n <div\n style={{\n position: 'absolute',\n inset: 0,\n backgroundColor: 'rgba(255,255,255,1)',\n display: 'flex',\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n }}>\n <img src={def.img} />\n </div>\n );\n }\n\n return <></>;\n};\n","import 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 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 { DisplayWidget } from './Widget';\nimport { WidgetLayer } from './WidgetLayer/WidgetLayer';\nimport { WidgetState } from './WidgetState';\nimport { useComponentVisible } from './hooks';\nimport { CSSWidgetWrapper } from './Widget.style';\n\ntype WidgetWrapperCoreProps = {\n uniqid: string;\n widgetObject?: Partial<jCommentList>;\n commentId?: number;\n widget: WidgetWrapperProps;\n inplace?: boolean;\n mode: WidgetDisplayMode;\n width?: number | undefined;\n editRight?: boolean;\n deleteRight?: boolean;\n onWidgetUpdate?: () => void;\n onRemove?: (id: string) => void;\n};\n\n/*\n This is a widget wrapper\n*/\nexport const WidgetWrapperCore = ({\n uniqid,\n widgetObject,\n commentId,\n widget,\n inplace = true,\n mode,\n width,\n editRight,\n deleteRight,\n onWidgetUpdate,\n onRemove,\n}: WidgetWrapperCoreProps) => {\n const dispatch = useDispatch();\n const widgetWrapper = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid));\n const indexOrder = useSelector((state: WidgetsRootState) => state.widgets.editableMap[uniqid], shallowEqual);\n const currentEditableWidgetId = useSelector(\n (state: WidgetsRootState) => state.widgets.currentEditableWidgetId,\n shallowEqual,\n );\n const isActive = useSelector(\n (state: WidgetsRootState) => state.widgets.currentEditableWidgetId === uniqid,\n shallowEqual,\n );\n const { ref, isComponentVisible, setIsComponentVisible } = useComponentVisible(false);\n\n useEffect(() => {\n if (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={widgetWrapper.widget}\n inplace={inplace}\n mode={mode}\n onClick={onClick}\n onRemove={onRemove}\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 commentId={commentId}\n inplace={inplace}\n mode={mode}\n width={width}\n onClick={onClick}\n editRight={editRight}\n deleteRight={deleteRight}\n onWidgetUpdate={onWidgetUpdate}\n onRemove={onRemove}\n />\n <WidgetLayer uniqid={uniqid} mode={mode} />\n <WidgetState name={widgetWrapper.widget.name} uniqid={widgetWrapper.widget.uniqid} inplace={inplace} />\n </CSSWidgetWrapper>\n );\n};\n\nexport default WidgetWrapperCore;\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","import React, { useMemo } from 'react';\nimport { createPortal } from 'react-dom';\nimport { v4 as uuidv4 } from 'uuid';\n\nconst EditorsPortal = J.react.registry.getLazyComponent('EditorsPortal');\nconst JRCThemeProvider = J.react.registry.getLazyComponent('ThemeProvider');\n\nconst createPortalElement = (parent: HTMLElement): HTMLDivElement => {\n let portal = document.getElementById('react-portals') as HTMLDivElement;\n\n if (!portal) {\n portal = document.createElement('div');\n portal.id = uuidv4();\n parent.appendChild(portal);\n }\n\n return portal;\n};\nexport const EditorsPanel = () => {\n const portalDiv = document.getElementById('react-portals');\n const portal = useMemo(() => portalDiv && createPortalElement(portalDiv), [portalDiv]);\n\n if (!portal) {\n return null;\n }\n return createPortal(\n <JRCThemeProvider>\n <EditorsPortal />\n </JRCThemeProvider>,\n portal,\n );\n};\n","import { getTinyMCEMentionsQueries } from 'App';\nimport {\n Application,\n ApplicationRootState,\n Comment,\n CommentRootState,\n Hook,\n HookRootState,\n Model,\n Platform,\n TinyMCE,\n Toast,\n UserCurrent,\n Widget,\n} from 'jamespot-front-business';\nimport { DriveOrFilebank, JRCCommentsBloc } from 'jamespot-react-components';\nimport jamespot, {\n AddCommentParams,\n AddRemoveActionParams,\n UpdateCommentParams,\n WidgetWrapperProps,\n jUserView,\n} from 'jamespot-user-api';\nimport { jCommentList } from 'jamespot-user-api/lib/src/types/comment';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\nimport styled, { useTheme } from 'styled-components';\nimport { WidgetList } from './widgets/WidgetList/WidgetList';\nimport WidgetWrapperCore from './widgets/WidgetWrapperCore';\nimport useCommentsLikeRT from '../hooks/useCommentsLikeRT';\nimport useCommentRT from '../hooks/useCommentRT';\n\nexport type CommentsBlocProps = {\n articleId: number;\n variant?: 'modal' | 'inline';\n};\nimport { EditorsPanel } from './widgets/components/WidgetEditorPanel';\n\nconst CommentsBlocWrapper = styled.div`\n display: flex;\n flex-direction: column;\n gap: 4px;\n flex: 1;\n width: 100%;\n margin-top: 10px;\n`;\n\nexport const CommentsBloc = ({ articleId, variant = 'inline' }: 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 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\n useCommentRT(articleId);\n\n useCommentsLikeRT(\n commentsList?.list.map((c) => c.id),\n articleId,\n );\n\n const onError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const onCommentUpdate = async (args: UpdateCommentParams) => {\n const commentToUpdate: jCommentList | undefined = commentsList?.list.find((item) => item.id === args.idComment);\n if (!commentToUpdate) return;\n return jamespot.article\n .updateComment({\n idComment: args.idComment,\n description: args.description ?? commentToUpdate.description ?? undefined,\n token: args.token,\n widgets: args.widgets,\n })\n .then(() => {\n dispatch(Comment.actions.fetchComments({ idArticle: articleId }));\n fetchToken();\n })\n .catch((e) => {\n onError(e.errorMsg);\n });\n };\n\n const onCommentDelete = async (idComment: number) => {\n // TODO : passer par le store pour avoir une réactivité directe après suppression (confirmée ensuite par retour RT)\n // -> état intermédiaire PENDING à gérer.\n jamespot.article.deleteComment(idComment).catch(onError);\n };\n\n const onWidgetUpdate = () => {\n dispatch(Comment.actions.fetchComments({ idArticle: articleId }));\n fetchToken();\n };\n\n const fetchToken = useCallback(() => {\n if (!token && !tokenLoading) {\n setTokenLoading(true);\n jamespot.network\n .token()\n .then((res) => {\n setToken(res.result);\n setTokenLoading(false);\n })\n .catch((e) => {\n onError(e.errorMsg);\n });\n }\n }, [onError, token, tokenLoading]);\n\n const onComment = useCallback(\n async (params: Pick<AddCommentParams, 'content' | 'alertAuthor' | 'sendAlert'>) => {\n if (token) {\n setLoading(true);\n const finalWidget: WidgetWrapperProps[] = Object.keys(widgetIds)\n .map((id) => {\n if (widgets?.some((w) => w.widget.uniqid === id)) {\n return widgetIds[id];\n }\n return null;\n })\n .filter((w): w is WidgetWrapperProps => w !== null);\n\n try {\n // TODO : passer par le store pour avoir une réactivité directe après ajout (confirmée ensuite par retour RT)\n // -> état intermédiaire PENDING à gérer.\n await jamespot.article\n .addComment({\n ...params,\n widgets: finalWidget,\n token,\n idArticle: articleId,\n })\n .then(() => {\n widgets.forEach((widget) => {\n dispatch(Widget.slice.actions.flushWidget({ uniqid: widget.widget.uniqid }));\n });\n setWidgets([]);\n });\n fetchToken();\n } catch (e: any) {\n onError(e.errorMsg);\n } finally {\n setLoading(false);\n }\n }\n },\n [articleId, dispatch, fetchToken, onError, token, widgetIds, widgets],\n );\n\n useEffect(() => {\n fetchToken();\n }, [fetchToken]);\n\n useEffect(() => {\n dispatch(Comment.actions.fetchComments({ idArticle: articleId }));\n\n return () => {\n dispatch(Comment.actions.discardComments({ idArticle: articleId }));\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleSocialAdd = ({\n targetId,\n targetType,\n type,\n }: AddRemoveActionParams): ReturnType<typeof jamespot.socialAction.add> =>\n jamespot.socialAction.add({\n targetType,\n targetId,\n type,\n });\n\n const handleSocialRemove = ({\n targetId,\n targetType,\n type,\n }: AddRemoveActionParams): ReturnType<typeof jamespot.socialAction.remove> =>\n jamespot.socialAction.remove({\n targetType,\n targetId,\n type,\n });\n\n const handleSocialGetUsers = ({\n targetId,\n targetType,\n type,\n }: AddRemoveActionParams): ReturnType<typeof jamespot.socialAction.getUsers<jUserView>> =>\n jamespot.socialAction.getUsers({\n targetType,\n targetId,\n type,\n });\n const handleFetchUser = (id: string): ReturnType<typeof jamespot.user.get<jUserView>> => jamespot.user.get(id);\n\n const handleFetchUserField = (id: number, type: 'popover'): ReturnType<typeof jamespot.user.getFields> =>\n jamespot.user.getFields(id, type);\n\n return (\n <>\n {tinyMCECommonOptions && (\n <>\n <CommentsBlocWrapper>\n <JRCCommentsBloc\n loading={loading}\n token={token}\n comments={commentsList?.list}\n onComment={onComment}\n onCommentUpdate={onCommentUpdate}\n onCommentDelete={onCommentDelete}\n isWidgetActive={\n !!(\n widgetHook?.isActive &&\n widgetHook?.create &&\n widgetHook?.autorize?.includes('comment')\n )\n }\n widgetListComponent={\n <WidgetList\n mode={'comment'}\n namespace={'comment'}\n onChange={(widget) => {\n setWidgets([...widgets, widget]);\n dispatch(\n Widget.slice.actions.registerWidget({\n uniqid: widget.widget.uniqid,\n widget: widget,\n }),\n );\n }}\n view={'edit'}\n />\n }\n newWidgetsWrapperComponent={\n <>\n {widgets.map(\n (widget) =>\n widget &&\n widget.widget && (\n <div key={widget.widget.uniqid}>\n <WidgetWrapperCore\n uniqid={widget.widget.uniqid}\n widget={widget}\n inplace\n mode={'edit'}\n onRemove={(id) =>\n setWidgets(widgets.filter((w) => w.widget.uniqid !== id))\n }\n />\n </div>\n ),\n )}\n </>\n }\n existingWidgetsWrapperComponent={(\n comment,\n content,\n mode,\n inplace = true,\n idComment,\n editRight = false,\n deleteRight = false,\n ) => (\n <>\n {content?.map(\n (widget) =>\n widget && (\n <div key={widget.widget.uniqid}>\n <WidgetWrapperCore\n uniqid={widget.widget.uniqid}\n widgetObject={comment}\n commentId={idComment}\n widget={widget}\n inplace={inplace}\n mode={mode}\n editRight={editRight}\n deleteRight={deleteRight}\n onWidgetUpdate={onWidgetUpdate}\n onRemove={(id) => {\n jamespot.widget\n .removeWidget({\n id: idComment,\n type: 'comment',\n uniqid: id,\n })\n .then(() => {\n dispatch(\n Comment.actions.fetchComments({\n idArticle: articleId,\n }),\n );\n fetchToken();\n })\n .catch((e) => {\n onError(e.errorMsg);\n });\n }}\n />\n </div>\n ),\n )}\n </>\n )}\n currentUser={currentUser}\n tinyMCEConfig={{\n commonOptions: tinyMCECommonOptions,\n mentionsQueries: getTinyMCEMentionsQueries(models, theme, onError),\n }}\n onError={onError}\n highlightFields={platformConfig.userHighlightFields}\n userAccountStatus={platformConfig.userAccountStatus}\n userModel={models.find((m) => m.type === 'user')}\n isWedocActive={!!onlyOffice}\n onGetHashError={(message?: string) =>\n dispatch(\n Toast.actions.error({\n label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }),\n }),\n )\n }\n activeDrives={\n // TODO : cf. https://github.com/Jamespot/jamespot-react-extensions/pull/487/\n J.debug.UploadFromDrives\n ? ([\n ...(fileBank && driveHook ? ['fileBank'] : []),\n ...Hook.utils.buildDrivesArrayFromObject(driveHook?.drives),\n ] as DriveOrFilebank[])\n : []\n }\n socialActionAdd={handleSocialAdd}\n deleteFile={async (articleId) => {\n if (!token) return;\n await jamespot.file.deleteFile(articleId, 'attachment', token);\n }}\n fetchUser={handleFetchUser}\n fetchUserFields={handleFetchUserField}\n fetchSocialActionUserList={handleSocialGetUsers}\n removeLike={handleSocialRemove}\n variant={variant}\n />\n <EditorsPanel />\n </CommentsBlocWrapper>\n </>\n )}\n </>\n );\n};\n","import { useDispatch } from 'react-redux';\nimport JRCore from '../App';\nimport { useEffect, useMemo } from 'react';\nimport { Comment } from 'jamespot-front-business';\n\nconst useCommentRT = (idArticle: number) => {\n const dispatch = useDispatch();\n const socket = useMemo(() => JRCore.socket, []);\n const rtHandlers = useMemo(() => Comment.getCommentRTHandlers(dispatch, idArticle), [dispatch, idArticle]);\n\n useEffect(() => {\n rtHandlers.forEach((handler) => {\n socket.onMessage(handler.namespace, handler.function, handler.handler);\n });\n return () => {\n rtHandlers.forEach((handler) => {\n socket.offMessage(handler.namespace, handler.function, handler.handler);\n });\n };\n }, [rtHandlers, socket]);\n};\n\nexport default useCommentRT;\n","import { useDispatch } from 'react-redux';\nimport JRCore from '../App';\nimport { useEffect, useMemo } from 'react';\nimport { Comment } from 'jamespot-front-business';\n\nconst useCommentsLikeRT = (idComments: number[] | undefined, idArticle: number) => {\n const dispatch = useDispatch();\n const socket = useMemo(() => JRCore.socket, []);\n const rtHandlers = useMemo(\n () => Comment.getCommentsLikeRTHandlers(dispatch, idComments, idArticle),\n [dispatch, idComments, idArticle],\n );\n\n useEffect(() => {\n rtHandlers.forEach((handler) => {\n socket.onMessage(handler.namespace, handler.function, handler.handler);\n });\n return () => {\n rtHandlers.forEach((handler) => {\n socket.offMessage(handler.namespace, handler.function, handler.handler);\n });\n };\n }, [rtHandlers, socket]);\n};\n\nexport default useCommentsLikeRT;\n","import * as React from 'react';\n\n// FIXME move to j-react-components + display error if dev mode\nexport const Empty = () => <></>;\n","import * as React from 'react';\nimport { Outlet, matchPath } from 'react-router-dom';\nimport { useIntl } from 'react-intl';\nimport type { JRCAppColumnProps } from 'jamespot-react-components';\nimport JRCore from 'App';\nimport { useLocation } from 'react-router-dom';\nimport { LayoutMode } from 'jamespot-react-components';\nimport { useMemo } from 'react';\n\nconst Container = JRCore.registry.getLazyComponent('Container');\nconst AppColumn = JRCore.registry.getLazyComponent('AppColumn');\nconst MainColumn = JRCore.registry.getLazyComponent('MainColumn');\n\nexport type TwoColLayoutRoute = {\n path: string;\n paths?: string[];\n key: string;\n icon: string;\n label: string;\n group?: string;\n absolutePath?: boolean;\n};\n\nexport type TwoColLayoutRoutes<T extends TwoColLayoutRoute = TwoColLayoutRoute> = Record<string, T>;\n\nexport type TwoColLayoutProps = {\n extensionRoute: string;\n routes: TwoColLayoutRoutes;\n mode?: LayoutMode;\n description: JRCAppColumnProps['description'];\n};\n\nexport function TwoColLayout({ extensionRoute, routes, description, mode = 'center' }: TwoColLayoutProps) {\n const intl = useIntl();\n const { pathname } = useLocation();\n\n const ROUTES_ARRAY = useMemo(() => Object.values(routes), [routes]);\n const [activeTab, setActiveTab] = React.useState(ROUTES_ARRAY?.[0]?.key);\n\n const tabs = ROUTES_ARRAY.map((tab) => ({\n ...tab,\n label: intl.formatMessage({ id: tab.label }),\n href: tab.absolutePath ? tab.path : `/ng/rr/${extensionRoute}/${tab.path}`,\n group: tab.group ? intl.formatMessage({ id: tab.group }) : undefined,\n }));\n\n React.useEffect(() => {\n const activeRoute = ROUTES_ARRAY.find((route) => {\n if (`/ng/rr/${extensionRoute}/${route.path}` === pathname) {\n return true;\n }\n\n return route.paths?.reduce<boolean>((previousValue: boolean, currentValue: string) => {\n const pattern = `/ng/rr/${extensionRoute}/${currentValue}`;\n const isMatch = matchPath(pattern, pathname) !== null;\n return previousValue || isMatch;\n }, false);\n });\n if (activeRoute) setActiveTab(activeRoute.key);\n }, [pathname, ROUTES_ARRAY, extensionRoute]);\n\n return (\n <React.Suspense fallback={<></>}>\n <Container mode={mode}>\n <AppColumn mode={mode} description={description} tabs={tabs} activeTab={activeTab || ''} />\n <MainColumn mode={mode}>\n <Outlet />\n </MainColumn>\n </Container>\n </React.Suspense>\n );\n}\n","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<{ visible: boolean; position: 'left' | 'right' }>`\n position: absolute;\n top: 0;\n ${(props) => (props.position === 'left' ? 'left: 0px' : '')}\n right: ${(props) => (props.visible ? '0' : '-1000')}px;\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\nexport const CSSEditorContent = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n padding: 12px;\n overflow: auto;\n margin-bottom: 12px;\n`;\n\nexport const CSSEditorMenu = styled.div`\n width: ${EDITOR_MENU_WIDTH}px;\n padding-top: 60px;\n display: flex;\n flex-direction: column;\n border-right: 1px solid ${(props) => props.theme.color.grey2};\n`;\n\nexport const CSSEditorMenuButton = styled.button<{ isActive?: boolean }>`\n border-radius: 4px;\n cursor: pointer;\n height: 42px;\n margin: 4px;\n width: 42px;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: ${(props) => (props.isActive ? props.theme.color.grey1 : props.theme.color.white)};\n &:hover {\n background-color: ${(props) => props.theme.color.grey1};\n }\n`;\n\nexport const CSSInputWrapper = styled.div`\n display: flex;\n border: 1px solid ${(props) => props.theme.color.grey1};\n border-radius: ${RADIUS}px;\n margin-bottom: 24px;\n input {\n width: 100%;\n border: 0;\n height: ${INPUT_HEIGHT}px;\n margin: 0;\n }\n`;\n\nexport const CSSEditorWidget = styled.div`\n display: flex;\n flex-direction: row;\n padding: 12px;\n background-color: ${(props) => props.theme.color.grey0};\n border-radius: 8px;\n margin-bottom: 4px;\n`;\n\nexport const CSSEditorWidgetLabel = styled.div`\n display: flex;\n flex: 1;\n align-items: center;\n`;\n\nexport const CSSEditorWidgetOption = styled.div`\n width: 40px;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nexport const CSSEditorLayer = styled.div`\n flex-direction: row;\n display: flex;\n align-items: center;\n`;\n\nexport const CSSEditorLayerTitle = styled.div`\n flex: 1;\n display: flex;\n align-items: center;\n`;\n","export const EDITOR_TOP = 90;\nexport const EDITOR_WIDTH = 440;\nexport const EDITOR_MENU_WIDTH = 50;\n","import React from 'react';\n\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { JRCButton, JRCIcon } from 'jamespot-react-components';\n\nimport { CSSEditorAction, CSSEditorHeader, CSSEditorLabel, CSSEditorMenuButton } from './style';\nimport { WidgetEditor, EditorsRootState } from 'jamespot-front-business';\n\n/*\n Editor popup (center part)\n*/\nexport const EditorPopup = ({ uniqid }: { uniqid: string }) => {\n const dispatch = useDispatch();\n const editor = useSelector((state: EditorsRootState) => WidgetEditor.selectors.selectEditor(state, uniqid));\n\n const onClick = () => {\n dispatch(WidgetEditor.slice.actions.flushEditorPopup({ uniqid }));\n };\n\n const onSave = () => {\n dispatch(WidgetEditor.slice.actions.flushEditorPopup({ uniqid }));\n };\n\n if (editor && editor.popup && editor.view) {\n return (\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column', backgroundColor: 'white', marginTop: 90 }}>\n <CSSEditorHeader>\n <CSSEditorAction />\n <CSSEditorLabel>Popup</CSSEditorLabel>\n <CSSEditorAction>\n <CSSEditorMenuButton onClick={onClick}>\n <JRCIcon name=\"icon-times\" color=\"grey2\" />\n </CSSEditorMenuButton>\n </CSSEditorAction>\n </CSSEditorHeader>\n <div style={{ flex: 1, display: 'flex' }}>{editor.view}</div>\n <CSSEditorHeader>\n <JRCButton onClick={onSave}>Save</JRCButton>\n </CSSEditorHeader>\n </div>\n );\n }\n\n return <></>;\n};\n","import React from 'react';\n\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { WidgetEditor, Widget, updateWidgetContent, Application, Toast } from 'jamespot-front-business';\n\nimport JRCore from 'App';\n\nimport jamespot, {\n CombinedWidgetContent,\n ensureWidgetApiType,\n ensureWidgetArticleAttachmentType,\n ensureWidgetArticleButtonType,\n ensureWidgetArticleGalleryType,\n ensureWidgetArticleImageType,\n ensureWidgetArticleSliderType,\n ensureWidgetArticleTextType,\n ensureWidgetArticleTitleType,\n ensureWidgetCheckListType,\n ensureWidgetDatasourceTableType,\n jObjectLittle,\n WidgetApiContent,\n WidgetArticleAttachmentContent,\n WidgetArticleButtonContent,\n WidgetArticleGalleryContent,\n WidgetArticleImageContent,\n WidgetArticleSliderContent,\n WidgetArticleTextContent,\n WidgetArticleTitleContent,\n WidgetDatasourceTableContent,\n WidgetsRootState,\n WidgetStateProps,\n} from 'jamespot-user-api';\nimport { useIntl } from 'react-intl';\n\nconst WidgetArticleTitleEditor = JRCore.registry.getLazyComponent('WidgetArticleTitleEditor');\nconst WidgetArticleTextEditor = JRCore.registry.getLazyComponent('WidgetArticleTextEditor');\nconst WidgetArticleGalleryEditor = JRCore.registry.getLazyComponent('WidgetArticleGalleryEditor');\nconst WidgetArticleAttachmentEditor = JRCore.registry.getLazyComponent('WidgetArticleAttachmentEditor');\nconst WidgetArticleSliderEditor = JRCore.registry.getLazyComponent('WidgetArticleSliderEditor');\n\nconst WidgetArticleImageEditor = JRCore.registry.getLazyComponent('WidgetArticleImageEditor');\nconst WidgetButtonEditor = JRCore.registry.getLazyComponent('WidgetButtonEditor');\nconst WidgetApiEditor = JRCore.registry.getLazyComponent('WidgetApiEditor');\nconst WidgetCheckListEditor = JRCore.registry.getLazyComponent('WidgetCheckListEditor');\n\nconst WidgetDatasourceTableEditor = JRCore.registry.getLazyComponent('WidgetDatasourceTableEditor');\n\n/*\n Editor Factory\n*/\nexport const Editor = ({ uniqid }: { uniqid: string }) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const token = useSelector(Widget.selectors.selectToken);\n const widgetWrapper = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid));\n const widgetObject = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidgetObject(state, uniqid));\n\n const onSave = (content: Partial<CombinedWidgetContent>) => {\n /*\n Update widget & Flush editor\n */\n if (widgetWrapper) {\n dispatch(Widget.slice.actions.updateWidget({ uniqid, content }));\n }\n\n dispatch(WidgetEditor.slice.actions.flushEditor({ uniqid }));\n };\n\n const onStateChange = (states: WidgetStateProps, id?: string) => {\n /*\n Set widget state (busy, loading, initialized)\n */\n if (id !== undefined) {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid: id, ...states }));\n } else {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, ...states }));\n }\n };\n\n const onOpen = (view: React.ReactElement) => {\n /*\n Register popup (central)\n */\n dispatch(WidgetEditor.slice.actions.registerEditorPopup({ uniqid, view }));\n };\n\n const validateWidgetObject = (object?: Partial<jObjectLittle>): object is jObjectLittle => {\n return object !== undefined && object.id !== undefined && object.type !== undefined;\n };\n\n const widget = widgetWrapper?.widget;\n\n if (!widget) return null;\n\n if (ensureWidgetArticleButtonType(widget)) {\n return (\n <WidgetButtonEditor\n {...widget.content}\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleButtonContent>(uniqid, content, false));\n }}\n onSave={() => onSave({})}\n />\n );\n } else if (ensureWidgetArticleGalleryType(widget)) {\n return (\n <WidgetArticleGalleryEditor\n token={token}\n content={widget.content}\n onChange={(content) =>\n dispatch(updateWidgetContent<WidgetArticleGalleryContent>(uniqid, content, false))\n }\n onSave={onSave}\n onStateChange={onStateChange}\n />\n );\n } else if (ensureWidgetArticleAttachmentType(widget)) {\n return (\n <WidgetArticleAttachmentEditor\n token={token}\n content={widget.content}\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleAttachmentContent>(uniqid, content, false));\n }}\n onSave={onSave}\n onStateChange={onStateChange}\n onOpen={onOpen}\n />\n );\n } else if (ensureWidgetArticleImageType(widget)) {\n return (\n <WidgetArticleImageEditor\n content={widget.content}\n token={token}\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleImageContent>(uniqid, content, false));\n }}\n onSave={onSave}\n onStateChange={onStateChange}\n />\n );\n } else if (ensureWidgetApiType(widget)) {\n return (\n <WidgetApiEditor\n onChange={(content) => dispatch(updateWidgetContent<WidgetApiContent>(uniqid, content, false))}\n provider={async (url: string) => {\n return fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n .then((resp) => resp.json())\n .then((response) => {\n return response.result;\n });\n }}\n initialUrl={widget.content.url ?? ''}\n order={widget.content.order ?? ''}\n orderBy={widget.content.orderBy ?? 'asc'}\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 (ensureWidgetCheckListType(widget)) {\n return (\n <WidgetCheckListEditor\n token={token}\n uniqid={widget.uniqid}\n content={widget.content}\n onChangeContent={(uniqid, content) => {\n dispatch(updateWidgetContent(uniqid, content, false));\n }}\n onChangeWrapper={(content) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ ...content }));\n }}\n onSave={(uniqid, content) => {\n if (!validateWidgetObject(widgetObject)) {\n onSave(content);\n return;\n }\n\n jamespot.widget\n .updateWidget({\n id: widgetObject.id,\n uniqid: uniqid,\n type: widgetObject.type,\n title: widgetWrapper.title,\n content,\n })\n .then(() => {\n onSave(content);\n })\n .catch((e: any) => {\n dispatch(\n Toast.actions.error({\n label: e.errorMsg ?? intl.formatMessage({ id: 'GLOBAL_Error' }),\n }),\n );\n });\n }}\n />\n );\n } else if (ensureWidgetDatasourceTableType(widget)) {\n const studioHook = Application.selectors.selectById(JRCore.store.getState(), 'StudioHook');\n const fileBankHook = Application.selectors.selectById(JRCore.store.getState(), 'FileBankHook');\n return (\n <WidgetDatasourceTableEditor\n {...widget.content}\n uri={widget.content.uri}\n limit={widget.content.limit ?? 20}\n editorAppDependencies={{\n useStudio: studioHook ? true : false,\n useFileBank: fileBankHook ? true : false,\n }}\n onSave={onSave}\n onChange={(content, override) =>\n dispatch(updateWidgetContent<WidgetDatasourceTableContent>(uniqid, content, override ?? false))\n }\n onError={(label) => {\n dispatch(Toast.actions.error({ label }));\n }}\n />\n );\n } else {\n return <>cannot display editor</>;\n }\n};\n","import React from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { WidgetEditor, Widget } from 'jamespot-front-business';\n\nimport { WidgetKeys, WidgetsRootState } from 'jamespot-user-api';\nimport { useIntl } from 'react-intl';\nimport { CSSEditorWidget, CSSEditorWidgetLabel, CSSEditorWidgetOption } from './style';\nimport { BETA_JRCDragAndDrop, JRCIcon } from 'jamespot-react-components';\nimport { WidgetList } from 'registry/coreComponents';\n\n/*\n Editor widgets (widgets)\n*/\nexport const EditorTabWidgets = ({ uniqid }: { uniqid: string; namespace: string }) => {\n const dispatch = useDispatch();\n const intl = useIntl();\n const content = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidgetContent(state, uniqid));\n\n const onClick = (uniqid: string, name: WidgetKeys) => {\n /*\n Register Editor\n */\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name }));\n };\n\n return (\n <div style={{ flex: 1 }}>\n <Layers uniqid={uniqid} />\n {content && content.widgets ? (\n content.widgets.map((widgetWrapper, index: number) => {\n const def = Widget.definition(widgetWrapper.widget.name);\n return (\n <div key={index}>\n <CSSEditorWidget>\n <CSSEditorWidgetLabel\n onClick={() => onClick(widgetWrapper.widget.uniqid, widgetWrapper.widget.name)}>\n {intl.formatMessage({ id: def.label })}\n </CSSEditorWidgetLabel>\n <CSSEditorWidgetOption\n onClick={() => {\n if (content.widgets) {\n dispatch(\n Widget.slice.actions.updateWidget({\n uniqid,\n content: {\n ...content,\n widgets: [\n ...content.widgets.filter((_, n: number) => n !== index),\n ],\n },\n }),\n );\n }\n }}>\n <JRCIcon name={'icon-trash'} />\n </CSSEditorWidgetOption>\n </CSSEditorWidget>\n </div>\n );\n })\n ) : (\n <></>\n )}\n </div>\n );\n};\n\nconst Layers = ({ uniqid }: { uniqid: string }) => {\n const dispatch = useDispatch();\n const layers = useSelector((state: WidgetsRootState) => state.widgets.ids[uniqid].widget.layers, shallowEqual);\n\n //const flushEditor = () => dispatch(WidgetEditor.slice.actions.flushEditor({ uniqid }));\n\n return (\n <>\n <BETA_JRCDragAndDrop\n onDrag={() => {\n //console.log(dragIndex, hoverIndex)\n }}\n renderEl={(layer, index) => {\n return <EditorWidgetLayer uniqid={layer} key={index} />;\n }}\n elms={layers ? layers : []}\n />\n <WidgetList\n namespace={'default'}\n onChange={(widget) => {\n dispatch(Widget.slice.actions.registerLayer({ uniqid, widget }));\n }}\n mode={'button'}\n />\n </>\n );\n};\n\nconst EditorWidgetLayerLock = ({ uniqid }: { uniqid: string }) => {\n const dispatch = useDispatch();\n const layer = useSelector((state: WidgetsRootState) => state.widgets.layers[uniqid]);\n return (\n <div\n onClick={() => {\n dispatch(Widget.slice.actions.updateLayer({ uniqid, props: { locked: !layer.locked } }));\n }}>\n <JRCIcon name={layer.locked ? 'icon-lock' : 'icon-unlock'} />\n </div>\n );\n};\n\nconst EditorWidgetLayerVisibility = ({ uniqid }: { uniqid: string }) => {\n const dispatch = useDispatch();\n const layer = useSelector((state: WidgetsRootState) => state.widgets.layers[uniqid]);\n return (\n <div\n onClick={() => {\n dispatch(Widget.slice.actions.updateLayer({ uniqid, props: { visible: !layer.visible } }));\n }}>\n <JRCIcon name={layer.visible ? 'icon-eye' : 'icon-eye-slash'} />\n </div>\n );\n};\n\nconst EditorWidgetLayerFlush = ({ uniqid, layerId }: { uniqid: string; layerId: string }) => {\n const dispatch = useDispatch();\n return (\n <div\n onClick={() => {\n dispatch(Widget.slice.actions.flushLayer({ uniqid, layerId }));\n }}>\n <JRCIcon name={'icon-trash'} />\n </div>\n );\n};\n\nconst EditorWidgetLayer = ({ uniqid }: { uniqid: string }) => {\n const layer = useSelector((state: WidgetsRootState) => state.widgets.layers[uniqid]);\n return (\n <>\n {layer.title}\n {layer.widgets.map((widget, index) => {\n const def = Widget.definition(widget.widget.name);\n\n return (\n <div style={{ flexDirection: 'row', display: 'flex' }} key={index}>\n <div style={{ flex: 1, alignItems: 'center' }}>{def.label}</div>\n <EditorWidgetLayerLock uniqid={uniqid} />\n <EditorWidgetLayerVisibility uniqid={uniqid} />\n <EditorWidgetLayerFlush uniqid={widget.widget.uniqid} layerId={layer.uniqid} />\n </div>\n );\n })}\n </>\n );\n};\n","import React from 'react';\n\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport JRCore from 'App';\n\nconst JRCButton = JRCore.registry.getLazyComponent('Button');\n\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { JRCInputText } from 'jamespot-react-components';\nimport { WidgetsRootState } from 'jamespot-user-api';\nimport { useForm } from 'react-hook-form';\nimport { useIntl } from 'react-intl';\n\n/*\n Editor tab wrapper (this is all the properties available on a widget wrapper)\n*/\nexport const EditorTabWrapper = ({ uniqid }: { uniqid: string }) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const wrapper = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid));\n const [title, setTitle] = React.useState<string | undefined>(wrapper?.title);\n\n const onClick = () => {\n if (title !== undefined) {\n /*\n Update editor\n */\n dispatch(Widget.slice.actions.updateWidgetWrapper({ uniqid, title }));\n /*\n Flush editor\n */\n dispatch(WidgetEditor.slice.actions.flushEditor({ uniqid }));\n }\n };\n\n const { control, watch } = useForm({\n defaultValues: { text: title ?? '' },\n criteriaMode: 'all',\n });\n\n React.useEffect(() => {\n const subscription = watch((data: any) => {\n setTitle(data.text);\n });\n return () => subscription.unsubscribe();\n }, [watch]);\n\n return wrapper ? (\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column', justifyContent: 'space-between' }}>\n <JRCInputText\n name={'text'}\n control={control}\n placeholder={intl.formatMessage({ id: 'WIDGET_Title' })}></JRCInputText>\n <JRCButton onClick={onClick} minWidth={'100%'}>\n {intl.formatMessage({ id: 'GLOBAL_Save' })}\n </JRCButton>\n </div>\n ) : (\n <>No wrapper</>\n );\n};\n","import React from 'react';\n\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { Editor } from './Editor';\n\nimport JRCore from 'App';\n\nconst JRCIcon = JRCore.registry.getLazyComponent('Icon');\n\nimport {\n CSSEditor,\n CSSEditorAction,\n CSSEditorContent,\n CSSEditorHeader,\n CSSEditorLabel,\n CSSEditorMask,\n CSSEditorMenu,\n CSSEditorMenuButton,\n} from './style';\n\nimport { EditorsRootState, Widget, WidgetEditor } from 'jamespot-front-business';\nimport { WidgetsRootState } from 'jamespot-user-api';\nimport { useIntl } from 'react-intl';\nimport { EditorTabWidgets } from './EditorTabWidgets';\nimport { EditorTabWrapper } from './EditorTabWrapper';\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 editor = useSelector((state: EditorsRootState) => WidgetEditor.selectors.selectEditor(state, uniqid));\n\n const def = Widget.definition(editor?.name);\n\n const [visible, isVisibile] = React.useState<boolean>(false);\n const [tab, setTab] = React.useState<string>('default');\n\n const onClose = () => {\n dispatch(WidgetEditor.slice.actions.flushEditor({ uniqid }));\n };\n\n React.useEffect(() => {\n setTimeout(() => {\n isVisibile(true);\n }, 0);\n });\n\n return editor ? (\n <CSSEditorMask>\n <CSSEditor visible={visible} 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 <JRCIcon name=\"icon-font\" color=\"grey2\" />\n </CSSEditorMenuButton>\n ) : (\n <></>\n )}\n {def.panel.useEditor ? (\n <CSSEditorMenuButton isActive={tab === 'default'} onClick={() => setTab('default')}>\n <JRCIcon name=\"icon-pen\" color=\"grey2\" />\n </CSSEditorMenuButton>\n ) : (\n <></>\n )}\n {def.panel.useWidgets ? (\n <EditorConditonalTab uniqid={uniqid}>\n <CSSEditorMenuButton isActive={tab === 'widgets'} onClick={() => setTab('widgets')}>\n <JRCIcon name=\"icon-sliders\" color=\"grey2\" />\n </CSSEditorMenuButton>\n </EditorConditonalTab>\n ) : (\n <></>\n )}\n </CSSEditorMenu>\n )}\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column' }}>\n <CSSEditorHeader>\n <EditorPositionOption uniqid={uniqid} position={editor.position}></EditorPositionOption>\n <CSSEditorLabel>{intl.formatMessage({ id: def.label })}</CSSEditorLabel>\n <CSSEditorAction>\n <CSSEditorMenuButton onClick={onClose}>\n <JRCIcon name=\"icon-times\" color=\"grey2\" />\n </CSSEditorMenuButton>\n </CSSEditorAction>\n </CSSEditorHeader>\n <CSSEditorContent>\n {tab === 'default' && def.panel.useEditor ? <Editor uniqid={editor.uniqid} /> : <></>}\n {tab === 'wrapper' && def.panel.useWrapper ? (\n <EditorTabWrapper uniqid={editor.uniqid} />\n ) : (\n <></>\n )}\n {tab === 'widgets' && def.panel.useWidgets ? (\n <EditorTabWidgets uniqid={uniqid} namespace={def.name} />\n ) : (\n <></>\n )}\n </CSSEditorContent>\n </div>\n </CSSEditor>\n {editor?.popup ? (\n <div style={{ position: 'absolute', inset: 0, backgroundColor: '#000', opacity: '.7' }}></div>\n ) : (\n <></>\n )}\n </CSSEditorMask>\n ) : (\n <></>\n );\n};\n\nconst EditorPositionOption = ({ uniqid, position }: { uniqid: string; position: 'left' | 'right' }) => {\n const dispatch = useDispatch();\n\n const onClick = () => {\n dispatch(\n WidgetEditor.slice.actions.setEditorPosition({ uniqid, position: position === 'left' ? 'right' : 'left' }),\n );\n };\n\n return (\n <CSSEditorAction>\n <CSSEditorMenuButton onClick={onClick}>\n <JRCIcon name={position === 'left' ? 'icon-angle-right' : 'icon-angle-left'} color=\"grey2\" />\n </CSSEditorMenuButton>\n </CSSEditorAction>\n );\n};\n\nconst EditorConditonalTab = ({ uniqid, children }: { uniqid: string; children: React.ReactElement }) => {\n const widgetState = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidgetState(state, uniqid));\n\n if (widgetState?.initialized) {\n return children;\n }\n\n return <></>;\n};\n","import React from 'react';\n\nimport { useSelector } from 'react-redux';\n\nimport { EDITOR_TOP, EDITOR_WIDTH } from './const';\nimport { EditorPopup } from './EditorPopup';\nimport { EditorWrapper } from './EditorWrapper';\nimport { CSSEditorPortal } from './style';\nimport { WidgetEditor } from 'jamespot-front-business';\n\nimport styled from 'styled-components';\n\nexport const CSSEditorPortalWrapper = styled.div`\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 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);\n return (\n <CSSEditorPortalWrapper>\n {editors.map((editor, index: number) => {\n if (editor.position === 'left') {\n return (\n <CSSEditorPortal isActive={false} key={index}>\n <CSSEditorPortalRow>\n <EditorWrapper uniqid={editor.uniqid} 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 { JTinyMCEExtensionsBuilders } from 'jamespot-react-components';\nimport { JIACapabilities } from 'jamespot-user-api';\nimport { useCallback, useMemo, useState } from 'react';\nimport { useIntl } from 'react-intl';\n\nexport type JiaTextEnhanceQuery = {\n resolve: (value: string | PromiseLike<string>) => void;\n reject: (reason?: any) => void;\n capability: JIACapabilities;\n text: string;\n};\n\nexport const useAI = () => {\n const [query, setQuery] = useState<JiaTextEnhanceQuery | undefined>();\n const intl = useIntl();\n\n const PrepareAndSetQuery = useCallback((query: JiaTextEnhanceQuery) => {\n const internalResolve = (value: string | PromiseLike<string>) => {\n query.resolve(value);\n setQuery(undefined);\n };\n const internalReject = (value: any) => {\n query.reject(value);\n setQuery(undefined);\n };\n setQuery({\n ...query,\n reject: internalReject,\n resolve: internalResolve,\n });\n }, []);\n\n const fetch = useCallback(\n (text: string, capability: JIACapabilities) => {\n return new Promise<string>((resolve, reject) => {\n PrepareAndSetQuery({\n reject,\n resolve,\n text,\n capability,\n });\n });\n },\n [PrepareAndSetQuery],\n );\n\n const AICapabilities = useMemo(() => {\n return {\n develop: (text: string) => fetch(text, 'develop'),\n summarize: (text: string) => fetch(text, 'summarize'),\n tldr: (text: string) => fetch(text, 'tldr'),\n en: (text: string) => fetch(text, 'en'),\n es: (text: string) => fetch(text, 'es'),\n formal: (text: string) => fetch(text, 'formal'),\n funny: (text: string) => fetch(text, 'funny'),\n };\n }, [fetch]);\n\n const ext = useMemo(() => JTinyMCEExtensionsBuilders.jia(AICapabilities, intl), [intl, AICapabilities]);\n\n return [query, ext] as const;\n};\n","import { JiaTextEnhanceQuery } from 'hooks/useAI';\nimport { JRCLoader, JRCModalContent, JRCModalLayout, JRCTypography } from 'jamespot-react-components';\nimport jamespot from 'jamespot-user-api';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { useIntl } from 'react-intl';\n\nimport styled, { useTheme } from 'styled-components';\n\nconst TextWrapper = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n`;\n\nexport type AIModalProps = {\n query: JiaTextEnhanceQuery | undefined;\n};\n\ntype ResponseType = {\n response: string | undefined;\n loading: boolean;\n error: string | undefined;\n};\n\nconst loadingResponse: ResponseType = {\n response: undefined,\n loading: true,\n error: undefined,\n};\n\nexport const AIModal = ({ query }: AIModalProps) => {\n const intl = useIntl();\n const [response, setResponse] = useState<ResponseType>(loadingResponse);\n const theme = useTheme();\n\n const sendAIRequest = useCallback(\n (query: JiaTextEnhanceQuery) => {\n setResponse(loadingResponse);\n jamespot.jia\n .textEnhancement({ text: query.text, capacity: query.capability })\n .then((response) => {\n if (response.error) {\n setResponse({\n error: `${intl.formatMessage({ id: 'JIA_ERROR_AI_CALL' })}${\n response.errorMsg && ': ' + response.errorMsg\n }`,\n loading: false,\n response: undefined,\n });\n return;\n }\n const textResponse = response.result.text;\n setResponse({\n error: undefined,\n loading: false,\n response: textResponse,\n });\n })\n .catch((_err) => {\n setResponse({\n error: intl.formatMessage({ id: 'JIA_ERROR_AI_CALL' }),\n loading: false,\n response: undefined,\n });\n });\n },\n [intl],\n );\n\n useEffect(() => {\n if (query && query.text.trim().length > 0) {\n sendAIRequest(query);\n }\n }, [query, sendAIRequest]);\n\n return (\n <JRCModalLayout\n zIndex={theme.zIndex.tinyMCEModal}\n open={!!query}\n closeHandler={() => {\n query?.reject();\n }}>\n <JRCModalContent\n overflow=\"scroll\"\n buttons={[\n {\n children: intl.formatMessage({ id: 'GLOBAL_Try_Again' }),\n clickHandler: () => {\n query && sendAIRequest(query);\n },\n },\n {\n children: intl.formatMessage({ id: 'GLOBAL_Validation' }),\n clickHandler: () => response.response && query?.resolve(response.response),\n },\n {\n children: intl.formatMessage({ id: 'GLOBAL_Cancel' }),\n clickHandler: () => query?.reject(),\n },\n ]}\n isFull>\n <TextWrapper>\n {response.loading && (\n <>\n <JRCLoader />\n <JRCTypography align=\"center\">\n {intl.formatMessage({ id: 'JIA_WAITING_WARNIG' })}\n </JRCTypography>\n </>\n )}\n {!response.loading && response.error && <p>{response.error}</p>}\n {!response.loading && response.response && <p>{response.response}</p>}\n </TextWrapper>\n </JRCModalContent>\n </JRCModalLayout>\n );\n};\n","import { Model, Toast } from 'jamespot-front-business';\nimport React, { useCallback, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useIntl } from 'react-intl';\nimport { useTheme } from 'styled-components';\nimport { useAI } from 'hooks/useAI';\nimport { getTinyMCEMentionsQueries } from 'App';\nimport { JRCInputTinyMCE, JRCInputTinyMCEProps } from 'jamespot-react-components';\nimport { FieldValues } from 'react-hook-form/dist/types';\nimport { AIModal } from './extension/AIModal';\nimport JRCore from 'App';\n\nexport type JRCInputTinyMCEWithExtProps<T extends FieldValues> = Omit<\n JRCInputTinyMCEProps<T>,\n 'commonOptions' | 'mentionsQueries' | 'additionalExtensions'\n>;\n\nexport const JRCInputTinyMCEWithExt = <T extends FieldValues = FieldValues>(props: JRCInputTinyMCEWithExtProps<T>) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const theme = useTheme();\n const models = useSelector(Model.selectors.selectAll);\n const [query, extAI] = useAI();\n\n const isAIActive = useMemo(() => {\n return J.hooks?.JIAHook?.isActive && J.debug['JIABETA'];\n }, []);\n\n const extArray = useMemo(() => {\n return isAIActive ? [extAI] : [];\n }, [extAI, isAIActive]);\n\n const onMentionsQueryError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const tinyMentionsQueries = useMemo(() => {\n return getTinyMCEMentionsQueries(models, theme, onMentionsQueryError);\n }, [models, onMentionsQueryError, theme]);\n\n const commonOptions = useMemo(() => JRCore.tinymceCommonOptions, []);\n\n return (\n <>\n {commonOptions && (\n <JRCInputTinyMCE\n commonOptions={commonOptions}\n additionalExtensions={extArray}\n mentionsQueries={tinyMentionsQueries}\n {...props}\n />\n )}\n <AIModal query={query} />\n </>\n );\n};\n","import { Model, Toast } from 'jamespot-front-business';\nimport React, { useCallback, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useIntl } from 'react-intl';\nimport { useTheme } from 'styled-components';\nimport { useAI } from 'hooks/useAI';\nimport { getTinyMCEMentionsQueries } from 'App';\nimport { JRCInputTinyMCERaw, JRCInputTinyMCERawProps } from 'jamespot-react-components';\nimport { AIModal } from './extension/AIModal';\nimport JRCore from 'App';\n\nexport type JRCInputTinyMCEWithExtProps = Omit<\n JRCInputTinyMCERawProps,\n 'commonOptions' | 'mentionsQueries' | 'additionalExtensions'\n>;\n\nexport const JRCInputTinyMCEWithExtRaw = (props: JRCInputTinyMCEWithExtProps) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const theme = useTheme();\n const models = useSelector(Model.selectors.selectAll);\n const [query, extAI] = useAI();\n\n const isAIActive = useMemo(() => {\n return J.hooks?.JIAHook?.isActive && J.debug['JIABETA'];\n }, []);\n\n const extArray = useMemo(() => {\n return isAIActive ? [extAI] : [];\n }, [extAI, isAIActive]);\n\n const onMentionsQueryError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const tinyMentionsQueries = useMemo(() => {\n return getTinyMCEMentionsQueries(models, theme, onMentionsQueryError);\n }, [models, onMentionsQueryError, theme]);\n\n const commonOptions = useMemo(() => JRCore.tinymceCommonOptions, []);\n\n return (\n <>\n {commonOptions && (\n <JRCInputTinyMCERaw\n commonOptions={commonOptions}\n additionalExtensions={extArray}\n mentionsQueries={tinyMentionsQueries}\n {...props}\n />\n )}\n <AIModal query={query} />\n </>\n );\n};\n","import * as React from 'react';\nimport { DisplayFormRef, FieldsWith } from './types';\nimport { useForm, Control, FieldValues } from 'react-hook-form';\nimport { useDisplayForm } from './useDisplay';\nimport styled, { css } from 'styled-components';\nimport { FormEventHandler, ReactNode, Ref } from 'react';\n\nconst StretchContainer = css`\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n`;\n\nconst Container = styled.div<{ stretch?: boolean }>`\n ${({ stretch }) => stretch && StretchContainer}\n`;\n\nconst Form = styled.form<{ stretch?: boolean }>`\n ${({ stretch }) => stretch && StretchContainer}\n`;\n\nconst 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: FieldsWith<'input', TFieldValues>;\n extraInputs?: (control: Control<TFieldValues>) => React.ReactNode;\n defaultValues?: any;\n onSubmit?: any;\n buttons?: React.ReactNode;\n readOnly?: boolean;\n dataCy?: string;\n stretch?: boolean;\n children?: React.ReactNode;\n};\n\n/****\n * The jamespot model depend on the platform\n * For example a user can have the size attribute only for a given platform\n * The model specifics of a platform are stored in J.model\n *\n * This component display an array of attributes only if this attribute is activated on the platform\n */\nconst _DisplayForm = <TFieldValues extends FieldValues>(\n props: DisplayFormProps<TFieldValues>,\n ref: React.ForwardedRef<DisplayFormRef>,\n) => {\n const formRef = React.useRef<HTMLFormElement | HTMLDivElement>(null);\n\n const [configuration, defaultValues] = useDisplayForm(props.fields, props.type);\n\n const { handleSubmit, control, reset, ...formFn } = useForm({\n defaultValues: {\n ...defaultValues,\n ...props.defaultValues,\n },\n criteriaMode: 'all',\n });\n\n React.useImperativeHandle(\n ref,\n () => ({\n ...formFn,\n handleSubmit,\n control,\n reset: () => {\n // in case the form is scrollable\n formRef?.current?.scrollTo(0, 0);\n // reset react-hook-form form\n reset();\n },\n }),\n // 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"],"names":["CSSSquareWidgetWrapper","CSSSquareWidget","props","theme","color","grey2","available","CSSWidgetButton","primary","open","CSSWrapWidgetWrapper","CSSWrapTitle","grey0","CSSWrapWidget","index","full","Flex","direction","gap","JRCButton","registry","getLazyComponent","JRCModalLayout","JRCModalContent","JRCTooltip","JRCIconButton","WidgetList","mode","view","children","namespace","onChange","isOpen","setOpen","widgets","definition","WidgetsName","ArticleTitle","ArticleButton","CheckList","ArticleText","ArticleImage","ArticleSlider","ArticleAttachment","getBuilderWidgets","intl","useIntl","args","portalId","variant","closeHandler","onClick","name","factory","onClickIconClose","buttons","FormattedMessage","id","clickHandler","undefined","title","formatMessage","map","widget","key","src","img","label","description","className","minWidth","WidgetModeArticle","WidgetModeComment","bg","bgHover","iconSize","icon","Wrapper","JRCWidgetApiWrapper","url","keys","order","orderBy","content","data","setData","length","startsWith","isAValidURL","fetch","method","headers","then","resp","json","response","Array","isArray","result","console","warn","JRCWidgetApi","WidgetTable","Loader","AbsoluteWrapper","space","md","WrapperEditMode","WidgetDatasourceTableWrapper","uniqid","uri","limit","tableHeadColor","tableHeadTextColor","tableHeadIconColor","tableRowColor","tableRowTextColor","tableColumnsData","tableBorderRadius","tableSizedColumns","tableSizedColumnsWidth","dispatch","isEditorOpenOnFirstRender","setIsEditorOpenOnFirstRender","useState","isLoading","setIsLoading","datasourceData","setDatasourceData","datasourceModel","setDatasourceModel","useMemo","DatasourceTable","useEffect","get","Format","VIEW","model","finally","registerEditor","useCallback","slice","actions","flushAllEditor","columns","toRet","filter","isVisible","forEach","column","find","el","push","getVisibleColumns","rows","alt","JRCHtml","__html","CSSHidden","WidgetUploader","initialFiles","initialClick","multiple","accept","onUploadStart","onUploadEnd","onUploadSuccess","uploadRef","token","useSelector","selectors","selectToken","total","setTotal","files","setFiles","current","click","JRCInputFileAdvancedRaw","ref","totalFile","prevTotal","fileResponse","prevFiles","WidgetAttachment","FileViewer","CSSWrapper","JRCWidgetArticleAttachmentWrapper","inplace","useDispatch","isActive","state","shallowEqual","onError","message","error","setWidgetState","mounted","empty","onlyOffice","selectById","option","file","getAccessHash","Error","hash","idFile","target","window","getWedocFilePath","wedocWindowOpen","catch","openWithOptions","condition","f","includes","mimetype","options","loading","JRCWidgetEmptyInplace","CSSButtonWrapper","CSSPointer","clickable","JRCWidgetArticleButtonWrapper","text","backgroundColor","buttonSize","borderRadius","JRCWidgetButton","JRCWidgetArticleGallery","CSSImagePointer","JRCWidgetArticleGalleryWrapper","maxWidth","WidgetImage","CSSImageWrapperHover","white","mockFileLittle","type","mainType","dateCreation","dateModified","_url","size","strToTimestamp","str","timestamp","Date","parse","isNaN","getTime","JRCWidgetArticleImageWrapper","width","useFilter","setUri","formatImgUrl","now","from","path","JRCWidgetArticleSliderWrapper","dynamicWidth","setDynamicWidth","useRef","fileViewerFiles","slides","slide","handleResize","offsetWidth","addEventListener","removeEventListener","isEditable","handleEditor","style","JRCWidgetSlider","useDots","loop","startAt","onClickSlide","WidgetArticleText","CSSTextWrapper","JRCWidgetArticleTextWrapper","useTheme","isBusy","selectWidgetState","busy","tinyMCECommonOptions","selectTinyMCECommonOptions","models","selectAll","tinyMentionsQueries","getTinyMCEMentionsQueries","autoFocus","tinymceScriptSrc","commonOptions","mentionsQueries","WidgetArticleTitle","ToolWrapper","grey1","Tool","JRCWidgetArticleTitleWrapper","heading","Toolbar","sizeValue","WidgetCheckList","J","react","WidgetCheckListEditor","Typography","WidgetConfigWrapper","border","Column","CommentContainer","FormItemContainer","JRCWidgetCheckListWrapper","commentId","editRight","deleteRight","onRemove","onWidgetUpdate","widgetContent","entries","setEntries","isDeleteModalOpen","setDeleteModalOpen","setToken","tokenLoading","setTokenLoading","widgetWrapper","selectWidget","currentUser","onChangeWrapper","updateWidgetWrapper","handleRemoveWidget","flushWidget","openEditorPanel","finalEntries","arr","item","checked","value","links","user","res","e","errorMsg","JRCInputTextRaw","required","placeholder","event","margin","onChangeContent","onRemoveWidget","initialEntries","onFileClick","onItemCheckListChange","items","mimetypes","checkListRespond","idUser","err","handleCheckItem","cursor","JRCModal","DisplayWidget","ensureWidgetArticleButtonType","ensureWidgetArticleGalleryType","ensureWidgetArticleAttachmentType","ensureWidgetArticleImageType","ensureWidgetApiType","ensureWidgetArticleSliderType","ensureWidgetArticleTitleType","ensureWidgetArticleTextType","ensureWidgetDatasourceTableType","ensureWidgetCheckListType","CSSWidgetLayer","opacity","pointerEvents","WidgetLayer","layers","ids","layer","Layer","LayerWidget","layerId","visible","locked","position","top","y","left","x","DraggableHandler","onMouseUp","updateLayer","BETA_JRCDoubleClick","onDoubleTap","mouseIsDown","setMouseDown","mouse","setMouse","start","setStart","child","setChild","handleMouseDown","nativeEvent","clientX","clientY","handleMouseMove","dx","dy","handleMouseUp","document","onMouseDown","JRCLoader","WidgetState","def","inset","display","flex","justifyContent","alignItems","hover","initialized","grey3","font","CSSWidgetWrapper","WidgetWrapperCore","widgetObject","indexOrder","editableMap","currentEditableWidgetId","isComponentVisible","setIsComponentVisible","registerWidgetObject","object","registerWidget","setEditableWidgetId","_widget","openingType","openingTypeLink","setEditableIndex","getRandomValues","rnds8","Uint8Array","rng","crypto","bind","msCrypto","byteToHex","i","toString","substr","offset","arguments","uuid","toLowerCase","test","TypeError","buf","rnds","random","EditorsPortal","JRCThemeProvider","EditorsPanel","portalDiv","getElementById","portal","parent","createElement","appendChild","createPortalElement","createPortal","CommentsBlocWrapper","CommentsBloc","articleId","setLoading","setWidgets","widgetIds","selectWidgets","platformConfig","selectPlatformConfig","commentsList","commentList","driveHook","selectHook","fileBank","widgetHook","idArticle","socket","rtHandlers","getCommentRTHandlers","handler","onMessage","function","offMessage","idComments","getCommentsLikeRTHandlers","list","c","fetchComments","fetchToken","onComment","params","finalWidget","Object","some","w","addComment","discardComments","JRCCommentsBloc","comments","onCommentUpdate","commentToUpdate","idComment","updateComment","onCommentDelete","deleteComment","isWidgetActive","create","autorize","widgetListComponent","newWidgetsWrapperComponent","existingWidgetsWrapperComponent","comment","removeWidget","tinyMCEConfig","highlightFields","userHighlightFields","userAccountStatus","userModel","m","isWedocActive","onGetHashError","activeDrives","debug","UploadFromDrives","utils","buildDrivesArrayFromObject","drives","socialActionAdd","targetId","targetType","add","deleteFile","fetchUser","fetchUserFields","getFields","fetchSocialActionUserList","getUsers","removeLike","remove","Empty","Container","AppColumn","MainColumn","TwoColLayout","extensionRoute","routes","pathname","useLocation","ROUTES_ARRAY","values","activeTab","setActiveTab","tabs","tab","href","absolutePath","group","activeRoute","route","paths","reduce","previousValue","currentValue","pattern","isMatch","matchPath","fallback","Outlet","CSSEditorPortal","CSSEditorHeader","CSSEditorAction","CSSEditorLabel","CSSEditorMask","EDITOR_WIDTH","CSSEditor","CSSEditorContent","CSSEditorMenu","CSSEditorMenuButton","CSSEditorWidget","CSSEditorWidgetLabel","CSSEditorWidgetOption","EditorPopup","editor","selectEditor","popup","flexDirection","marginTop","flushEditorPopup","JRCIcon","WidgetArticleTitleEditor","WidgetArticleTextEditor","WidgetArticleGalleryEditor","WidgetArticleAttachmentEditor","WidgetArticleSliderEditor","WidgetArticleImageEditor","WidgetButtonEditor","WidgetApiEditor","WidgetDatasourceTableEditor","Editor","selectWidgetObject","onSave","updateWidget","flushEditor","onStateChange","states","onOpen","registerEditorPopup","provider","initialUrl","studioHook","store","getState","fileBankHook","editorAppDependencies","useStudio","useFileBank","override","EditorTabWidgets","selectWidgetContent","Layers","_","n","BETA_JRCDragAndDrop","onDrag","renderEl","EditorWidgetLayer","elms","registerLayer","EditorWidgetLayerLock","EditorWidgetLayerVisibility","EditorWidgetLayerFlush","flushLayer","EditorTabWrapper","wrapper","setTitle","control","watch","useForm","defaultValues","criteriaMode","subscription","unsubscribe","JRCInputText","EditorWrapper","isVisibile","setTab","setTimeout","panel","useWrapper","useEditor","useWidgets","EditorConditonalTab","EditorPositionOption","setEditorPosition","widgetState","CSSEditorPortalWrapper","CSSEditorPortalPopupWrapper","CSSEditorPortalRow","CSSEditorPortalFreeSpace","editors","selectEditors","useAI","query","setQuery","PrepareAndSetQuery","reject","resolve","capability","Promise","AICapabilities","develop","summarize","tldr","en","es","formal","funny","JTinyMCEExtensionsBuilders","jia","TextWrapper","loadingResponse","AIModal","setResponse","sendAIRequest","textEnhancement","capacity","textResponse","_err","trim","zIndex","tinyMCEModal","overflow","isFull","JRCTypography","align","JRCInputTinyMCEWithExt","extAI","isAIActive","hooks","JIAHook","extArray","onMentionsQueryError","tinymceCommonOptions","JRCInputTinyMCE","additionalExtensions","JRCInputTinyMCEWithExtRaw","JRCInputTinyMCERaw","StretchContainer","css","stretch","Form","FormElm","onSubmit","FieldsetWrapper","DisplayForm","formRef","configuration","useDisplay","fields","handleSubmit","reset","formFn","scrollTo","Input","conf","dataCy","readOnly","extraInputs"],"sourceRoot":""}