Begin working on the QueryStatus application for the requestor to monitor user responses

This commit is contained in:
Oliver 2025-11-09 00:31:04 -07:00
parent 47b68621c1
commit a242101b5b
6 changed files with 154 additions and 0 deletions

View file

@ -2,6 +2,7 @@
import { Ask } from "./apps/Ask.mjs";
import { AttributeManager } from "./apps/AttributeManager.mjs";
import { PlayerSheet } from "./apps/PlayerSheet.mjs";
import { QueryStatus } from "./apps/QueryStatus.mjs";
// Utils
import { attributeSorter } from "./utils/attributeSort.mjs";
@ -22,6 +23,7 @@ Object.defineProperty(
Ask,
AttributeManager,
PlayerSheet,
QueryStatus,
},
utils: {
attributeSorter,

View file

@ -0,0 +1,75 @@
import { __ID__, filePath } from "../consts.mjs";
import { QueryManager } from "../utils/QueryManager.mjs";
const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api;
export class QueryStatus extends HandlebarsApplicationMixin(ApplicationV2) {
// #region Options
static DEFAULT_OPTIONS = {
classes: [
__ID__,
`QueryStatus`,
],
};
static PARTS = {
users: {
template: filePath(`templates/QueryStatus/users.hbs`),
},
// controls: {
// template: filePath(`templates/QueryStatus/controls.hbs`),
// },
};
// #endregion Options
// #region Instance
constructor({
requestID,
...opts
}) {
super(opts);
this.requestID = requestID;
};
// #endregion Instance
// #region Lifecycle
async _preparePartContext(partID) {
const ctx = {};
switch (partID) {
case `users`: {
this._prepareUsers(ctx);
break;
};
case `controls`: {
this._prepareControls(ctx);
break;
};
};
return ctx;
};
async _prepareUsers(ctx) {
const query = QueryManager.get(this.requestID);
if (!query) { return };
const users = [];
for (const userID of query.users) {
const user = game.users.get(userID);
users.push({
id: userID,
name: user.name,
colour: user.color,
answers: query.responses[userID] ?? null,
});
};
ctx.users = users;
};
async _prepareControls(ctx) {};
// #endregion Lifecycle
// #region Actions
// #endregion Actions
};

View file

@ -26,6 +26,17 @@ export class QueryManager {
return this.#queries.has(requestID);
};
static get(requestID) {
if (!this.#queries.has(requestID)) { return null };
const query = this.#queries.get(requestID);
const cloned = foundry.utils.deepClone(query);
delete cloned.onSubmit;
delete cloned.resolve;
return cloned;
};
static async query(
request,
{