fix: improve handling of config and rte plugin

This commit is contained in:
Michael Zetterberg
2024-03-26 14:40:24 +01:00
parent 8cad5ea290
commit 7c6dda1781
3 changed files with 20 additions and 12 deletions

View File

@@ -4,6 +4,7 @@ import { useEffect, useState } from "react"
export class SDKLoadingError extends Error {} export class SDKLoadingError extends Error {}
export default function useApp() { export default function useApp() {
const modalElementId = "field"
const [, setError] = useState() const [, setError] = useState()
const [sdk, setSdk] = useState<UiLocation>() const [sdk, setSdk] = useState<UiLocation>()
const [config, setConfig] = useState<Record<string, string>>() const [config, setConfig] = useState<Record<string, string>>()
@@ -19,7 +20,7 @@ export default function useApp() {
const config = await initSdk.getConfig() const config = await initSdk.getConfig()
setConfig(config) setConfig(config)
const iframeWrapperRef = document.getElementById("field") const iframeWrapperRef = document.getElementById(modalElementId)
window.iframeRef = iframeWrapperRef window.iframeRef = iframeWrapperRef
window.postRobot = initSdk.postRobot window.postRobot = initSdk.postRobot
} catch (e) { } catch (e) {
@@ -42,5 +43,6 @@ export default function useApp() {
return { return {
sdk, sdk,
config, config,
modalElementId,
} }
} }

View File

@@ -11,7 +11,7 @@ import type { InsertResponse } from "~/types/imagevault"
const ImageVaultDAM = lazy(() => import("~/components/ImageVaultDAM")) const ImageVaultDAM = lazy(() => import("~/components/ImageVaultDAM"))
export default function Field() { export default function Field() {
const { sdk, config } = useApp() const { sdk, config: appConfig, modalElementId } = useApp()
const ivStatus = useScript( const ivStatus = useScript(
"/scripts/imagevault-insert-media/insertmediawindow.min.js" "/scripts/imagevault-insert-media/insertmediawindow.min.js"
) )
@@ -46,7 +46,7 @@ export default function Field() {
return <Disclaimer /> return <Disclaimer />
} }
const loaded = !!(fieldData && ivStatus === "ready" && sdk && config) const loaded = !!(fieldData && ivStatus === "ready" && sdk && appConfig)
const initialData = const initialData =
fieldData && Object.keys(fieldData).length > 0 ? fieldData : null fieldData && Object.keys(fieldData).length > 0 ? fieldData : null
@@ -55,15 +55,21 @@ export default function Field() {
return <p style={{ fontFamily: "Inter" }}> Loading dependecies...</p> return <p style={{ fontFamily: "Inter" }}> Loading dependecies...</p>
} }
if (!isImageVaultDAMConfig(appConfig)) {
return <InvalidConfig />
}
const fieldConfig = sdk.location.CustomField?.fieldConfig
const config = {
...appConfig,
...fieldConfig,
}
return ( return (
<div id="field"> <div id={modalElementId}>
{isImageVaultDAMConfig(config) ? ( <Suspense fallback={<p>Loading field...</p>}>
<Suspense fallback={<p>Loading field...</p>}> <ImageVaultDAM config={config} sdk={sdk} initialData={initialData} />
<ImageVaultDAM config={config} sdk={sdk} initialData={initialData} /> </Suspense>
</Suspense>
) : (
<InvalidConfig />
)}
</div> </div>
) )
} }

View File

@@ -14,7 +14,7 @@ import type {
} from "~/types/contentstack" } from "~/types/contentstack"
function findThisPlugin(ext: ContentstackPluginDefinition) { function findThisPlugin(ext: ContentstackPluginDefinition) {
return ext.type === "rte_plugin" && ext.title === "ImageVault" return ext.type === "rte_plugin" && /imagevault/i.test(ext.title)
} }
async function loadScript(url: string) { async function loadScript(url: string) {