Spaces:
Runtime error
Runtime error
import { ICompactFont, IFont } from '@/interfaces/editor'; | |
import { groupBy } from 'lodash'; | |
export const loadFonts = (fonts: { name: string; url: string }[]) => { | |
const promisesList = fonts.map((font) => { | |
return new FontFace(font.name, `url(${font.url})`) | |
.load() | |
.catch((err) => err); | |
}); | |
return new Promise((resolve, reject) => { | |
Promise.all(promisesList) | |
.then((res) => { | |
res.forEach((uniqueFont) => { | |
if (uniqueFont && uniqueFont.family) { | |
document.fonts.add(uniqueFont); | |
resolve(true); | |
} | |
}); | |
}) | |
.catch((err) => reject(err)); | |
}); | |
}; | |
const findDefaultFont = (fonts: IFont[]): IFont => { | |
const regularFont = fonts.find((font) => | |
font.fullName.toLowerCase().includes('regular'), | |
); | |
return regularFont ? regularFont : fonts[0]; | |
}; | |
export const getCompactFontData = (fonts: IFont[]): ICompactFont[] => { | |
const compactFontsMap: { [key: string]: ICompactFont } = {}; | |
// lodash groupby | |
const fontsGroupedByFamily = groupBy(fonts, (font) => font.family); | |
Object.keys(fontsGroupedByFamily).forEach((family) => { | |
const fontsInFamily = fontsGroupedByFamily[family]; | |
const defaultFont = findDefaultFont(fontsInFamily); | |
const compactFont: ICompactFont = { | |
family: family, | |
styles: fontsInFamily, | |
default: defaultFont, | |
}; | |
compactFontsMap[family] = compactFont; | |
}); | |
return Object.values(compactFontsMap); | |
}; | |