@eqproject/eqp-dynamic-module 2.10.67 → 2.10.68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +3 -1
- package/esm2020/lib/components/private/form-records/add-form-record/add-form-record.component.mjs +3 -1
- package/esm2020/lib/utils/google-fonts-injector.mjs +78 -0
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +81 -0
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +80 -0
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/utils/google-fonts-injector.d.ts +7 -0
- package/package.json +1 -1
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
const SYSTEM_FONTS = new Set([
|
|
2
|
+
// Generici CSS
|
|
3
|
+
'sans-serif', 'serif', 'monospace', 'cursive', 'fantasy', 'system-ui',
|
|
4
|
+
'inherit', 'initial', 'unset', 'revert',
|
|
5
|
+
// Famiglie sistema Windows / Mac / Linux
|
|
6
|
+
'-apple-system', 'blinkmacsystemfont', 'segoe ui', 'helvetica neue',
|
|
7
|
+
'helvetica', 'arial', 'verdana', 'tahoma', 'trebuchet ms', 'georgia',
|
|
8
|
+
'times new roman', 'times', 'courier new', 'courier', 'lucida console',
|
|
9
|
+
'lucida sans unicode', 'impact', 'comic sans ms', 'palatino linotype',
|
|
10
|
+
'book antiqua', 'palatino', 'garamond', 'bookman',
|
|
11
|
+
]);
|
|
12
|
+
const FIELD_CSS_KEYS = [
|
|
13
|
+
'TextFieldStyleCSS', 'TextareaFieldStyleCSS', 'BooleanFieldStyleCSS',
|
|
14
|
+
'DateFieldStyleCSS', 'NumericFieldStyleCSS', 'AttachmentFieldStyleCSS',
|
|
15
|
+
'ImageFieldStyleCSS', 'ListValueFieldStyleCSS', 'ImageSelectorFieldStyleCSS',
|
|
16
|
+
'LabelFieldStyleCSS', 'ImageWithMarkersFieldStyleCSS', 'ActionButtonFieldStyleCSS',
|
|
17
|
+
];
|
|
18
|
+
function collectCssStrings(form) {
|
|
19
|
+
const result = [];
|
|
20
|
+
if (form.ThemeCSS)
|
|
21
|
+
result.push(form.ThemeCSS);
|
|
22
|
+
if (form.TitleCSS)
|
|
23
|
+
result.push(form.TitleCSS);
|
|
24
|
+
for (const field of form.Fields ?? []) {
|
|
25
|
+
const f = field;
|
|
26
|
+
if (f.FieldstyleCSS)
|
|
27
|
+
result.push(f.FieldstyleCSS);
|
|
28
|
+
if (f.LabelstyleCSS)
|
|
29
|
+
result.push(f.LabelstyleCSS);
|
|
30
|
+
for (const key of FIELD_CSS_KEYS) {
|
|
31
|
+
const cssObj = f[key];
|
|
32
|
+
if (cssObj && typeof cssObj === 'object') {
|
|
33
|
+
for (const val of Object.values(cssObj)) {
|
|
34
|
+
if (typeof val === 'string' && val)
|
|
35
|
+
result.push(val);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
function extractGoogleFontNames(cssStrings) {
|
|
43
|
+
const found = new Set();
|
|
44
|
+
for (const css of cssStrings) {
|
|
45
|
+
const regex = /font-family\s*:\s*([^;]+)/gi;
|
|
46
|
+
let match;
|
|
47
|
+
while ((match = regex.exec(css)) !== null) {
|
|
48
|
+
for (const part of match[1].split(',')) {
|
|
49
|
+
const name = part.trim().replace(/^['"]|['"]$/g, '').trim();
|
|
50
|
+
if (name && !SYSTEM_FONTS.has(name.toLowerCase())) {
|
|
51
|
+
found.add(name);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return Array.from(found);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Scansiona tutte le stringhe CSS del form (ThemeCSS, TitleCSS, FieldStyleCSS tipizzati)
|
|
60
|
+
* ed inietta un <link> a Google Fonts per ogni font non-di-sistema trovato.
|
|
61
|
+
* Idempotente: non aggiunge link già presenti nel DOM.
|
|
62
|
+
*/
|
|
63
|
+
export function injectGoogleFontsFromForm(form) {
|
|
64
|
+
if (!form || typeof document === 'undefined')
|
|
65
|
+
return;
|
|
66
|
+
const fonts = extractGoogleFontNames(collectCssStrings(form));
|
|
67
|
+
for (const font of fonts) {
|
|
68
|
+
const id = `gfont-${font.replace(/\s+/g, '-').toLowerCase()}`;
|
|
69
|
+
if (document.getElementById(id))
|
|
70
|
+
continue;
|
|
71
|
+
const link = document.createElement('link');
|
|
72
|
+
link.id = id;
|
|
73
|
+
link.rel = 'stylesheet';
|
|
74
|
+
link.href = `https://fonts.bunny.net/css2?family=${encodeURIComponent(font)}:ital,wght@0,400;0,700;1,400&display=swap`;
|
|
75
|
+
document.head.appendChild(link);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLWZvbnRzLWluamVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvdXRpbHMvZ29vZ2xlLWZvbnRzLWluamVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxDQUFTO0lBQ25DLGVBQWU7SUFDZixZQUFZLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVc7SUFDckUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUTtJQUN2Qyx5Q0FBeUM7SUFDekMsZUFBZSxFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxnQkFBZ0I7SUFDbkUsV0FBVyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxTQUFTO0lBQ3BFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLGdCQUFnQjtJQUN0RSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLG1CQUFtQjtJQUNyRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTO0NBQ2xELENBQUMsQ0FBQztBQUVILE1BQU0sY0FBYyxHQUFHO0lBQ3JCLG1CQUFtQixFQUFFLHVCQUF1QixFQUFFLHNCQUFzQjtJQUNwRSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSx5QkFBeUI7SUFDdEUsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQUUsNEJBQTRCO0lBQzVFLG9CQUFvQixFQUFFLCtCQUErQixFQUFFLDJCQUEyQjtDQUNuRixDQUFDO0FBRUYsU0FBUyxpQkFBaUIsQ0FBQyxJQUFVO0lBQ25DLE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUM1QixJQUFJLElBQUksQ0FBQyxRQUFRO1FBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENB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QUFDO1FBQ3ZILFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2pDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm0gfSBmcm9tICcuLi9tb2RlbHMvZm9ybS5tb2RlbCc7XG5cbmNvbnN0IFNZU1RFTV9GT05UUyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gIC8vIEdlbmVyaWNpIENTU1xuICAnc2Fucy1zZXJpZicsICdzZXJpZicsICdtb25vc3BhY2UnLCAnY3Vyc2l2ZScsICdmYW50YXN5JywgJ3N5c3RlbS11aScsXG4gICdpbmhlcml0JywgJ2luaXRpYWwnLCAndW5zZXQnLCAncmV2ZXJ0JyxcbiAgLy8gRmFtaWdsaWUgc2lzdGVtYSBXaW5kb3dzIC8gTWFjIC8gTGludXhcbiAgJy1hcHBsZS1zeXN0ZW0nLCAnYmxpbmttYWNzeXN0ZW1mb250JywgJ3NlZ29lIHVpJywgJ2hlbHZldGljYSBuZXVlJyxcbiAgJ2hlbHZldGljYScsICdhcmlhbCcsICd2ZXJkYW5hJywgJ3RhaG9tYScsICd0cmVidWNoZXQgbXMnLCAnZ2VvcmdpYScsXG4gICd0aW1lcyBuZXcgcm9tYW4nLCAndGltZXMnLCAnY291cmllciBuZXcnLCAnY291cmllcicsICdsdWNpZGEgY29uc29sZScsXG4gICdsdWNpZGEgc2FucyB1bmljb2RlJywgJ2ltcGFjdCcsICdjb21pYyBzYW5zIG1zJywgJ3BhbGF0aW5vIGxpbm90eXBlJyxcbiAgJ2Jvb2sgYW50aXF1YScsICdwYWxhdGlubycsICdnYXJhbW9uZCcsICdib29rbWFuJyxcbl0pO1xuXG5jb25zdCBGSUVMRF9DU1NfS0VZUyA9IFtcbiAgJ1RleHRGaWVsZFN0eWxlQ1NTJywgJ1RleHRhcmVhRmllbGRTdHlsZUNTUycsICdCb29sZWFuRmllbGRTdHlsZUNTUycsXG4gICdEYXRlRmllbGRTdHlsZUNTUycsICdOdW1lcmljRmllbGRTdHlsZUNTUycsICdBdHRhY2htZW50RmllbGRTdHlsZUNTUycsXG4gICdJbWFnZUZpZWxkU3R5bGVDU1MnLCAnTGlzdFZhbHVlRmllbGRTdHlsZUNTUycsICdJbWFnZVNlbGVjdG9yRmllbGRTdHlsZUNTUycsXG4gICdMYWJlbEZpZWxkU3R5bGVDU1MnLCAnSW1hZ2VXaXRoTWFya2Vyc0ZpZWxkU3R5bGVDU1MnLCAnQWN0aW9uQnV0dG9uRmllbGRTdHlsZUNTUycsXG5dO1xuXG5mdW5jdGlvbiBjb2xsZWN0Q3NzU3RyaW5ncyhmb3JtOiBGb3JtKTogc3RyaW5nW10ge1xuICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG4gIGlmIChmb3JtLlRoZW1lQ1NTKSByZXN1bHQucHVzaChmb3JtLlRoZW1lQ1NTKTtcbiAgaWYgKGZvcm0uVGl0bGVDU1MpIHJlc3VsdC5wdXNoKGZvcm0uVGl0bGVDU1MpO1xuICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZvcm0uRmllbGRzID8/IFtdKSB7XG4gICAgY29uc3QgZiA9IGZpZWxkIGFzIGFueTtcbiAgICBpZiAoZi5GaWVsZHN0eWxlQ1NTKSByZXN1bHQucHVzaChmLkZpZWxkc3R5bGVDU1MpO1xuICAgIGlmIChmLkxhYmVsc3R5bGVDU1MpIHJlc3VsdC5wdXNoKGYuTGFiZWxzdHlsZUNTUyk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgRklFTERfQ1NTX0tFWVMpIHtcbiAgICAgIGNvbnN0IGNzc09iaiA9IGZba2V5XTtcbiAgICAgIGlmIChjc3NPYmogJiYgdHlwZW9mIGNzc09iaiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgT2JqZWN0LnZhbHVlcyhjc3NPYmopKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmIHZhbCkgcmVzdWx0LnB1c2godmFsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBleHRyYWN0R29vZ2xlRm9udE5hbWVzKGNzc1N0cmluZ3M6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICBjb25zdCBmb3VuZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IGNzcyBvZiBjc3NTdHJpbmdzKSB7XG4gICAgY29uc3QgcmVnZXggPSAvZm9udC1mYW1pbHlcXHMqOlxccyooW147XSspL2dpO1xuICAgIGxldCBtYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbDtcbiAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyhjc3MpKSAhPT0gbnVsbCkge1xuICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIG1hdGNoWzFdLnNwbGl0KCcsJykpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHBhcnQudHJpbSgpLnJlcGxhY2UoL15bJ1wiXXxbJ1wiXSQvZywgJycpLnRyaW0oKTtcbiAgICAgICAgaWYgKG5hbWUgJiYgIVNZU1RFTV9GT05UUy5oYXMobmFtZS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgIGZvdW5kLmFkZChuYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShmb3VuZCk7XG59XG5cbi8qKlxuICogU2NhbnNpb25hIHR1dHRlIGxlIHN0cmluZ2hlIENTUyBkZWwgZm9ybSAoVGhlbWVDU1MsIFRpdGxlQ1NTLCBGaWVsZFN0eWxlQ1NTIHRpcGl6emF0aSlcbiAqIGVkIGluaWV0dGEgdW4gPGxpbms+IGEgR29vZ2xlIEZvbnRzIHBlciBvZ25pIGZvbnQgbm9uLWRpLXNpc3RlbWEgdHJvdmF0by5cbiAqIElkZW1wb3RlbnRlOiBub24gYWdnaXVuZ2UgbGluayBnacOgIHByZXNlbnRpIG5lbCBET00uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RHb29nbGVGb250c0Zyb21Gb3JtKGZvcm06IEZvcm0gfCBudWxsIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gIGlmICghZm9ybSB8fCB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gIGNvbnN0IGZvbnRzID0gZXh0cmFjdEdvb2dsZUZvbnROYW1lcyhjb2xsZWN0Q3NzU3RyaW5ncyhmb3JtKSk7XG4gIGZvciAoY29uc3QgZm9udCBvZiBmb250cykge1xuICAgIGNvbnN0IGlkID0gYGdmb250LSR7Zm9udC5yZXBsYWNlKC9cXHMrL2csICctJykudG9Mb3dlckNhc2UoKX1gO1xuICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgbGluay5pZCA9IGlkO1xuICAgIGxpbmsucmVsID0gJ3N0eWxlc2hlZXQnO1xuICAgIGxpbmsuaHJlZiA9IGBodHRwczovL2ZvbnRzLmJ1bm55Lm5ldC9jc3MyP2ZhbWlseT0ke2VuY29kZVVSSUNvbXBvbmVudChmb250KX06aXRhbCx3Z2h0QDAsNDAwOzAsNzAwOzEsNDAwJmRpc3BsYXk9c3dhcGA7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbiAgfVxufVxuIl19
|
|
@@ -3099,6 +3099,85 @@ var LogicOperator;
|
|
|
3099
3099
|
LogicOperator[LogicOperator["CONTIENE TUTTI"] = 12] = "CONTIENE TUTTI";
|
|
3100
3100
|
})(LogicOperator || (LogicOperator = {}));
|
|
3101
3101
|
|
|
3102
|
+
const SYSTEM_FONTS = new Set([
|
|
3103
|
+
// Generici CSS
|
|
3104
|
+
'sans-serif', 'serif', 'monospace', 'cursive', 'fantasy', 'system-ui',
|
|
3105
|
+
'inherit', 'initial', 'unset', 'revert',
|
|
3106
|
+
// Famiglie sistema Windows / Mac / Linux
|
|
3107
|
+
'-apple-system', 'blinkmacsystemfont', 'segoe ui', 'helvetica neue',
|
|
3108
|
+
'helvetica', 'arial', 'verdana', 'tahoma', 'trebuchet ms', 'georgia',
|
|
3109
|
+
'times new roman', 'times', 'courier new', 'courier', 'lucida console',
|
|
3110
|
+
'lucida sans unicode', 'impact', 'comic sans ms', 'palatino linotype',
|
|
3111
|
+
'book antiqua', 'palatino', 'garamond', 'bookman',
|
|
3112
|
+
]);
|
|
3113
|
+
const FIELD_CSS_KEYS = [
|
|
3114
|
+
'TextFieldStyleCSS', 'TextareaFieldStyleCSS', 'BooleanFieldStyleCSS',
|
|
3115
|
+
'DateFieldStyleCSS', 'NumericFieldStyleCSS', 'AttachmentFieldStyleCSS',
|
|
3116
|
+
'ImageFieldStyleCSS', 'ListValueFieldStyleCSS', 'ImageSelectorFieldStyleCSS',
|
|
3117
|
+
'LabelFieldStyleCSS', 'ImageWithMarkersFieldStyleCSS', 'ActionButtonFieldStyleCSS',
|
|
3118
|
+
];
|
|
3119
|
+
function collectCssStrings(form) {
|
|
3120
|
+
var _a;
|
|
3121
|
+
const result = [];
|
|
3122
|
+
if (form.ThemeCSS)
|
|
3123
|
+
result.push(form.ThemeCSS);
|
|
3124
|
+
if (form.TitleCSS)
|
|
3125
|
+
result.push(form.TitleCSS);
|
|
3126
|
+
for (const field of (_a = form.Fields) !== null && _a !== void 0 ? _a : []) {
|
|
3127
|
+
const f = field;
|
|
3128
|
+
if (f.FieldstyleCSS)
|
|
3129
|
+
result.push(f.FieldstyleCSS);
|
|
3130
|
+
if (f.LabelstyleCSS)
|
|
3131
|
+
result.push(f.LabelstyleCSS);
|
|
3132
|
+
for (const key of FIELD_CSS_KEYS) {
|
|
3133
|
+
const cssObj = f[key];
|
|
3134
|
+
if (cssObj && typeof cssObj === 'object') {
|
|
3135
|
+
for (const val of Object.values(cssObj)) {
|
|
3136
|
+
if (typeof val === 'string' && val)
|
|
3137
|
+
result.push(val);
|
|
3138
|
+
}
|
|
3139
|
+
}
|
|
3140
|
+
}
|
|
3141
|
+
}
|
|
3142
|
+
return result;
|
|
3143
|
+
}
|
|
3144
|
+
function extractGoogleFontNames(cssStrings) {
|
|
3145
|
+
const found = new Set();
|
|
3146
|
+
for (const css of cssStrings) {
|
|
3147
|
+
const regex = /font-family\s*:\s*([^;]+)/gi;
|
|
3148
|
+
let match;
|
|
3149
|
+
while ((match = regex.exec(css)) !== null) {
|
|
3150
|
+
for (const part of match[1].split(',')) {
|
|
3151
|
+
const name = part.trim().replace(/^['"]|['"]$/g, '').trim();
|
|
3152
|
+
if (name && !SYSTEM_FONTS.has(name.toLowerCase())) {
|
|
3153
|
+
found.add(name);
|
|
3154
|
+
}
|
|
3155
|
+
}
|
|
3156
|
+
}
|
|
3157
|
+
}
|
|
3158
|
+
return Array.from(found);
|
|
3159
|
+
}
|
|
3160
|
+
/**
|
|
3161
|
+
* Scansiona tutte le stringhe CSS del form (ThemeCSS, TitleCSS, FieldStyleCSS tipizzati)
|
|
3162
|
+
* ed inietta un <link> a Google Fonts per ogni font non-di-sistema trovato.
|
|
3163
|
+
* Idempotente: non aggiunge link già presenti nel DOM.
|
|
3164
|
+
*/
|
|
3165
|
+
function injectGoogleFontsFromForm(form) {
|
|
3166
|
+
if (!form || typeof document === 'undefined')
|
|
3167
|
+
return;
|
|
3168
|
+
const fonts = extractGoogleFontNames(collectCssStrings(form));
|
|
3169
|
+
for (const font of fonts) {
|
|
3170
|
+
const id = `gfont-${font.replace(/\s+/g, '-').toLowerCase()}`;
|
|
3171
|
+
if (document.getElementById(id))
|
|
3172
|
+
continue;
|
|
3173
|
+
const link = document.createElement('link');
|
|
3174
|
+
link.id = id;
|
|
3175
|
+
link.rel = 'stylesheet';
|
|
3176
|
+
link.href = `https://fonts.bunny.net/css2?family=${encodeURIComponent(font)}:ital,wght@0,400;0,700;1,400&display=swap`;
|
|
3177
|
+
document.head.appendChild(link);
|
|
3178
|
+
}
|
|
3179
|
+
}
|
|
3180
|
+
|
|
3102
3181
|
/* ESEMPIO D'USO
|
|
3103
3182
|
|
|
3104
3183
|
<textarea
|
|
@@ -8209,6 +8288,7 @@ class AddFormRecordComponent {
|
|
|
8209
8288
|
this.visibleActionButtons = new Array();
|
|
8210
8289
|
}
|
|
8211
8290
|
ngOnInit() {
|
|
8291
|
+
injectGoogleFontsFromForm(this.form);
|
|
8212
8292
|
if (this.form != null && this.orgaID != null) {
|
|
8213
8293
|
this.form.OrgaID = this.orgaID;
|
|
8214
8294
|
}
|
|
@@ -17780,6 +17860,7 @@ class EqpDynamicModuleConfiguratorComponent {
|
|
|
17780
17860
|
}
|
|
17781
17861
|
this.configureColumns();
|
|
17782
17862
|
this.createFormForm();
|
|
17863
|
+
injectGoogleFontsFromForm(this.form);
|
|
17783
17864
|
}
|
|
17784
17865
|
/**
|
|
17785
17866
|
* Configura le colonne per le tabelle necessarie alla creazione della form:
|