import eventManager from "@/event/manager"; import { CancelError, Message } from "@/exception"; import { ErrorDialog } from "@/middleware/swal"; import bulkRequest from "@/rest-api/bulk"; export const apptemplate = ( callback: (options: { setEvent: (event: Event) => void; needReloadAtEnd: (need: boolean) => void; }) => Promise ) => { return async () => { try { const events: Event[] = []; let needReloadAtEnd = false; await callback({ setEvent: (event: Event) => { events.push(event); }, needReloadAtEnd: (need: boolean) => { needReloadAtEnd = need; }, }); // 保存処理 if (!bulkRequest.isSaved()) { await bulkRequest.save(); } // イベント処理 if (events.length !== 0) { console.log("イベント発生"); eventManager.init(); for (const [index, event] of events.entries()) { window.dispatchEvent(event); } await eventManager.waitEnd(); console.log("イベント処理終了"); } // 保存処理 if (!bulkRequest.isSaved()) { await bulkRequest.save(); } // 再読込 if (needReloadAtEnd) { location.reload(); } } catch (e) { if (e instanceof CancelError) { console.log("canceled"); return; } else if (e instanceof Message) { ErrorDialog.fire({ text: e.message, }); return; } ErrorDialog.fire(); throw e; } }; }; export const eventHnalder = ( callback: ( event: any, options: { setEvent: (event: Event) => void } ) => Promise ) => { return async (event: any) => { try { const events: Event[] = []; const ret = await callback(event, { setEvent: (event: Event) => { events.push(event); }, }); // 保存処理 if (!bulkRequest.isSaved()) { await bulkRequest.save(); } // イベント処理 if (events.length !== 0) { console.log("イベント発生"); eventManager.init(); for (const [index, event] of events.entries()) { window.dispatchEvent(event); } await eventManager.waitEnd(); console.log("イベント処理終了"); } // 保存処理 if (!bulkRequest.isSaved()) { await bulkRequest.save(); } return ret; } catch (e) { if (e instanceof CancelError) { console.log("canceled"); return false; } else if (e instanceof Message) { console.error("message", e.message); ErrorDialog.fire({ text: e.message, }); return false; } ErrorDialog.fire(); console.error(e); return false; } }; };