{"version":3,"file":"Wysiwyg-DKKo1ZGa.mjs","sources":["../../admin/src/utils/prefixFileUrlWithBackendUrl.ts","../../admin/src/components/Editor.tsx","../../admin/src/components/MediaLib.tsx","../../admin/src/components/Wysiwyg.tsx"],"sourcesContent":["export const prefixFileUrlWithBackendUrl = (path: string, defaultDomain = 'http://localhost:1337') => {\n  if (path?.startsWith('http')) {\n    return path;\n  }\n  const url = process.env.BACKEND_URL;\n\n  if (url) {\n    return url + path;\n  } else {\n    return defaultDomain + path;\n  }\n};\n","import React, { useEffect, useState } from 'react';\nimport { Editor } from '@tinymce/tinymce-react';\nimport { PLUGIN_ID } from '../pluginId';\nimport taskRequests from '../api/settings';\nimport { useFetchClient } from '@strapi/strapi/admin';\nimport { prefixFileUrlWithBackendUrl } from '../utils/prefixFileUrlWithBackendUrl';\n\ninterface TinyEditorProps {\n    onChange: (e: any) => void;\n    name: string;\n    value?: string;\n    disabled?: boolean;\n}\n\nconst TinyEditor = ({ onChange, name, value, disabled }: TinyEditorProps) => {\n    const { get } = useFetchClient();\n\n    const [pluginConfig, setPluginConfig] = useState<any>(null);\n    const [apiKey, setApiKey] = useState('');\n    const [loading, setLoading] = useState(true);\n    const uploadUrl = prefixFileUrlWithBackendUrl('/api/upload', pluginConfig?.data?.defaultAdminDomain || '');\n\n    useEffect(() => {\n        const getApiKey = async () => {\n            const data = await taskRequests.getSettings();\n            if (data) {\n                return setApiKey(data.data.apiKey);\n            }\n        };\n        const getPluginConfig = async () => {\n            const editor = await get(`/${PLUGIN_ID}/config/editor`);\n            if (editor) {\n                setPluginConfig(editor);\n            }\n        };\n        getApiKey().then(() => {\n            setLoading(false);\n        });\n        getPluginConfig();\n    }, []);\n\n    return !loading && pluginConfig?.data ? (\n        <Editor\n            apiKey={apiKey || ''}\n            tinymceScriptSrc={pluginConfig?.data?.tinymceSrc || undefined}\n            value={value}\n            tagName={name}\n            onEditorChange={(editorContent) => {\n                onChange({ target: { name, value: editorContent } });\n            }}\n            init={{\n                ...pluginConfig?.data?.editorConfig,\n                images_upload_handler: async (blobInfo) => {\n                    const formData = new FormData();\n                    formData.append('files', blobInfo.blob());\n                    const response = await fetch(uploadUrl, {\n                        method: 'POST',\n                        headers: {\n                            Authorization: 'Bearer ',\n                        },\n                        body: formData,\n                    })\n                        .then((response) => response.json())\n                        .catch(function (err) {\n                            console.log('error:', err);\n                        });\n                    return response?.[0]?.url || '';\n                },\n            }}\n        />\n    ) : (\n        <></>\n    );\n};\n\nexport default TinyEditor;\n","import React from 'react';\nimport { prefixFileUrlWithBackendUrl } from '../utils/prefixFileUrlWithBackendUrl';\nimport { useStrapiApp } from '@strapi/strapi/admin';\n\ninterface MediaLibProps {\n    isOpen?: boolean;\n    onChange?: (e: any) => void;\n    onToggle?: () => void;\n}\n\nconst MediaLib = ({ isOpen, onChange, onToggle }: MediaLibProps) => {\n    const mediaLibraryDialog = useStrapiApp('mediaLibrary', (state: any) => state.components);\n    const MediaDialog = mediaLibraryDialog['media-library'];\n\n\n    const handleSelectAssets = (files: any) => {\n        const formattedFiles = files.map((f: any) => ({\n            alt: f.alternativeText || f.name,\n            url: prefixFileUrlWithBackendUrl(f.url),\n            mime: f.mime,\n        }));\n\n        if (onChange) onChange(formattedFiles);\n    };\n\n    if (!isOpen) {\n        return null;\n    }\n\n    return <MediaDialog onClose={onToggle} onSelectAssets={handleSelectAssets} />;\n};\n\nexport default MediaLib;\n","import React, { useState } from 'react';\nimport { Box, Button, Flex, Typography } from '@strapi/design-system';\nimport { Earth, Image } from '@strapi/icons';\nimport TinyEditor from './Editor';\nimport MediaLib from './MediaLib';\n\ninterface WysiwygProps {\n  disabled?: boolean;\n  error?: string;\n  name: string;\n  onChange: (e: any) => void;\n  required?: boolean;\n  label?: string;\n  placeholder?: string;\n  hint?: string;\n  value?: any;\n  attribute?: any;\n}\n\nconst Wysiwyg = ({ name, onChange, value, label, disabled, error, required, hint, attribute }: WysiwygProps) => {\n  const localized = Boolean(attribute?.pluginOptions?.i18n?.localized || false);\n  const [mediaLibVisible, setMediaLibVisible] = useState(false);\n\n  const handleToggleMediaLib = () => setMediaLibVisible((prev) => !prev);\n\n  const handleChangeAssets = (assets: any) => {\n    let newValue = value ? value : \"\";\n\n    assets.map((asset: any) => {\n      if (asset.mime.includes(\"image\")) {\n        const imgTag = `<p><img src=\"${asset.url}\" alt=\"${asset.alt}\"></img></p>`;\n        newValue = `${newValue}${imgTag}`;\n      }\n      if (asset.mime.includes(\"video\")) {\n        const videoTag = `<video><source src=\"${asset.url}\" alt=\"${asset.alt}\"</source></video>`;\n        newValue = `${newValue}${videoTag}`;\n      }\n    });\n\n    onChange({ target: {name, value: newValue } });\n    handleToggleMediaLib();\n  };\n\n  return (\n    <>\n      <Box>\n        {label && (\n          <Flex paddingBottom={1}>\n            <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral800\">\n              {label}\n            </Typography>\n            {required && (\n              <Typography variant=\"omega\" fontWeight=\"bold\" textColor=\"danger600\">\n                *\n              </Typography>\n            )}\n            {localized && (\n              <Flex paddingLeft={1}>\n                <Earth width={12} height={12}/>\n              </Flex>\n            )}\n          </Flex>\n        )}\n        <Button\n          startIcon={<Image/>}\n          variant=\"secondary\"\n          fullWidth\n          onClick={handleToggleMediaLib}\n        >\n          Media library\n        </Button>\n        <TinyEditor disabled={Boolean(disabled)} name={name} onChange={onChange} value={value}/>\n        {(error || hint) && (\n          <Box paddingTop={1}>\n            {error ? (\n              <Typography variant=\"pi\" textColor=\"danger600\">\n                {error}\n              </Typography>\n            ) : (\n              <Typography variant=\"pi\" textColor=\"neutral600\">\n                {hint}\n              </Typography>\n            )}\n          </Box>\n        )}\n      </Box>\n      <MediaLib\n        isOpen={mediaLibVisible}\n        onChange={handleChangeAssets}\n        onToggle={handleToggleMediaLib}\n      />\n    </>\n  );\n};\n\nexport default Wysiwyg;\n"],"names":["response"],"mappings":"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"}