mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-02-27 18:22:41 -08:00
61 lines
1.8 KiB
TypeScript
61 lines
1.8 KiB
TypeScript
import { KikuFieldGroupingChoice, KikuFieldGroupingRequestData } from '../../types';
|
|
|
|
export function createFieldGroupingCallback(options: {
|
|
getVisibleOverlayVisible: () => boolean;
|
|
setVisibleOverlayVisible: (visible: boolean) => void;
|
|
getResolver: () => ((choice: KikuFieldGroupingChoice) => void) | null;
|
|
setResolver: (resolver: ((choice: KikuFieldGroupingChoice) => void) | null) => void;
|
|
sendRequestToVisibleOverlay: (data: KikuFieldGroupingRequestData) => boolean;
|
|
}): (data: KikuFieldGroupingRequestData) => Promise<KikuFieldGroupingChoice> {
|
|
return async (data: KikuFieldGroupingRequestData): Promise<KikuFieldGroupingChoice> => {
|
|
return new Promise((resolve) => {
|
|
if (options.getResolver()) {
|
|
resolve({
|
|
keepNoteId: 0,
|
|
deleteNoteId: 0,
|
|
deleteDuplicate: true,
|
|
cancelled: true,
|
|
});
|
|
return;
|
|
}
|
|
|
|
const previousVisibleOverlay = options.getVisibleOverlayVisible();
|
|
let settled = false;
|
|
|
|
const finish = (choice: KikuFieldGroupingChoice): void => {
|
|
if (settled) return;
|
|
settled = true;
|
|
if (options.getResolver() === finish) {
|
|
options.setResolver(null);
|
|
}
|
|
resolve(choice);
|
|
|
|
if (!previousVisibleOverlay && options.getVisibleOverlayVisible()) {
|
|
options.setVisibleOverlayVisible(false);
|
|
}
|
|
};
|
|
|
|
options.setResolver(finish);
|
|
if (!options.sendRequestToVisibleOverlay(data)) {
|
|
finish({
|
|
keepNoteId: 0,
|
|
deleteNoteId: 0,
|
|
deleteDuplicate: true,
|
|
cancelled: true,
|
|
});
|
|
return;
|
|
}
|
|
setTimeout(() => {
|
|
if (!settled) {
|
|
finish({
|
|
keepNoteId: 0,
|
|
deleteNoteId: 0,
|
|
deleteDuplicate: true,
|
|
cancelled: true,
|
|
});
|
|
}
|
|
}, 90000);
|
|
});
|
|
};
|
|
}
|