mirror of
https://github.com/ae-utbm/sith.git
synced 2026-07-17 12:06:57 +00:00
adapt typescript to strict mode
This commit is contained in:
@@ -5,9 +5,9 @@ interface AlertParams {
|
||||
|
||||
export class AlertMessage {
|
||||
public open: boolean;
|
||||
public success: boolean;
|
||||
public success!: boolean;
|
||||
public content: string;
|
||||
private timeoutId?: number;
|
||||
private timeoutId: number | null;
|
||||
private readonly defaultDuration: number;
|
||||
|
||||
constructor(params?: { defaultDuration: number }) {
|
||||
|
||||
@@ -37,6 +37,10 @@ export const paginated = async <T>(
|
||||
queryParams.query.page = 1;
|
||||
|
||||
const firstPage = (await endpoint(queryParams)).data;
|
||||
if (firstPage === undefined) {
|
||||
console.error(`Request to "${options?.url}" failed`);
|
||||
return [];
|
||||
}
|
||||
const results = firstPage.results;
|
||||
|
||||
const nbElements = firstPage.count;
|
||||
@@ -45,9 +49,9 @@ export const paginated = async <T>(
|
||||
if (nbPages > 1) {
|
||||
const promises: Promise<T[]>[] = [];
|
||||
for (let i = 2; i <= nbPages; i++) {
|
||||
const nextPage = structuredClone(queryParams);
|
||||
const nextPage = structuredClone(queryParams) as Required<PaginatedRequest>;
|
||||
nextPage.query.page = i;
|
||||
promises.push(endpoint(nextPage).then((res) => res.data.results));
|
||||
promises.push(endpoint(nextPage).then((res) => res.data?.results ?? []));
|
||||
}
|
||||
results.push(...(await Promise.all(promises)).flat());
|
||||
}
|
||||
@@ -61,8 +65,7 @@ interface Request extends TDataShape {
|
||||
interface InterceptorOptions {
|
||||
url: string;
|
||||
}
|
||||
|
||||
type GenericEndpoint = <ThrowOnError extends boolean = false>(
|
||||
export type GenericEndpoint = <ThrowOnError extends boolean = false>(
|
||||
options?: Options<Request, ThrowOnError>,
|
||||
) => RequestResult<unknown, unknown, ThrowOnError>;
|
||||
|
||||
@@ -71,7 +74,7 @@ type GenericEndpoint = <ThrowOnError extends boolean = false>(
|
||||
**/
|
||||
export const makeUrl = async (endpoint: GenericEndpoint) => {
|
||||
let url = "";
|
||||
const interceptor = (_request: undefined, options: InterceptorOptions) => {
|
||||
const interceptor = (_request: Request, options: InterceptorOptions) => {
|
||||
url = options.url;
|
||||
throw new Error("We don't want to send the request");
|
||||
};
|
||||
|
||||
@@ -7,14 +7,14 @@ interface StringifyOptions<T extends object> {
|
||||
titleRow?: readonly string[];
|
||||
}
|
||||
|
||||
function getNested<T extends object>(obj: T, key: NestedKeyOf<T>) {
|
||||
const path: (keyof object)[] = key.split(".") as (keyof unknown)[];
|
||||
let res = obj[path.shift() as keyof T];
|
||||
function getNested<T extends { [key: string]: unknown }>(obj: T, key: NestedKeyOf<T>) {
|
||||
const path = key.split(".");
|
||||
let res = obj[path.shift() as string] as { [key: string]: unknown } | undefined;
|
||||
for (const node of path) {
|
||||
if (res === null) {
|
||||
if (res === undefined) {
|
||||
break;
|
||||
}
|
||||
res = res[node];
|
||||
res = res[node] as { [key: string]: unknown } | undefined;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
@@ -29,18 +29,21 @@ function sanitizeCell(content: string): string {
|
||||
}
|
||||
|
||||
export const csv = {
|
||||
stringify: <T extends object>(objs: T[], options?: StringifyOptions<T>) => {
|
||||
const columns = options.columns;
|
||||
stringify: <T extends { [key: string]: unknown }>(
|
||||
objs: T[],
|
||||
options?: StringifyOptions<T>,
|
||||
) => {
|
||||
const columns = options?.columns;
|
||||
const content = objs
|
||||
.map((obj) => {
|
||||
return columns
|
||||
return (columns ?? [])
|
||||
.map((col) => {
|
||||
return sanitizeCell((getNested(obj, col) ?? "").toString());
|
||||
})
|
||||
.join(",");
|
||||
})
|
||||
.join("\n");
|
||||
if (!options.titleRow) {
|
||||
if (!options?.titleRow) {
|
||||
return content;
|
||||
}
|
||||
const firstRow = options.titleRow.map(sanitizeCell).join(",");
|
||||
|
||||
@@ -29,6 +29,7 @@ export function registerComponent(name: string, options?: ElementDefinitionOptio
|
||||
export interface InheritedHtmlElement<K extends keyof HTMLElementTagNameMap>
|
||||
extends HTMLElement {
|
||||
readonly inheritedTagName: K;
|
||||
// readonly initializedAttribute: "component-initialized";
|
||||
node: HTMLElementTagNameMap[K];
|
||||
}
|
||||
|
||||
@@ -47,8 +48,8 @@ export function inheritHtmlElement<K extends keyof HTMLElementTagNameMap>(tagNam
|
||||
implements InheritedHtmlElement<K>
|
||||
{
|
||||
readonly inheritedTagName = tagName;
|
||||
private readonly initializedAttribute = "component-initialized";
|
||||
node: HTMLElementTagNameMap[K];
|
||||
readonly initializedAttribute = "component-initialized";
|
||||
node!: HTMLElementTagNameMap[K];
|
||||
|
||||
connectedCallback(autoAddNode?: boolean) {
|
||||
// When nesting inherited elements, we might trigger the wrapping twice
|
||||
|
||||
Reference in New Issue
Block a user