Hot reload custom component settings in the builder

This commit is contained in:
Andrew Kingston 2022-09-30 12:01:25 +01:00
parent f43d5ea394
commit de536d6f26
3 changed files with 29 additions and 16 deletions

View File

@ -88,27 +88,12 @@ export const getFrontendStore = () => {
initialise: async pkg => {
const { layouts, screens, application, clientLibPath } = pkg
// Fetch component definitions.
// Allow errors to propagate.
const components = await API.fetchComponentLibDefinitions(
application.appId
)
// Filter out custom component keys so we can flag them
const customComponents = Object.keys(components).filter(name =>
name.startsWith("plugin/")
)
await store.actions.components.refreshDefinitions(application.appId)
// Reset store state
store.update(state => ({
...state,
libraries: application.componentLibraries,
components,
customComponents,
clientFeatures: {
...INITIAL_FRONTEND_STATE.clientFeatures,
...components.features,
},
name: application.name,
description: application.description,
appId: application.appId,
@ -385,6 +370,29 @@ export const getFrontendStore = () => {
},
},
components: {
refreshDefinitions: async appId => {
if (!appId) {
appId = get(store).appId
}
// Fetch definitions and filter out custom component definitions so we
// can flag them
const components = await API.fetchComponentLibDefinitions(appId)
const customComponents = Object.keys(components).filter(name =>
name.startsWith("plugin/")
)
// Update store
store.update(state => ({
...state,
components,
customComponents,
clientFeatures: {
...INITIAL_FRONTEND_STATE.clientFeatures,
...components.features,
},
}))
},
getDefinition: componentName => {
if (!componentName) {
return null

View File

@ -198,6 +198,8 @@
block: "center",
})
}
} else if (type === "reload-plugin") {
await store.actions.components.refreshDefinitions()
} else {
console.warn(`Client sent unknown event type: ${type}`)
}

View File

@ -98,6 +98,9 @@ const createBuilderStore = () => {
return state
})
}
// Notify the builder so we can reload component definitions
dispatchEvent("reload-plugin")
},
}
return {