Spaces:
Sleeping
Sleeping
| 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); | |
| }; | |