@underpeaks/generator-core 1.0.62 → 1.0.63
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.
|
@@ -3,17 +3,19 @@ export interface CardFieldSelection {
|
|
|
3
3
|
titleField?: ColumnDef;
|
|
4
4
|
imageField?: ColumnDef;
|
|
5
5
|
priceField?: ColumnDef;
|
|
6
|
+
discountField?: ColumnDef;
|
|
6
7
|
metaFields: ColumnDef[];
|
|
7
8
|
allFields?: ColumnDef[];
|
|
8
9
|
}
|
|
9
10
|
/**
|
|
10
11
|
* Picks which fields a card/list preview should show, based on the
|
|
11
|
-
* project's declared type.
|
|
12
|
-
* returns every visible field instead
|
|
13
|
-
* default without more context. For
|
|
14
|
-
* named roles (title/image/price/
|
|
15
|
-
* "first visible column" for
|
|
16
|
-
* never left with no title text
|
|
12
|
+
* project's declared type. An unrecognized project_type (after fuzzy
|
|
13
|
+
* matching — see resolveProjectType) returns every visible field instead
|
|
14
|
+
* of guessing — there's no sensible default without more context. For
|
|
15
|
+
* known types, matches columns to named roles (title/image/price/
|
|
16
|
+
* discount/meta) by keyword, falling back to "first visible column" for
|
|
17
|
+
* title if nothing matches, so a card is never left with no title text
|
|
18
|
+
* at all.
|
|
17
19
|
*/
|
|
18
20
|
export declare function selectCardFields(model: Model, projectType: string): CardFieldSelection;
|
|
19
21
|
//# sourceMappingURL=card-field-selection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"card-field-selection.d.ts","sourceRoot":"","sources":["../../src/schema/card-field-selection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAG/C,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"card-field-selection.d.ts","sourceRoot":"","sources":["../../src/schema/card-field-selection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAG/C,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAK,SAAS,CAAA;IACzB,UAAU,CAAC,EAAK,SAAS,CAAA;IACzB,UAAU,CAAC,EAAK,SAAS,CAAA;IACzB,aAAa,CAAC,EAAE,SAAS,CAAA;IAGzB,UAAU,EAAM,SAAS,EAAE,CAAA;IAK3B,SAAS,CAAC,EAAM,SAAS,EAAE,CAAA;CAC5B;AA+ED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,kBAAkB,CAkDtF"}
|
|
@@ -17,12 +17,14 @@ const PROJECT_TYPE_SLOTS = {
|
|
|
17
17
|
title: ['name', 'title'],
|
|
18
18
|
image: ['image', 'thumbnail', 'photo', 'cover'],
|
|
19
19
|
price: ['price', 'cost', 'amount'],
|
|
20
|
+
discount: ['discount_percentage', 'discount_percent', 'discount'],
|
|
20
21
|
meta: [['description', 'summary']],
|
|
21
22
|
},
|
|
22
23
|
marketplace: {
|
|
23
24
|
title: ['name', 'title'],
|
|
24
25
|
image: ['image', 'thumbnail', 'photo', 'cover'],
|
|
25
26
|
price: ['price', 'cost', 'amount'],
|
|
27
|
+
discount: ['discount_percentage', 'discount_percent', 'discount'],
|
|
26
28
|
meta: [['vendor', 'supplier', 'seller', 'store']],
|
|
27
29
|
},
|
|
28
30
|
saas: {
|
|
@@ -35,6 +37,27 @@ const PROJECT_TYPE_SLOTS = {
|
|
|
35
37
|
meta: [['content', 'body', 'text', 'caption'], ['likes', 'comments', 'reactions']],
|
|
36
38
|
},
|
|
37
39
|
};
|
|
40
|
+
// FIX: resolveProjectType previously required an exact match against
|
|
41
|
+
// PROJECT_TYPE_SLOTS' keys ('blog'/'ecommerce'/'marketplace'/'saas'/
|
|
42
|
+
// 'social') — any other string (e.g. 'products', 'ecommerce_store',
|
|
43
|
+
// 'Ecommerce', a value with surrounding whitespace) silently fell through
|
|
44
|
+
// to the allFields fallback, dumping every raw column onto the card as
|
|
45
|
+
// plain Text() widgets instead of a real curated layout. This was the
|
|
46
|
+
// actual cause of the products card showing every field with no image/
|
|
47
|
+
// price/title styling — not a field-selection bug, a project_type
|
|
48
|
+
// string-matching bug. Now normalizes case/whitespace and does a
|
|
49
|
+
// substring match in both directions before giving up.
|
|
50
|
+
function resolveProjectType(projectType) {
|
|
51
|
+
const normalized = projectType.trim().toLowerCase();
|
|
52
|
+
if (PROJECT_TYPE_SLOTS[normalized])
|
|
53
|
+
return PROJECT_TYPE_SLOTS[normalized];
|
|
54
|
+
for (const key of Object.keys(PROJECT_TYPE_SLOTS)) {
|
|
55
|
+
if (normalized.includes(key) || key.includes(normalized)) {
|
|
56
|
+
return PROJECT_TYPE_SLOTS[key];
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
38
61
|
function findColumnMatching(columns, keywords, taken) {
|
|
39
62
|
for (const keyword of keywords) {
|
|
40
63
|
const match = columns.find((c) => !taken.has(c.name) && c.name.toLowerCase().includes(keyword));
|
|
@@ -45,16 +68,17 @@ function findColumnMatching(columns, keywords, taken) {
|
|
|
45
68
|
}
|
|
46
69
|
/**
|
|
47
70
|
* Picks which fields a card/list preview should show, based on the
|
|
48
|
-
* project's declared type.
|
|
49
|
-
* returns every visible field instead
|
|
50
|
-
* default without more context. For
|
|
51
|
-
* named roles (title/image/price/
|
|
52
|
-
* "first visible column" for
|
|
53
|
-
* never left with no title text
|
|
71
|
+
* project's declared type. An unrecognized project_type (after fuzzy
|
|
72
|
+
* matching — see resolveProjectType) returns every visible field instead
|
|
73
|
+
* of guessing — there's no sensible default without more context. For
|
|
74
|
+
* known types, matches columns to named roles (title/image/price/
|
|
75
|
+
* discount/meta) by keyword, falling back to "first visible column" for
|
|
76
|
+
* title if nothing matches, so a card is never left with no title text
|
|
77
|
+
* at all.
|
|
54
78
|
*/
|
|
55
79
|
function selectCardFields(model, projectType) {
|
|
56
80
|
const columns = (0, parser_1.getVisibleColumns)(model);
|
|
57
|
-
const slots =
|
|
81
|
+
const slots = resolveProjectType(projectType);
|
|
58
82
|
if (!slots) {
|
|
59
83
|
return { allFields: columns, metaFields: [] };
|
|
60
84
|
}
|
|
@@ -74,6 +98,11 @@ function selectCardFields(model, projectType) {
|
|
|
74
98
|
: undefined;
|
|
75
99
|
if (priceField)
|
|
76
100
|
taken.add(priceField.name);
|
|
101
|
+
const discountField = slots.discount
|
|
102
|
+
? findColumnMatching(columns, slots.discount, taken)
|
|
103
|
+
: undefined;
|
|
104
|
+
if (discountField)
|
|
105
|
+
taken.add(discountField.name);
|
|
77
106
|
const metaFields = [];
|
|
78
107
|
for (const metaSlot of slots.meta) {
|
|
79
108
|
const match = findColumnMatching(columns, metaSlot, taken);
|
|
@@ -89,6 +118,7 @@ function selectCardFields(model, projectType) {
|
|
|
89
118
|
titleField: finalTitleField,
|
|
90
119
|
imageField,
|
|
91
120
|
priceField,
|
|
121
|
+
discountField,
|
|
92
122
|
metaFields,
|
|
93
123
|
};
|
|
94
124
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"card-field-selection.js","sourceRoot":"","sources":["../../src/schema/card-field-selection.ts"],"names":[],"mappings":";AAAA,sFAAsF;;
|
|
1
|
+
{"version":3,"file":"card-field-selection.js","sourceRoot":"","sources":["../../src/schema/card-field-selection.ts"],"names":[],"mappings":"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"}
|