fix: improve handling of config and rte plugin
This commit is contained in:
@@ -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,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user