shoelace/src/components/icon/request.ts

37 wiersze
860 B
TypeScript
Czysty Zwykły widok Historia

interface IconFile {
ok: boolean;
status: number;
svg: string;
}
2020-07-15 21:30:37 +00:00
const iconFiles = new Map<string, Promise<IconFile>>();
2020-07-15 21:30:37 +00:00
export const requestIcon = (url: string) => {
if (iconFiles.has(url)) {
return iconFiles.get(url);
} else {
const request = fetch(url).then(async response => {
if (response.ok) {
2020-07-15 21:30:37 +00:00
const div = document.createElement('div');
div.innerHTML = await response.text();
2020-07-15 21:30:37 +00:00
const svg = div.firstElementChild;
return {
ok: response.ok,
status: response.status,
svg: svg && svg.tagName.toLowerCase() === 'svg' ? svg.outerHTML : ''
};
2020-07-15 21:30:37 +00:00
} else {
return {
ok: response.ok,
status: response.status,
svg: null
};
2020-07-15 21:30:37 +00:00
}
2021-02-26 14:09:13 +00:00
}) as Promise<IconFile>;
2020-07-15 21:30:37 +00:00
iconFiles.set(url, request);
return request;
2020-07-15 21:30:37 +00:00
}
};