UNPKG

@proofkit/webviewer

Version:

A utility to fetch data from FileMaker webviewer

1 lines 4.96 kB
{"version":3,"file":"main.cjs","sources":["../../src/main.ts"],"sourcesContent":["import { v4 } from \"uuid\";\n\nlet webViewerName: string;\n/**\n * @private\n * set the name of the WebViewer to use for all fetches\n * @param name the Layout Object Name of the FileMaker WebViewer to callback too\n */\nfunction setWebViewerName(name: string) {\n webViewerName = name;\n}\n\n/**\n * globalSettings\n */\nexport const globalSettings = {\n /**\n *\n * set the name of the WebViewer to use for all fetches\n * @param name the Layout Object Name of the FileMaker WebViewer to callback too\n */\n setWebViewerName,\n};\n\n/**\n * Call a script in FileMaker, and get a response from the script either as a Promise or through a callback\n *\n * @param scriptName the name of the script to call. The script does have to follow conventions (see docs)\n * @param data optional script parameter, it can also just take a string\n */\nexport function fmFetch<T = unknown>(\n scriptName: string,\n data: string | object\n): Promise<T>;\nexport function fmFetch(\n scriptName: string,\n data: string | object,\n /**\n * @param cb callback function to call when the script is done\n */\n callback: () => void\n): void;\nexport function fmFetch(\n scriptName: string,\n data: string | object,\n callback?: () => void\n) {\n if (callback) {\n return _execScript(scriptName, data, callback);\n } else {\n return new Promise((resolve) => {\n _execScript(scriptName, data, (result) => {\n resolve(result);\n });\n });\n }\n}\n\nconst cbs: Record<string, (arg0?: any) => void> = {};\n\nif (typeof window !== \"undefined\") {\n window.handleFmWVFetchCallback = function (data: any, fetchId: string) {\n setTimeout(() => {\n const cb = cbs[fetchId];\n delete cbs[fetchId];\n if (!cb) {\n console.error(\"Callback is missing for fetchId: \" + fetchId);\n return false;\n }\n try {\n data = JSON.parse(data);\n } catch (e) {}\n cb(data);\n }, 1);\n return true;\n };\n}\n\n/**\n * @private\n */\nfunction _execScript(scriptName: string, data: any, cb: (arg0?: any) => void) {\n const fetchId = v4();\n cbs[fetchId] = cb;\n const param = {\n data,\n callback: { fetchId, fn: \"handleFmWVFetchCallback\", webViewerName },\n };\n callFMScript(scriptName, param);\n}\n\n/**\n * calls a FileMaker Script without a callback or a promise\n */\nexport function callFMScript<\n ScriptParams extends string | Record<any, any> = any,\n>(scriptName: string, data: ScriptParams, option: FMScriptOption): void;\nexport function callFMScript<\n ScriptParams extends string | Record<any, any> = any,\n>(scriptName: string, data?: ScriptParams): void;\nexport function callFMScript<\n ScriptParams extends string | Record<any, any> = any,\n>(scriptName: string, data?: ScriptParams, option?: FMScriptOption): void {\n let params = data as string;\n try {\n if (typeof data !== \"string\") params = JSON.stringify(data);\n } catch (e) {}\n\n if (!window.FileMaker) {\n throw new Error(\n `Could not call script, '${scriptName}'. 'window.FileMaker' was not available at the time this function was called.`\n );\n }\n\n if (option) {\n window.FileMaker.PerformScriptWithOption(scriptName, params, option);\n } else {\n window.FileMaker.PerformScript(scriptName, params);\n }\n}\nexport const FMScriptOption = {\n CONTINUE: \"0\",\n HALT: \"1\",\n EXIT: \"2\",\n RESUME: \"3\",\n PAUSE: \"4\",\n SUSPEND_AND_RESUME: \"5\",\n} as const;\ntype FMScriptOption = (typeof FMScriptOption)[keyof typeof FMScriptOption];\n"],"names":["v4"],"mappings":";;;AAEA,IAAI;AAMJ,SAAS,iBAAiB,MAAc;AACtB,kBAAA;AAClB;AAKO,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM5B;AACF;AAoBgB,SAAA,QACd,YACA,MACA,UACA;AACA,MAAI,UAAU;AACL,WAAA,YAAY,YAAY,MAAM,QAAQ;AAAA,EAAA,OACxC;AACE,WAAA,IAAI,QAAQ,CAAC,YAAY;AAClB,kBAAA,YAAY,MAAM,CAAC,WAAW;AACxC,gBAAQ,MAAM;AAAA,MAAA,CACf;AAAA,IAAA,CACF;AAAA,EAAA;AAEL;AAEA,MAAM,MAA4C,CAAC;AAEnD,IAAI,OAAO,WAAW,aAAa;AAC1B,SAAA,0BAA0B,SAAU,MAAW,SAAiB;AACrE,eAAW,MAAM;AACT,YAAA,KAAK,IAAI,OAAO;AACtB,aAAO,IAAI,OAAO;AAClB,UAAI,CAAC,IAAI;AACC,gBAAA,MAAM,sCAAsC,OAAO;AACpD,eAAA;AAAA,MAAA;AAEL,UAAA;AACK,eAAA,KAAK,MAAM,IAAI;AAAA,eACf,GAAG;AAAA,MAAA;AACZ,SAAG,IAAI;AAAA,OACN,CAAC;AACG,WAAA;AAAA,EACT;AACF;AAKA,SAAS,YAAY,YAAoB,MAAW,IAA0B;AAC5E,QAAM,UAAUA,KAAAA,GAAG;AACnB,MAAI,OAAO,IAAI;AACf,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA,UAAU,EAAE,SAAS,IAAI,2BAA2B,cAAc;AAAA,EACpE;AACA,eAAa,YAAY,KAAK;AAChC;AAWgB,SAAA,aAEd,YAAoB,MAAqB,QAA+B;AACxE,MAAI,SAAS;AACT,MAAA;AACF,QAAI,OAAO,SAAS,SAAmB,UAAA,KAAK,UAAU,IAAI;AAAA,WACnD,GAAG;AAAA,EAAA;AAER,MAAA,CAAC,OAAO,WAAW;AACrB,UAAM,IAAI;AAAA,MACR,2BAA2B,UAAU;AAAA,IACvC;AAAA,EAAA;AAGF,MAAI,QAAQ;AACV,WAAO,UAAU,wBAAwB,YAAY,QAAQ,MAAM;AAAA,EAAA,OAC9D;AACE,WAAA,UAAU,cAAc,YAAY,MAAM;AAAA,EAAA;AAErD;AACO,MAAM,iBAAiB;AAAA,EAC5B,UAAU;AAAA,EACV,MAAM;AAAA,EACN,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,oBAAoB;AACtB;;;;;"}