UNPKG

@proofkit/webviewer

Version:

A utility to fetch data from FileMaker webviewer

85 lines (84 loc) 1.99 kB
import { v4 } from "uuid"; let webViewerName; function setWebViewerName(name) { webViewerName = name; } const globalSettings = { /** * * set the name of the WebViewer to use for all fetches * @param name the Layout Object Name of the FileMaker WebViewer to callback too */ setWebViewerName }; function fmFetch(scriptName, data, callback) { if (callback) { return _execScript(scriptName, data, callback); } else { return new Promise((resolve) => { _execScript(scriptName, data, (result) => { resolve(result); }); }); } } const cbs = {}; if (typeof window !== "undefined") { window.handleFmWVFetchCallback = function(data, fetchId) { setTimeout(() => { const cb = cbs[fetchId]; delete cbs[fetchId]; if (!cb) { console.error("Callback is missing for fetchId: " + fetchId); return false; } try { data = JSON.parse(data); } catch (e) { } cb(data); }, 1); return true; }; } function _execScript(scriptName, data, cb) { const fetchId = v4(); cbs[fetchId] = cb; const param = { data, callback: { fetchId, fn: "handleFmWVFetchCallback", webViewerName } }; callFMScript(scriptName, param); } function callFMScript(scriptName, data, option) { let params = data; try { if (typeof data !== "string") params = JSON.stringify(data); } catch (e) { } if (!window.FileMaker) { throw new Error( `Could not call script, '${scriptName}'. 'window.FileMaker' was not available at the time this function was called.` ); } if (option) { window.FileMaker.PerformScriptWithOption(scriptName, params, option); } else { window.FileMaker.PerformScript(scriptName, params); } } const FMScriptOption = { CONTINUE: "0", HALT: "1", EXIT: "2", RESUME: "3", PAUSE: "4", SUSPEND_AND_RESUME: "5" }; export { FMScriptOption, callFMScript, fmFetch, globalSettings }; //# sourceMappingURL=main.js.map