You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-11-23 22:36:32 +02:00
Mobile: Plugins: Fix renderer plugins that use the settingValue API (#13131)
This commit is contained in:
@@ -17,6 +17,7 @@ import Resource from '@joplin/lib/models/Resource';
|
|||||||
import { ResourceInfos } from '@joplin/renderer/types';
|
import { ResourceInfos } from '@joplin/renderer/types';
|
||||||
import useContentScripts from './utils/useContentScripts';
|
import useContentScripts from './utils/useContentScripts';
|
||||||
import uuid from '@joplin/lib/uuid';
|
import uuid from '@joplin/lib/uuid';
|
||||||
|
import AsyncActionQueue from '@joplin/lib/AsyncActionQueue';
|
||||||
|
|
||||||
const logger = Logger.create('renderer/useWebViewSetup');
|
const logger = Logger.create('renderer/useWebViewSetup');
|
||||||
|
|
||||||
@@ -149,6 +150,8 @@ const useWebViewSetup = (props: Props): SetUpResult<RendererControl> => {
|
|||||||
void messenger.remoteApi.renderer.setExtraContentScriptsAndRerender(contentScripts);
|
void messenger.remoteApi.renderer.setExtraContentScriptsAndRerender(contentScripts);
|
||||||
}, [messenger, contentScripts]);
|
}, [messenger, contentScripts]);
|
||||||
|
|
||||||
|
const onRerenderRequestRef = useRef(()=>{});
|
||||||
|
|
||||||
const rendererControl = useMemo((): RendererControl => {
|
const rendererControl = useMemo((): RendererControl => {
|
||||||
const renderer = messenger.remoteApi.renderer;
|
const renderer = messenger.remoteApi.renderer;
|
||||||
|
|
||||||
@@ -201,6 +204,7 @@ const useWebViewSetup = (props: Props): SetUpResult<RendererControl> => {
|
|||||||
const key = `${pluginId}.${settingKey}`;
|
const key = `${pluginId}.${settingKey}`;
|
||||||
if (!pluginSettingKeysRef.current.has(key)) {
|
if (!pluginSettingKeysRef.current.has(key)) {
|
||||||
pluginSettingKeysRef.current.add(key);
|
pluginSettingKeysRef.current.add(key);
|
||||||
|
onRerenderRequestRef.current();
|
||||||
settingsChanged = true;
|
settingsChanged = true;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -234,16 +238,21 @@ const useWebViewSetup = (props: Props): SetUpResult<RendererControl> => {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
rerenderToBody: async (markup, options, cancelEvent) => {
|
rerenderToBody: async (markup, options, cancelEvent) => {
|
||||||
const { getSettings, getSettingsChanged } = await prepareRenderer(options);
|
const { getSettings } = await prepareRenderer(options);
|
||||||
if (cancelEvent?.cancelled) return null;
|
if (cancelEvent?.cancelled) return null;
|
||||||
|
|
||||||
const output = await renderer.rerenderToBody(markup, getSettings());
|
const render = async () => {
|
||||||
if (cancelEvent?.cancelled) return null;
|
if (cancelEvent?.cancelled) return;
|
||||||
|
|
||||||
if (getSettingsChanged()) {
|
await renderer.rerenderToBody(markup, getSettings());
|
||||||
return await renderer.rerenderToBody(markup, getSettings());
|
};
|
||||||
}
|
|
||||||
return output;
|
const queue = new AsyncActionQueue();
|
||||||
|
onRerenderRequestRef.current = async () => {
|
||||||
|
queue.push(render);
|
||||||
|
};
|
||||||
|
|
||||||
|
return await render();
|
||||||
},
|
},
|
||||||
render: async (markup, options) => {
|
render: async (markup, options) => {
|
||||||
const { getSettings, getSettingsChanged } = await prepareRenderer(options);
|
const { getSettings, getSettingsChanged } = await prepareRenderer(options);
|
||||||
|
|||||||
Reference in New Issue
Block a user