@allurereport/web-awesome
Version:
The static files for Allure Awesome Report
102 lines (84 loc) • 2.8 kB
text/typescript
import { type EnvironmentIdentity, type TestEnvGroup } from "@allurereport/core-api";
import {
environmentNameById as resolveEnvironmentNameById,
errorMessageFromUnknown,
fetchReportJsonData,
migrateStoredEnvironmentSelection,
normalizeEnvironmentsWidget,
} from "@allurereport/web-commons";
import { effect, signal } from "@preact/signals";
import type { StoreSignalState } from "@/stores/types";
import { loadFromLocalStorage } from "@/utils/loadFromLocalStorage";
export const environmentsStore = signal<StoreSignalState<EnvironmentIdentity[]>>({
loading: false,
error: undefined,
data: [],
});
export const testEnvGroupsStore = signal<StoreSignalState<Record<string, TestEnvGroup>>>({
loading: false,
error: undefined,
data: {},
});
export const collapsedEnvironments = signal<string[]>(loadFromLocalStorage<string[]>("collapsedEnvironments", []));
export const currentEnvironment = signal<string>(loadFromLocalStorage<string>("currentEnvironment", ""));
export const setCurrentEnvironment = (env: string) => {
currentEnvironment.value = env;
};
export const environmentNameById = (environmentId: string) =>
resolveEnvironmentNameById(environmentsStore.peek().data, environmentId);
export const fetchEnvironments = async () => {
environmentsStore.value = {
...environmentsStore.peek(),
loading: true,
error: undefined,
};
try {
const raw = await fetchReportJsonData<unknown>("widgets/environments.json", { bustCache: true });
const res = normalizeEnvironmentsWidget(raw);
environmentsStore.value = {
data: res,
error: undefined,
loading: false,
};
currentEnvironment.value = migrateStoredEnvironmentSelection(currentEnvironment.value, res);
} catch (e) {
environmentsStore.value = {
...environmentsStore.peek(),
error: errorMessageFromUnknown(e),
loading: false,
};
}
};
export const fetchTestEnvGroup = async (id: string) => {
if (testEnvGroupsStore.peek().data[id]) {
return;
}
testEnvGroupsStore.value = {
...testEnvGroupsStore.peek(),
loading: true,
error: undefined,
};
try {
const res = await fetchReportJsonData<TestEnvGroup | undefined>(`data/test-env-groups/${id}.json`);
testEnvGroupsStore.value = {
data: {
...testEnvGroupsStore.peek().data,
[id]: res,
},
error: undefined,
loading: false,
};
} catch (e) {
testEnvGroupsStore.value = {
...testEnvGroupsStore.peek(),
error: errorMessageFromUnknown(e),
loading: false,
};
}
};
effect(() => {
localStorage.setItem("currentEnvironment", JSON.stringify(currentEnvironment.value));
});
effect(() => {
localStorage.setItem("collapsedEnvironments", JSON.stringify([...collapsedEnvironments.value]));
});