Some visual adjustments to the badges
This commit is contained in:
@@ -28,7 +28,7 @@ function createActivityProgress({ MODAL_ID, environment }) {
|
||||
: state === "complete-with-errors" ? `${label} ${count} (errors)`
|
||||
: state === "complete" ? `${label} ready ${completed}` : `${label} ${count}`;
|
||||
if (key === "session") entry.badge.textContent = state === "complete" ? "SR session ready" : state === "error" ? "SR session unavailable" : "SR session loading";
|
||||
entry.badge.title = key === "session" ? "Service Request session initialization" : key === "sr" ? "CRM service request records loaded" : "Workload action requests completed";
|
||||
entry.badge.title = key === "session" ? "Service Request session initialization" : key === "sr" ? "CRM service request records loaded" : "Product workloads checked for Actions in the selected Reference, regardless of display filters";
|
||||
if (state === "complete") entry.timer = setTimeout(() => {
|
||||
entry.badge.setAttribute("data-fading", "true");
|
||||
const reduced = typeof matchMedia === "function" && matchMedia("(prefers-reduced-motion: reduce)").matches;
|
||||
|
||||
@@ -23,6 +23,7 @@ function createOpportunitiesController({
|
||||
async function requestOpportunitiesForPeriod(period) {
|
||||
const dateRange = getFiscalPeriodRange(period, new Date());
|
||||
const requestVersion = ++opportunitiesQueryState.periodRequestVersion;
|
||||
resetWorkloadActions();
|
||||
await ensureCurrentUser();
|
||||
if (!isCurrentPeriodRequest(requestVersion)) return;
|
||||
|
||||
|
||||
@@ -1,20 +1,22 @@
|
||||
function createProductActivities({ productsContentState, opportunitiesQueryState,
|
||||
loadCrm, loadActions, blockActions, render }) {
|
||||
let cycle = null;
|
||||
function begin(requestId, token) {
|
||||
cycle = { requestId, token, version: opportunitiesQueryState.periodRequestVersion, completed: false };
|
||||
function begin(requestId, token, opportunityNumbers = null) {
|
||||
cycle = { requestId, token, numbers: opportunityNumbers && new Set(opportunityNumbers.map(String)), version: opportunitiesQueryState.periodRequestVersion, completed: false };
|
||||
}
|
||||
function complete(requestId) {
|
||||
const current = cycle;
|
||||
if (!current || current.completed || current.requestId !== requestId
|
||||
|| productsContentState.currentProductsRequestId !== requestId) return;
|
||||
current.completed = true;
|
||||
const products = [...productsContentState.opptyProductsByNumber.values()].filter(result => !result.error);
|
||||
const entries = [...productsContentState.opptyProductsByNumber].filter(([number]) => !current.numbers || current.numbers.has(String(number)));
|
||||
const products = entries.map(([, result]) => result).filter(result => !result.error);
|
||||
if (!products.length) return;
|
||||
const cachedAt = Math.max(...products.map(result => Number(result.cachedAt) || 0));
|
||||
const isActive = () => cycle === current && productsContentState.currentProductsRequestId === requestId
|
||||
&& opportunitiesQueryState.periodRequestVersion === current.version;
|
||||
return Promise.resolve(loadCrm(current.token, current.version, { cachedAt, cacheOnly: products.every(result => result.fromCache) })).then(async success => {
|
||||
// Product cache hits do not guarantee that the corresponding activity cache exists.
|
||||
return Promise.resolve(loadCrm(current.token, current.version, { cachedAt, cacheOnly: false })).then(async success => {
|
||||
if (!isActive()) return;
|
||||
if (success === false) {
|
||||
products.forEach(blockActions);
|
||||
@@ -30,7 +32,7 @@ function createProductActivities({ productsContentState, opportunitiesQueryState
|
||||
seen.add(id);
|
||||
return true;
|
||||
});
|
||||
pending.push(loadActions({ ...result, items }, true, { cachedAt: result.cachedAt, cacheOnly: result.fromCache === true }));
|
||||
pending.push(loadActions({ ...result, items }, true, { cachedAt: result.cachedAt, cacheOnly: false }));
|
||||
}
|
||||
await Promise.allSettled(pending);
|
||||
if (!isActive()) return;
|
||||
|
||||
@@ -52,6 +52,7 @@ function createOpportunityWorkloadActions({ authSessionState, allowsCrmActivitie
|
||||
for (const id of idsFor(products)) {
|
||||
session.records.set(id, { status: "error", actions: [], hasNext: false, error: "CRM service requests unavailable." });
|
||||
}
|
||||
updateProgress(session);
|
||||
}
|
||||
function pump(current) {
|
||||
while (current.enabled && current === session && current.running < 4 && current.queue.length) {
|
||||
@@ -160,6 +161,8 @@ function createOpportunityWorkloadActions({ authSessionState, allowsCrmActivitie
|
||||
].join("\n")).join("\n\n") : state === "missing" ? "No actions found for this opportunity's products."
|
||||
: state === "loading" ? "Loading workload actions..." : "Unable to confirm workload actions. Check product RevnId and Debug Requests.";
|
||||
if (records.some(record => record?.hasNext)) badge.title += "\nAdditional actions exist; pagination is not enabled.";
|
||||
const errors = [...new Set(records.filter(record => record?.error).map(record => record.error))];
|
||||
if (errors.length) badge.title += `\n${errors.join("\n")}`;
|
||||
if (!principal) badge.title += "\nTokenrelay principal is unavailable; ownership cannot be verified.";
|
||||
else if (actions.length && state === "missing") badge.title += "\nNone of the returned actions belong to the signed-in principal.";
|
||||
if (actions.length && (pending || uncertain)) badge.title += "\nSome workloads are still loading or could not be fully checked.";
|
||||
|
||||
@@ -53,7 +53,7 @@ function createProductsContentJobs({
|
||||
|
||||
const requestId = `${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
||||
productsContentState.currentProductsRequestId = requestId;
|
||||
beginProductActivities(requestId, token);
|
||||
beginProductActivities(requestId, token, optyNumbers);
|
||||
productsContentState.opptyProductsByNumber = new Map();
|
||||
productsContentState.expandedProductOptyNumbers = new Set();
|
||||
productsContentState.productsProgress = {
|
||||
|
||||
@@ -18,7 +18,7 @@ function createProductsDetails({
|
||||
const badge = document.createElement("span");
|
||||
badge.className = "opportunities-extension-products-ramp";
|
||||
badge.setAttribute("data-missing", String(values.includes("N/D")));
|
||||
setBadgeContent(badge, "ramp", values.join(","));
|
||||
setBadgeContent(badge, "ramp", values.join(" | "));
|
||||
badge.title = `Ramp Months: ${values.join(", ")}`;
|
||||
badge.setAttribute("aria-label", badge.title);
|
||||
return badge;
|
||||
|
||||
Reference in New Issue
Block a user