medusa-storefront-data 2.5.1 → 2.5.4
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/HOMEPAGE_CONFIG.md +83 -10
- package/dist/src/server/dynamic-config.d.ts +25 -6
- package/dist/src/server/dynamic-config.d.ts.map +1 -1
- package/dist/src/server/dynamic-config.js +85 -10
- package/dist/src/server/help-faq-section-defaults.json +92 -0
- package/dist/src/server/help-sections/help-faq.d.ts +11 -0
- package/dist/src/server/help-sections/help-faq.d.ts.map +1 -0
- package/dist/src/server/help-sections/help-faq.js +6 -0
- package/dist/src/server/help-sections/index.d.ts +2 -0
- package/dist/src/server/help-sections/index.d.ts.map +1 -0
- package/dist/src/server/help-sections/index.js +1 -0
- package/dist/src/server/homepage-config.types.d.ts +21 -1
- package/dist/src/server/homepage-config.types.d.ts.map +1 -1
- package/dist/src/server/homepage-config.types.js +1 -0
- package/dist/src/server/homepage-section-defaults.d.ts +1 -0
- package/dist/src/server/homepage-section-defaults.d.ts.map +1 -1
- package/dist/src/server/homepage-section-defaults.js +2 -0
- package/dist/src/server/normalize-homepage-config.d.ts.map +1 -1
- package/dist/src/server/normalize-homepage-config.js +40 -0
- package/package.json +6 -1
- package/src/server/cart.ts +1 -1
- package/src/server/dynamic-config.ts +132 -12
- package/src/server/help-faq-section-defaults.json +92 -0
- package/src/server/help-sections/help-faq.ts +25 -0
- package/src/server/help-sections/index.ts +8 -0
- package/src/server/homepage-config.types.ts +24 -0
- package/src/server/homepage-section-defaults.ts +3 -0
- package/src/server/normalize-homepage-config.ts +39 -0
package/HOMEPAGE_CONFIG.md
CHANGED
|
@@ -1,6 +1,44 @@
|
|
|
1
1
|
# Homepage config and page input
|
|
2
2
|
|
|
3
|
-
Storefront **packages do not call** `GET /store/dynamic-config`.
|
|
3
|
+
Storefront **packages do not call** `GET /store/dynamic-config`. Each homepage section in `medusa-ui-home` keeps its **default copy in `data.json`** beside the UI. The **main project** fetches dynamic config once and passes optional `pageInput` overrides.
|
|
4
|
+
|
|
5
|
+
## `medusa-ui-home` section layout
|
|
6
|
+
|
|
7
|
+
Each section id is a folder under `src/home/sections/<id>/`:
|
|
8
|
+
|
|
9
|
+
| File | Role |
|
|
10
|
+
|------|------|
|
|
11
|
+
| `data.json` | Default segment fields for dynamic-config schema |
|
|
12
|
+
| `theme.ts` | Default class names for slots this section uses + `ThemeOverrides` + `mergeSectionTheme()` |
|
|
13
|
+
| `dynamic-config.ts` | `*HomepageSectionField`, `*DynamicConfigStructure`, section id exports |
|
|
14
|
+
| `component/` | Presentational UI (or `component/index.tsx` re-export for shared widgets) |
|
|
15
|
+
| `section.tsx` | Section React wrapper only; optional `theme` prop |
|
|
16
|
+
| `index.ts` | Package export (`medusa-ui-home/sections/<id>`) |
|
|
17
|
+
|
|
18
|
+
Shared widgets used by multiple sections live in `src/home/components/` (`dynamic-banner`, `shoppable-gallery`, `shared/product-grid-section`, etc.).
|
|
19
|
+
|
|
20
|
+
Cross-section slots (e.g. `section`, `sectionPad`, `cardSurface`) live in `src/home/theme/shared.ts` and are composed into `medusa-ui-home/theme` via `defaultHomeThemeClassNames`.
|
|
21
|
+
|
|
22
|
+
### Per-section theme overrides
|
|
23
|
+
|
|
24
|
+
```tsx
|
|
25
|
+
import AboutBrandSection, {
|
|
26
|
+
mergeSectionTheme,
|
|
27
|
+
type ThemeOverrides,
|
|
28
|
+
} from "medusa-ui-home/sections/aboutBrand"
|
|
29
|
+
|
|
30
|
+
const aboutBrandTheme: ThemeOverrides = {
|
|
31
|
+
bannerTitle: "text-3xl font-black text-[var(--sf-color-secondary)]",
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Page / section instance
|
|
35
|
+
<AboutBrandSection {...data} theme={aboutBrandTheme} />
|
|
36
|
+
|
|
37
|
+
// Or merge into site home theme (Medusa theme-base)
|
|
38
|
+
const homeTheme = mergeThemeSlots(defaultHomeThemeClassNames, {
|
|
39
|
+
...mergeSectionTheme({ bannerTitle: "..." }),
|
|
40
|
+
})
|
|
41
|
+
```
|
|
4
42
|
|
|
5
43
|
## Tree-shakeable imports (one section)
|
|
6
44
|
|
|
@@ -33,7 +71,7 @@ export default async function Page({
|
|
|
33
71
|
| `medusa-ui-home/sections/promoAnnouncements` | `medusa-storefront-data/home/sections/promoAnnouncements` |
|
|
34
72
|
| … | … (all `HomeSectionId` values) |
|
|
35
73
|
|
|
36
|
-
Run `node scripts/generate-home-section-exports.mjs` after adding a section.
|
|
74
|
+
Run `node scripts/generate-home-section-exports.mjs` after adding a section (creates `sections/<id>/` export entries in `medusa-ui-home` and loader paths in `medusa-storefront-data`).
|
|
37
75
|
|
|
38
76
|
## Themed pages (tree-shakeable)
|
|
39
77
|
|
|
@@ -108,25 +146,60 @@ const pageInput = homepageConfigFromDynamicResponse(await getDynamicConfig())
|
|
|
108
146
|
|
|
109
147
|
Pass `pageInput` only where you need CMS overrides; omit it to use package JSON defaults.
|
|
110
148
|
|
|
111
|
-
## Medusa backend admin schemas (`medusa-ui-home`)
|
|
149
|
+
## Medusa backend admin schemas (`medusa-ui-home-config`)
|
|
112
150
|
|
|
113
|
-
|
|
151
|
+
Use **`medusa-ui-home-config`** in the Medusa server (CommonJS `require` + ESM `import`). Do not import `medusa-ui-home` in `medusa-config` — that package is ESM-only (React UI).
|
|
152
|
+
|
|
153
|
+
```js
|
|
154
|
+
const { homepageSectionFields } = require("medusa-ui-home-config")
|
|
155
|
+
const { aboutBrandHomepageSectionField } = require(
|
|
156
|
+
"medusa-ui-home-config/sections/aboutBrand",
|
|
157
|
+
)
|
|
158
|
+
```
|
|
114
159
|
|
|
115
160
|
```ts
|
|
116
|
-
import
|
|
117
|
-
|
|
118
|
-
bannerSlide,
|
|
119
|
-
} from "medusa-ui-home/sections/hero"
|
|
120
|
-
import { whyChooseUsHomepageSectionField } from "medusa-ui-home/sections/whyChooseUs"
|
|
161
|
+
import { homepageSectionFields } from "medusa-ui-home-config"
|
|
162
|
+
import { heroHomepageSectionField, bannerSlide } from "medusa-ui-home-config/sections/hero"
|
|
121
163
|
```
|
|
122
164
|
|
|
123
|
-
Compose `options.configs`
|
|
165
|
+
Compose `options.configs` from `homepageSectionFields` or individual `*HomepageSectionField` exports. Merge API responses with `homepageConfigFromDynamicResponse` from `medusa-storefront-data/dynamic-config`.
|
|
166
|
+
|
|
167
|
+
Help page FAQs use **`helpFaqHomepageSectionField`** from `medusa-ui-home-config/sections/helpFaq` (also included in `homepageSectionFields`). Store in `homepage-config.sections.helpFaq`:
|
|
168
|
+
|
|
169
|
+
```json
|
|
170
|
+
{
|
|
171
|
+
"sections": {
|
|
172
|
+
"helpFaq": {
|
|
173
|
+
"eyebrow": "Knowledge Base",
|
|
174
|
+
"title": "Frequently Asked",
|
|
175
|
+
"titleHighlight": "Questions",
|
|
176
|
+
"subtitle": "Browse FAQs by topic.",
|
|
177
|
+
"categories": [
|
|
178
|
+
{
|
|
179
|
+
"category": "Order & Delivery",
|
|
180
|
+
"icon": "🚚",
|
|
181
|
+
"color": "from-blue-500 to-cyan-400",
|
|
182
|
+
"items": [
|
|
183
|
+
{ "question": "When will I receive my order?", "answer": "…" }
|
|
184
|
+
]
|
|
185
|
+
}
|
|
186
|
+
]
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Legacy flat `faq-array` entries are still supported and are grouped by `faq-category`.
|
|
193
|
+
|
|
194
|
+
Storefront UI still imports from `medusa-ui-home/sections/<id>`.
|
|
124
195
|
|
|
125
196
|
## API reference
|
|
126
197
|
|
|
127
198
|
| Export | Use |
|
|
128
199
|
|--------|-----|
|
|
129
200
|
| `loadHeroSectionData`, `loadNewArrivalsSectionData`, … | **One section** catalog + copy |
|
|
201
|
+
| `loadHelpFaqSectionData` | Help page FAQ (`sections.helpFaq`) |
|
|
202
|
+
| `getHelpFaqFromPageInput(pageInput)` | FAQ categories + section header copy |
|
|
130
203
|
| `getDynamicConfig()` | **Main project only** |
|
|
131
204
|
| `get*FromPageInput(pageInput)` | Read CMS copy/banners without fetching |
|
|
132
205
|
| `homepageConfigFromDynamicResponse(raw)` | Merge API → `pageInput` |
|
|
@@ -84,13 +84,32 @@ export declare function getSocialLinksFromPageInput(pageInput?: HomepageConfig |
|
|
|
84
84
|
url: string;
|
|
85
85
|
icon?: string;
|
|
86
86
|
}> | null;
|
|
87
|
-
export
|
|
87
|
+
export type HelpFaqItem = {
|
|
88
|
+
q: string;
|
|
89
|
+
a: string;
|
|
90
|
+
};
|
|
91
|
+
export type HelpFaqCategory = {
|
|
88
92
|
category: string;
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
93
|
+
icon?: string;
|
|
94
|
+
color?: string;
|
|
95
|
+
items: HelpFaqItem[];
|
|
96
|
+
};
|
|
97
|
+
export type HelpFaqSectionCopy = {
|
|
98
|
+
eyebrow?: string;
|
|
99
|
+
title?: string;
|
|
100
|
+
titleHighlight?: string;
|
|
101
|
+
subtitle?: string;
|
|
102
|
+
};
|
|
103
|
+
export type HelpFaqConfig = {
|
|
104
|
+
sectionCopy: HelpFaqSectionCopy;
|
|
105
|
+
categories: HelpFaqCategory[];
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* Help page FAQ — `sections.helpFaq` (preferred) with legacy `faq-array` fallback.
|
|
109
|
+
*/
|
|
110
|
+
export declare function getHelpFaqFromPageInput(pageInput?: HomepageConfig | null): HelpFaqConfig;
|
|
111
|
+
/** FAQ categories for the help template (null when empty). */
|
|
112
|
+
export declare function getFaqsFromPageInput(pageInput?: HomepageConfig | null): HelpFaqCategory[] | null;
|
|
94
113
|
export declare function getAnnouncementMessagesFromPageInput(pageInput?: HomepageConfig | null): string[];
|
|
95
114
|
export type AboutBrandConfig = {
|
|
96
115
|
eyebrow: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-config.d.ts","sourceRoot":"","sources":["../../../src/server/dynamic-config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"dynamic-config.d.ts","sourceRoot":"","sources":["../../../src/server/dynamic-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -365,18 +365,64 @@ export function getSocialLinksFromPageInput(pageInput) {
|
|
|
365
365
|
.filter((l) => l.name && l.url);
|
|
366
366
|
return socialLinks.length > 0 ? socialLinks : null;
|
|
367
367
|
}
|
|
368
|
-
|
|
368
|
+
function asConfigObject(value) {
|
|
369
|
+
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
370
|
+
return value;
|
|
371
|
+
}
|
|
372
|
+
return null;
|
|
373
|
+
}
|
|
374
|
+
function asConfigArray(value) {
|
|
375
|
+
return Array.isArray(value) ? value : [];
|
|
376
|
+
}
|
|
377
|
+
function parseHelpFaqItems(itemsRaw) {
|
|
378
|
+
const items = [];
|
|
379
|
+
for (const item of asConfigArray(itemsRaw)) {
|
|
380
|
+
const faq = asConfigObject(item?.faq) ?? asConfigObject(item);
|
|
381
|
+
if (!faq)
|
|
382
|
+
continue;
|
|
383
|
+
const q = String(faq.question ?? faq["faq-question"] ?? faq.q ?? "").trim();
|
|
384
|
+
const a = String(faq.answer ?? faq["faq-answer"] ?? faq.a ?? "").trim();
|
|
385
|
+
if (q && a)
|
|
386
|
+
items.push({ q, a });
|
|
387
|
+
}
|
|
388
|
+
return items;
|
|
389
|
+
}
|
|
390
|
+
function parseHelpFaqCategoriesFromBlock(block) {
|
|
391
|
+
const raw = block.categories;
|
|
392
|
+
if (!Array.isArray(raw))
|
|
393
|
+
return [];
|
|
394
|
+
const categories = [];
|
|
395
|
+
for (const row of raw) {
|
|
396
|
+
const cat = asConfigObject(row?.category) ??
|
|
397
|
+
asConfigObject(row);
|
|
398
|
+
if (!cat)
|
|
399
|
+
continue;
|
|
400
|
+
const category = String(cat.category ?? cat.name ?? "").trim();
|
|
401
|
+
const items = parseHelpFaqItems(cat.items);
|
|
402
|
+
if (!category || items.length === 0)
|
|
403
|
+
continue;
|
|
404
|
+
categories.push({
|
|
405
|
+
category,
|
|
406
|
+
icon: String(cat.icon ?? "❓").trim() || "❓",
|
|
407
|
+
color: String(cat.color ?? "from-violet-500 to-purple-400").trim() ||
|
|
408
|
+
"from-violet-500 to-purple-400",
|
|
409
|
+
items,
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
return categories;
|
|
413
|
+
}
|
|
414
|
+
function parseHelpFaqCategoriesFromLegacyArray(pageInput) {
|
|
369
415
|
const config = resolvePageInput(pageInput);
|
|
370
416
|
const faqsRaw = config["faq-array"] || [];
|
|
371
417
|
if (!Array.isArray(faqsRaw) || faqsRaw.length === 0)
|
|
372
|
-
return
|
|
418
|
+
return [];
|
|
373
419
|
const categoriesMap = {};
|
|
374
420
|
faqsRaw.forEach((item) => {
|
|
375
|
-
const faq = (item?.
|
|
376
|
-
const displayCategory = String(faq?.["faq-category"] || "General Questions").trim();
|
|
421
|
+
const faq = (item?.faq || item);
|
|
422
|
+
const displayCategory = String(faq?.["faq-category"] || faq?.category || "General Questions").trim();
|
|
377
423
|
const categoryKey = displayCategory.toLowerCase();
|
|
378
|
-
const q = String(faq?.["faq-question"] || "").trim();
|
|
379
|
-
const a = String(faq?.["faq-answer"] || "").trim();
|
|
424
|
+
const q = String(faq?.["faq-question"] || faq?.question || "").trim();
|
|
425
|
+
const a = String(faq?.["faq-answer"] || faq?.answer || "").trim();
|
|
380
426
|
if (q && a) {
|
|
381
427
|
if (!categoriesMap[categoryKey]) {
|
|
382
428
|
categoriesMap[categoryKey] = { displayCategory, items: [] };
|
|
@@ -384,11 +430,40 @@ export function getFaqsFromPageInput(pageInput) {
|
|
|
384
430
|
categoriesMap[categoryKey].items.push({ q, a });
|
|
385
431
|
}
|
|
386
432
|
});
|
|
387
|
-
|
|
388
|
-
category:
|
|
389
|
-
|
|
433
|
+
return Object.values(categoriesMap).map((cat) => ({
|
|
434
|
+
category: cat.displayCategory,
|
|
435
|
+
icon: "❓",
|
|
436
|
+
color: "from-violet-500 to-purple-400",
|
|
437
|
+
items: cat.items,
|
|
390
438
|
}));
|
|
391
|
-
|
|
439
|
+
}
|
|
440
|
+
function helpFaqBlockToSectionCopy(block) {
|
|
441
|
+
const copy = parseSectionCopy(block);
|
|
442
|
+
return {
|
|
443
|
+
eyebrow: copy.eyebrow ?? undefined,
|
|
444
|
+
title: copy.title ?? copy.name ?? undefined,
|
|
445
|
+
titleHighlight: typeof block.titleHighlight === "string"
|
|
446
|
+
? block.titleHighlight
|
|
447
|
+
: undefined,
|
|
448
|
+
subtitle: copy.subtitle ?? copy.description ?? copy.text ?? undefined,
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Help page FAQ — `sections.helpFaq` (preferred) with legacy `faq-array` fallback.
|
|
453
|
+
*/
|
|
454
|
+
export function getHelpFaqFromPageInput(pageInput) {
|
|
455
|
+
const block = getMergedSectionBlock("helpFaq", pageInput);
|
|
456
|
+
const sectionCopy = helpFaqBlockToSectionCopy(block);
|
|
457
|
+
let categories = parseHelpFaqCategoriesFromBlock(block);
|
|
458
|
+
if (categories.length === 0) {
|
|
459
|
+
categories = parseHelpFaqCategoriesFromLegacyArray(pageInput);
|
|
460
|
+
}
|
|
461
|
+
return { sectionCopy, categories };
|
|
462
|
+
}
|
|
463
|
+
/** FAQ categories for the help template (null when empty). */
|
|
464
|
+
export function getFaqsFromPageInput(pageInput) {
|
|
465
|
+
const { categories } = getHelpFaqFromPageInput(pageInput);
|
|
466
|
+
return categories.length > 0 ? categories : null;
|
|
392
467
|
}
|
|
393
468
|
export function getAnnouncementMessagesFromPageInput(pageInput) {
|
|
394
469
|
const block = getMergedSectionBlock("promoAnnouncements", pageInput);
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
{
|
|
2
|
+
"eyebrow": "Knowledge Base",
|
|
3
|
+
"title": "Frequently Asked",
|
|
4
|
+
"titleHighlight": "Questions",
|
|
5
|
+
"subtitle": "Browse through our most common questions — organized by topic for easy navigation.",
|
|
6
|
+
"categories": [
|
|
7
|
+
{
|
|
8
|
+
"category": "Order & Delivery",
|
|
9
|
+
"icon": "🚚",
|
|
10
|
+
"color": "from-blue-500 to-cyan-400",
|
|
11
|
+
"items": [
|
|
12
|
+
{
|
|
13
|
+
"question": "When will I receive my order?",
|
|
14
|
+
"answer": "Orders are typically processed within 1-2 business days. Delivery takes 3-5 business days depending on your location. Express delivery options may be available at checkout."
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"question": "How can I track my order?",
|
|
18
|
+
"answer": "Once your order ships, you will receive a tracking link via email and SMS. You can also track your order anytime from your account dashboard under 'My Orders'."
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"question": "Can I cancel or change my order?",
|
|
22
|
+
"answer": "You can cancel or change your order within 24 hours of placing it. Please contact our support team immediately or use the cancel option in your account. After 24 hours, the order may already be in processing."
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"question": "Do you offer free shipping?",
|
|
26
|
+
"answer": "Yes! We offer free shipping on all orders above ₹999. For orders below this amount, a nominal shipping fee applies based on your delivery location and the chosen shipping method."
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"category": "Returns & Exchanges",
|
|
32
|
+
"icon": "📦",
|
|
33
|
+
"color": "from-emerald-500 to-teal-400",
|
|
34
|
+
"items": [
|
|
35
|
+
{
|
|
36
|
+
"question": "What is your return policy?",
|
|
37
|
+
"answer": "We offer a 7-day return policy for unused, unwashed items in their original packaging with tags attached. Items must be in their original condition to qualify for a return."
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"question": "How do I initiate a return?",
|
|
41
|
+
"answer": "Go to your account, click on the specific order, and select 'Return Items'. Follow the instructions to generate a pickup request. Our team will schedule a pickup within 2 business days."
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"question": "Do you offer exchanges?",
|
|
45
|
+
"answer": "Yes, you can request an exchange for a different size or color within 7 days of delivery, subject to availability. Exchange items must be in original condition with all tags intact."
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"question": "When will I receive my exchanged item?",
|
|
49
|
+
"answer": "Once we receive and verify your returned item, the exchange will be dispatched within 2 business days. You'll receive a tracking link as soon as it ships."
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"category": "Payment & Refunds",
|
|
55
|
+
"icon": "💳",
|
|
56
|
+
"color": "from-violet-500 to-purple-400",
|
|
57
|
+
"items": [
|
|
58
|
+
{
|
|
59
|
+
"question": "When will I receive my refund?",
|
|
60
|
+
"answer": "Refunds are processed within 5-7 business days after we receive and inspect your returned items. The amount will be credited to your original payment method."
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"question": "What payment methods do you accept?",
|
|
64
|
+
"answer": "We accept all major credit/debit cards, UPI, Net Banking, Wallets (Paytm, PhonePe, etc.), and Cash on Delivery (COD) for most PIN codes across India."
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"question": "Is my payment information secure?",
|
|
68
|
+
"answer": "Absolutely! We use industry-standard SSL encryption and our payment gateway (Razorpay) is PCI-DSS compliant. We never store your card details on our servers."
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"category": "Product Inquiry",
|
|
74
|
+
"icon": "👗",
|
|
75
|
+
"color": "from-pink-500 to-rose-400",
|
|
76
|
+
"items": [
|
|
77
|
+
{
|
|
78
|
+
"question": "How do I find the right size for my child?",
|
|
79
|
+
"answer": "Each product page includes a detailed size chart with measurements in both cm and inches. We recommend measuring your child and comparing with our chart for the best fit. When in doubt, size up!"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"question": "Are products safe for kids?",
|
|
83
|
+
"answer": "Yes! All our products are certified child-safe. We use non-toxic, hypoallergenic dyes and materials that meet Indian safety standards for children's clothing. Safety is our top priority."
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"question": "How should I care for the clothing?",
|
|
87
|
+
"answer": "Machine wash cold with like colors. Do not bleach. Tumble dry low or hang dry. Iron on low heat if needed. Detailed care instructions are printed on the garment's inner label."
|
|
88
|
+
}
|
|
89
|
+
]
|
|
90
|
+
}
|
|
91
|
+
]
|
|
92
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import "server-only";
|
|
2
|
+
import { type HelpFaqCategory, type HelpFaqConfig, type HelpFaqSectionCopy } from "../dynamic-config";
|
|
3
|
+
import type { HomepageConfig } from "../homepage-config.types";
|
|
4
|
+
export type { HelpFaqCategory, HelpFaqConfig, HelpFaqSectionCopy };
|
|
5
|
+
export type HelpFaqSectionData = HelpFaqConfig;
|
|
6
|
+
export type HelpFaqSectionLoaderOptions = {
|
|
7
|
+
pageInput?: HomepageConfig | null;
|
|
8
|
+
};
|
|
9
|
+
/** Help page FAQ block — `sections.helpFaq` + legacy `faq-array`. */
|
|
10
|
+
export declare function loadHelpFaqSectionData(_countryCode: string, options?: HelpFaqSectionLoaderOptions): Promise<HelpFaqSectionData>;
|
|
11
|
+
//# sourceMappingURL=help-faq.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help-faq.d.ts","sourceRoot":"","sources":["../../../../src/server/help-sections/help-faq.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AAEpB,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACxB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAE9D,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,kBAAkB,EAAE,CAAA;AAElE,MAAM,MAAM,kBAAkB,GAAG,aAAa,CAAA;AAE9C,MAAM,MAAM,2BAA2B,GAAG;IACxC,SAAS,CAAC,EAAE,cAAc,GAAG,IAAI,CAAA;CAClC,CAAA;AAED,qEAAqE;AACrE,wBAAsB,sBAAsB,CAC1C,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,CAAC,kBAAkB,CAAC,CAE7B"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import "server-only";
|
|
2
|
+
import { getHelpFaqFromPageInput, } from "../dynamic-config";
|
|
3
|
+
/** Help page FAQ block — `sections.helpFaq` + legacy `faq-array`. */
|
|
4
|
+
export async function loadHelpFaqSectionData(_countryCode, options) {
|
|
5
|
+
return getHelpFaqFromPageInput(options?.pageInput ?? null);
|
|
6
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/help-sections/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,2BAA2B,GACjC,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { loadHelpFaqSectionData, } from "./help-faq";
|
|
@@ -123,6 +123,25 @@ export type HomepageBlogPostsSection = HomepageSectionCopyFields & {
|
|
|
123
123
|
posts?: HomepageBlogPost[];
|
|
124
124
|
"blog-posts"?: HomepageBlogPost[];
|
|
125
125
|
};
|
|
126
|
+
export type HomepageHelpFaqItem = {
|
|
127
|
+
question?: string;
|
|
128
|
+
answer?: string;
|
|
129
|
+
q?: string;
|
|
130
|
+
a?: string;
|
|
131
|
+
faq?: HomepageHelpFaqItem;
|
|
132
|
+
};
|
|
133
|
+
export type HomepageHelpFaqCategory = {
|
|
134
|
+
category?: string;
|
|
135
|
+
name?: string;
|
|
136
|
+
icon?: string;
|
|
137
|
+
color?: string;
|
|
138
|
+
items?: HomepageHelpFaqItem[];
|
|
139
|
+
faqs?: HomepageHelpFaqItem[];
|
|
140
|
+
};
|
|
141
|
+
export type HomepageHelpFaqSection = HomepageSectionCopyFields & {
|
|
142
|
+
titleHighlight?: string;
|
|
143
|
+
categories?: HomepageHelpFaqCategory[];
|
|
144
|
+
};
|
|
126
145
|
export type HomepageInstagramPost = {
|
|
127
146
|
id?: string;
|
|
128
147
|
image?: string;
|
|
@@ -182,6 +201,7 @@ export type HomepageSectionsConfig = {
|
|
|
182
201
|
lovedByMoms?: HomepageSectionCopyFields;
|
|
183
202
|
videoStories?: HomepageVideoStoriesSection;
|
|
184
203
|
blogPosts?: HomepageBlogPostsSection;
|
|
204
|
+
helpFaq?: HomepageHelpFaqSection;
|
|
185
205
|
/** Allow kebab-case keys from legacy CMS */
|
|
186
206
|
[sectionKey: string]: HomepageSectionCopyFields | undefined;
|
|
187
207
|
};
|
|
@@ -269,6 +289,6 @@ export type DynamicConfigResponse = {
|
|
|
269
289
|
[key: string]: unknown;
|
|
270
290
|
};
|
|
271
291
|
/** All section ids with package defaults. */
|
|
272
|
-
export declare const HOMEPAGE_SECTION_IDS: readonly ["promoAnnouncements", "hero", "categoryPills", "newArrivals", "newArrivalsClassic", "promoCountdown", "celebrityTrust", "luxeFavourites", "shopByCategory", "baptism", "baptismPicks", "themeDresses", "brandMarquee", "aboutBrand", "testimonials", "brandPillars", "instagramPosts", "features", "shopByAge", "whyChooseUs", "lovedByMoms", "videoStories", "blogPosts"];
|
|
292
|
+
export declare const HOMEPAGE_SECTION_IDS: readonly ["promoAnnouncements", "hero", "categoryPills", "newArrivals", "newArrivalsClassic", "promoCountdown", "celebrityTrust", "luxeFavourites", "shopByCategory", "baptism", "baptismPicks", "themeDresses", "brandMarquee", "aboutBrand", "testimonials", "brandPillars", "instagramPosts", "features", "shopByAge", "whyChooseUs", "lovedByMoms", "videoStories", "blogPosts", "helpFaq"];
|
|
273
293
|
export type HomepageSectionId = (typeof HOMEPAGE_SECTION_IDS)[number];
|
|
274
294
|
//# sourceMappingURL=homepage-config.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"homepage-config.types.d.ts","sourceRoot":"","sources":["../../../src/server/homepage-config.types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"homepage-config.types.d.ts","sourceRoot":"","sources":["../../../src/server/homepage-config.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -158,6 +158,7 @@ export declare const DEFAULT_HOMEPAGE_SECTIONS: {
|
|
|
158
158
|
readonly title: "Watch Stories & Reviews";
|
|
159
159
|
readonly "video-urls": readonly [];
|
|
160
160
|
};
|
|
161
|
+
readonly helpFaq: Record<string, unknown>;
|
|
161
162
|
readonly blogPosts: {
|
|
162
163
|
readonly title: "Blog posts";
|
|
163
164
|
readonly posts: readonly [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"homepage-section-defaults.d.ts","sourceRoot":"","sources":["../../../src/server/homepage-section-defaults.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"homepage-section-defaults.d.ts","sourceRoot":"","sources":["../../../src/server/homepage-section-defaults.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBA+JR,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;CA8BO,CAAA;AAE5D,MAAM,MAAM,oBAAoB,GAAG,MAAM,OAAO,yBAAyB,CAAA;AAEzE,eAAO,MAAM,yBAAyB,EAEjC,oBAAoB,EAAE,CAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import helpFaqDefaults from "./help-faq-section-defaults.json";
|
|
1
2
|
/**
|
|
2
3
|
* Default `homepage-config.sections` blocks.
|
|
3
4
|
* Dynamic config overrides any field; unset fields keep these defaults.
|
|
@@ -155,6 +156,7 @@ export const DEFAULT_HOMEPAGE_SECTIONS = {
|
|
|
155
156
|
title: "Watch Stories & Reviews",
|
|
156
157
|
"video-urls": [],
|
|
157
158
|
},
|
|
159
|
+
helpFaq: helpFaqDefaults,
|
|
158
160
|
blogPosts: {
|
|
159
161
|
title: "Blog posts",
|
|
160
162
|
posts: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-homepage-config.d.ts","sourceRoot":"","sources":["../../../src/server/normalize-homepage-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"normalize-homepage-config.d.ts","sourceRoot":"","sources":["../../../src/server/normalize-homepage-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AA+O7D;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAmCtE"}
|
|
@@ -173,6 +173,46 @@ function normalizeSections(sections) {
|
|
|
173
173
|
description: pillars.description,
|
|
174
174
|
};
|
|
175
175
|
}
|
|
176
|
+
const helpFaq = asObject(sections.helpFaq);
|
|
177
|
+
if (helpFaq) {
|
|
178
|
+
const categories = asArray(helpFaq.categories)
|
|
179
|
+
.map((row) => {
|
|
180
|
+
const cat = asObject(row?.category) ?? asObject(row);
|
|
181
|
+
if (!cat)
|
|
182
|
+
return null;
|
|
183
|
+
const items = asArray(cat.items)
|
|
184
|
+
.map((item) => {
|
|
185
|
+
const faq = asObject(item?.faq) ?? asObject(item);
|
|
186
|
+
if (!faq)
|
|
187
|
+
return null;
|
|
188
|
+
const question = String(faq.question ?? faq["faq-question"] ?? "").trim();
|
|
189
|
+
const answer = String(faq.answer ?? faq["faq-answer"] ?? "").trim();
|
|
190
|
+
if (!question || !answer)
|
|
191
|
+
return null;
|
|
192
|
+
return { question, answer };
|
|
193
|
+
})
|
|
194
|
+
.filter(Boolean);
|
|
195
|
+
const category = String(cat.category ?? cat.name ?? "").trim();
|
|
196
|
+
if (!category || items.length === 0)
|
|
197
|
+
return null;
|
|
198
|
+
return {
|
|
199
|
+
category,
|
|
200
|
+
icon: cat.icon,
|
|
201
|
+
color: cat.color,
|
|
202
|
+
items,
|
|
203
|
+
};
|
|
204
|
+
})
|
|
205
|
+
.filter(Boolean);
|
|
206
|
+
if (categories.length) {
|
|
207
|
+
out.helpFaq = {
|
|
208
|
+
eyebrow: helpFaq.eyebrow,
|
|
209
|
+
title: helpFaq.title,
|
|
210
|
+
titleHighlight: helpFaq.titleHighlight,
|
|
211
|
+
subtitle: helpFaq.subtitle ?? helpFaq.description,
|
|
212
|
+
categories,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
}
|
|
176
216
|
return out;
|
|
177
217
|
}
|
|
178
218
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "medusa-storefront-data",
|
|
3
|
-
"version": "2.5.
|
|
3
|
+
"version": "2.5.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Medusa storefront server data layer extracted from Next.js storefront",
|
|
6
6
|
"license": "MIT",
|
|
@@ -167,6 +167,11 @@
|
|
|
167
167
|
"types": "./dist/server/home-sections/blog-posts.d.ts",
|
|
168
168
|
"import": "./src/server/home-sections/blog-posts.ts",
|
|
169
169
|
"default": "./src/server/home-sections/blog-posts.ts"
|
|
170
|
+
},
|
|
171
|
+
"./help/sections/helpFaq": {
|
|
172
|
+
"types": "./dist/server/help-sections/help-faq.d.ts",
|
|
173
|
+
"import": "./src/server/help-sections/help-faq.ts",
|
|
174
|
+
"default": "./src/server/help-sections/help-faq.ts"
|
|
170
175
|
}
|
|
171
176
|
},
|
|
172
177
|
"main": "./dist/server/index.js",
|
package/src/server/cart.ts
CHANGED
|
@@ -740,7 +740,7 @@ export async function placeOrder(cartId?: string) {
|
|
|
740
740
|
}
|
|
741
741
|
|
|
742
742
|
if (cartRes?.type === "order") {
|
|
743
|
-
const order = cartRes.order as HttpTypes.StoreOrder
|
|
743
|
+
const order = cartRes.order as unknown as HttpTypes.StoreOrder
|
|
744
744
|
const countryCode = order.shipping_address?.country_code?.toLowerCase()
|
|
745
745
|
|
|
746
746
|
const orderCacheTag = await getCacheTag("orders")
|
|
@@ -523,22 +523,100 @@ export function getSocialLinksFromPageInput(
|
|
|
523
523
|
}
|
|
524
524
|
|
|
525
525
|
|
|
526
|
-
export
|
|
526
|
+
export type HelpFaqItem = { q: string; a: string }
|
|
527
|
+
|
|
528
|
+
export type HelpFaqCategory = {
|
|
529
|
+
category: string
|
|
530
|
+
icon?: string
|
|
531
|
+
color?: string
|
|
532
|
+
items: HelpFaqItem[]
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
export type HelpFaqSectionCopy = {
|
|
536
|
+
eyebrow?: string
|
|
537
|
+
title?: string
|
|
538
|
+
titleHighlight?: string
|
|
539
|
+
subtitle?: string
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
export type HelpFaqConfig = {
|
|
543
|
+
sectionCopy: HelpFaqSectionCopy
|
|
544
|
+
categories: HelpFaqCategory[]
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
function asConfigObject(value: unknown): Record<string, unknown> | null {
|
|
548
|
+
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
549
|
+
return value as Record<string, unknown>
|
|
550
|
+
}
|
|
551
|
+
return null
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
function asConfigArray(value: unknown): unknown[] {
|
|
555
|
+
return Array.isArray(value) ? value : []
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
function parseHelpFaqItems(itemsRaw: unknown): HelpFaqItem[] {
|
|
559
|
+
const items: HelpFaqItem[] = []
|
|
560
|
+
for (const item of asConfigArray(itemsRaw)) {
|
|
561
|
+
const faq =
|
|
562
|
+
asConfigObject((item as Record<string, unknown>)?.faq) ?? asConfigObject(item)
|
|
563
|
+
if (!faq) continue
|
|
564
|
+
const q = String(
|
|
565
|
+
faq.question ?? faq["faq-question"] ?? faq.q ?? ""
|
|
566
|
+
).trim()
|
|
567
|
+
const a = String(faq.answer ?? faq["faq-answer"] ?? faq.a ?? "").trim()
|
|
568
|
+
if (q && a) items.push({ q, a })
|
|
569
|
+
}
|
|
570
|
+
return items
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
function parseHelpFaqCategoriesFromBlock(
|
|
574
|
+
block: Record<string, unknown>
|
|
575
|
+
): HelpFaqCategory[] {
|
|
576
|
+
const raw = block.categories
|
|
577
|
+
if (!Array.isArray(raw)) return []
|
|
578
|
+
|
|
579
|
+
const categories: HelpFaqCategory[] = []
|
|
580
|
+
for (const row of raw) {
|
|
581
|
+
const cat =
|
|
582
|
+
asConfigObject((row as Record<string, unknown>)?.category) ??
|
|
583
|
+
asConfigObject(row)
|
|
584
|
+
if (!cat) continue
|
|
585
|
+
const category = String(cat.category ?? cat.name ?? "").trim()
|
|
586
|
+
const items = parseHelpFaqItems(cat.items)
|
|
587
|
+
if (!category || items.length === 0) continue
|
|
588
|
+
categories.push({
|
|
589
|
+
category,
|
|
590
|
+
icon: String(cat.icon ?? "❓").trim() || "❓",
|
|
591
|
+
color:
|
|
592
|
+
String(cat.color ?? "from-violet-500 to-purple-400").trim() ||
|
|
593
|
+
"from-violet-500 to-purple-400",
|
|
594
|
+
items,
|
|
595
|
+
})
|
|
596
|
+
}
|
|
597
|
+
return categories
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
function parseHelpFaqCategoriesFromLegacyArray(
|
|
527
601
|
pageInput?: HomepageConfig | null
|
|
528
|
-
):
|
|
602
|
+
): HelpFaqCategory[] {
|
|
529
603
|
const config = resolvePageInput(pageInput)
|
|
530
604
|
const faqsRaw = config["faq-array"] || []
|
|
531
|
-
if (!Array.isArray(faqsRaw) || faqsRaw.length === 0) return
|
|
605
|
+
if (!Array.isArray(faqsRaw) || faqsRaw.length === 0) return []
|
|
606
|
+
|
|
532
607
|
const categoriesMap: Record<
|
|
533
608
|
string,
|
|
534
|
-
{ displayCategory: string; items:
|
|
609
|
+
{ displayCategory: string; items: HelpFaqItem[] }
|
|
535
610
|
> = {}
|
|
611
|
+
|
|
536
612
|
faqsRaw.forEach((item: Record<string, unknown>) => {
|
|
537
|
-
const faq = (item?.
|
|
538
|
-
const displayCategory = String(
|
|
613
|
+
const faq = (item?.faq || item) as Record<string, unknown>
|
|
614
|
+
const displayCategory = String(
|
|
615
|
+
faq?.["faq-category"] || faq?.category || "General Questions"
|
|
616
|
+
).trim()
|
|
539
617
|
const categoryKey = displayCategory.toLowerCase()
|
|
540
|
-
const q = String(faq?.["faq-question"] || "").trim()
|
|
541
|
-
const a = String(faq?.["faq-answer"] || "").trim()
|
|
618
|
+
const q = String(faq?.["faq-question"] || faq?.question || "").trim()
|
|
619
|
+
const a = String(faq?.["faq-answer"] || faq?.answer || "").trim()
|
|
542
620
|
if (q && a) {
|
|
543
621
|
if (!categoriesMap[categoryKey]) {
|
|
544
622
|
categoriesMap[categoryKey] = { displayCategory, items: [] }
|
|
@@ -546,11 +624,53 @@ export function getFaqsFromPageInput(
|
|
|
546
624
|
categoriesMap[categoryKey].items.push({ q, a })
|
|
547
625
|
}
|
|
548
626
|
})
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
627
|
+
|
|
628
|
+
return Object.values(categoriesMap).map((cat) => ({
|
|
629
|
+
category: cat.displayCategory,
|
|
630
|
+
icon: "❓",
|
|
631
|
+
color: "from-violet-500 to-purple-400",
|
|
632
|
+
items: cat.items,
|
|
552
633
|
}))
|
|
553
|
-
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
function helpFaqBlockToSectionCopy(
|
|
637
|
+
block: Record<string, unknown>
|
|
638
|
+
): HelpFaqSectionCopy {
|
|
639
|
+
const copy = parseSectionCopy(block)
|
|
640
|
+
return {
|
|
641
|
+
eyebrow: copy.eyebrow ?? undefined,
|
|
642
|
+
title: copy.title ?? copy.name ?? undefined,
|
|
643
|
+
titleHighlight:
|
|
644
|
+
typeof block.titleHighlight === "string"
|
|
645
|
+
? block.titleHighlight
|
|
646
|
+
: undefined,
|
|
647
|
+
subtitle: copy.subtitle ?? copy.description ?? copy.text ?? undefined,
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
/**
|
|
652
|
+
* Help page FAQ — `sections.helpFaq` (preferred) with legacy `faq-array` fallback.
|
|
653
|
+
*/
|
|
654
|
+
export function getHelpFaqFromPageInput(
|
|
655
|
+
pageInput?: HomepageConfig | null
|
|
656
|
+
): HelpFaqConfig {
|
|
657
|
+
const block = getMergedSectionBlock("helpFaq", pageInput)
|
|
658
|
+
const sectionCopy = helpFaqBlockToSectionCopy(block)
|
|
659
|
+
|
|
660
|
+
let categories = parseHelpFaqCategoriesFromBlock(block)
|
|
661
|
+
if (categories.length === 0) {
|
|
662
|
+
categories = parseHelpFaqCategoriesFromLegacyArray(pageInput)
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
return { sectionCopy, categories }
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
/** FAQ categories for the help template (null when empty). */
|
|
669
|
+
export function getFaqsFromPageInput(
|
|
670
|
+
pageInput?: HomepageConfig | null
|
|
671
|
+
): HelpFaqCategory[] | null {
|
|
672
|
+
const { categories } = getHelpFaqFromPageInput(pageInput)
|
|
673
|
+
return categories.length > 0 ? categories : null
|
|
554
674
|
}
|
|
555
675
|
|
|
556
676
|
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
{
|
|
2
|
+
"eyebrow": "Knowledge Base",
|
|
3
|
+
"title": "Frequently Asked",
|
|
4
|
+
"titleHighlight": "Questions",
|
|
5
|
+
"subtitle": "Browse through our most common questions — organized by topic for easy navigation.",
|
|
6
|
+
"categories": [
|
|
7
|
+
{
|
|
8
|
+
"category": "Order & Delivery",
|
|
9
|
+
"icon": "🚚",
|
|
10
|
+
"color": "from-blue-500 to-cyan-400",
|
|
11
|
+
"items": [
|
|
12
|
+
{
|
|
13
|
+
"question": "When will I receive my order?",
|
|
14
|
+
"answer": "Orders are typically processed within 1-2 business days. Delivery takes 3-5 business days depending on your location. Express delivery options may be available at checkout."
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"question": "How can I track my order?",
|
|
18
|
+
"answer": "Once your order ships, you will receive a tracking link via email and SMS. You can also track your order anytime from your account dashboard under 'My Orders'."
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"question": "Can I cancel or change my order?",
|
|
22
|
+
"answer": "You can cancel or change your order within 24 hours of placing it. Please contact our support team immediately or use the cancel option in your account. After 24 hours, the order may already be in processing."
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"question": "Do you offer free shipping?",
|
|
26
|
+
"answer": "Yes! We offer free shipping on all orders above ₹999. For orders below this amount, a nominal shipping fee applies based on your delivery location and the chosen shipping method."
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"category": "Returns & Exchanges",
|
|
32
|
+
"icon": "📦",
|
|
33
|
+
"color": "from-emerald-500 to-teal-400",
|
|
34
|
+
"items": [
|
|
35
|
+
{
|
|
36
|
+
"question": "What is your return policy?",
|
|
37
|
+
"answer": "We offer a 7-day return policy for unused, unwashed items in their original packaging with tags attached. Items must be in their original condition to qualify for a return."
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"question": "How do I initiate a return?",
|
|
41
|
+
"answer": "Go to your account, click on the specific order, and select 'Return Items'. Follow the instructions to generate a pickup request. Our team will schedule a pickup within 2 business days."
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"question": "Do you offer exchanges?",
|
|
45
|
+
"answer": "Yes, you can request an exchange for a different size or color within 7 days of delivery, subject to availability. Exchange items must be in original condition with all tags intact."
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"question": "When will I receive my exchanged item?",
|
|
49
|
+
"answer": "Once we receive and verify your returned item, the exchange will be dispatched within 2 business days. You'll receive a tracking link as soon as it ships."
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"category": "Payment & Refunds",
|
|
55
|
+
"icon": "💳",
|
|
56
|
+
"color": "from-violet-500 to-purple-400",
|
|
57
|
+
"items": [
|
|
58
|
+
{
|
|
59
|
+
"question": "When will I receive my refund?",
|
|
60
|
+
"answer": "Refunds are processed within 5-7 business days after we receive and inspect your returned items. The amount will be credited to your original payment method."
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"question": "What payment methods do you accept?",
|
|
64
|
+
"answer": "We accept all major credit/debit cards, UPI, Net Banking, Wallets (Paytm, PhonePe, etc.), and Cash on Delivery (COD) for most PIN codes across India."
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"question": "Is my payment information secure?",
|
|
68
|
+
"answer": "Absolutely! We use industry-standard SSL encryption and our payment gateway (Razorpay) is PCI-DSS compliant. We never store your card details on our servers."
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"category": "Product Inquiry",
|
|
74
|
+
"icon": "👗",
|
|
75
|
+
"color": "from-pink-500 to-rose-400",
|
|
76
|
+
"items": [
|
|
77
|
+
{
|
|
78
|
+
"question": "How do I find the right size for my child?",
|
|
79
|
+
"answer": "Each product page includes a detailed size chart with measurements in both cm and inches. We recommend measuring your child and comparing with our chart for the best fit. When in doubt, size up!"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"question": "Are products safe for kids?",
|
|
83
|
+
"answer": "Yes! All our products are certified child-safe. We use non-toxic, hypoallergenic dyes and materials that meet Indian safety standards for children's clothing. Safety is our top priority."
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"question": "How should I care for the clothing?",
|
|
87
|
+
"answer": "Machine wash cold with like colors. Do not bleach. Tumble dry low or hang dry. Iron on low heat if needed. Detailed care instructions are printed on the garment's inner label."
|
|
88
|
+
}
|
|
89
|
+
]
|
|
90
|
+
}
|
|
91
|
+
]
|
|
92
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import "server-only"
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
getHelpFaqFromPageInput,
|
|
5
|
+
type HelpFaqCategory,
|
|
6
|
+
type HelpFaqConfig,
|
|
7
|
+
type HelpFaqSectionCopy,
|
|
8
|
+
} from "../dynamic-config"
|
|
9
|
+
import type { HomepageConfig } from "../homepage-config.types"
|
|
10
|
+
|
|
11
|
+
export type { HelpFaqCategory, HelpFaqConfig, HelpFaqSectionCopy }
|
|
12
|
+
|
|
13
|
+
export type HelpFaqSectionData = HelpFaqConfig
|
|
14
|
+
|
|
15
|
+
export type HelpFaqSectionLoaderOptions = {
|
|
16
|
+
pageInput?: HomepageConfig | null
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** Help page FAQ block — `sections.helpFaq` + legacy `faq-array`. */
|
|
20
|
+
export async function loadHelpFaqSectionData(
|
|
21
|
+
_countryCode: string,
|
|
22
|
+
options?: HelpFaqSectionLoaderOptions
|
|
23
|
+
): Promise<HelpFaqSectionData> {
|
|
24
|
+
return getHelpFaqFromPageInput(options?.pageInput ?? null)
|
|
25
|
+
}
|
|
@@ -138,6 +138,28 @@ export type HomepageBlogPostsSection = HomepageSectionCopyFields & {
|
|
|
138
138
|
"blog-posts"?: HomepageBlogPost[]
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
+
export type HomepageHelpFaqItem = {
|
|
142
|
+
question?: string
|
|
143
|
+
answer?: string
|
|
144
|
+
q?: string
|
|
145
|
+
a?: string
|
|
146
|
+
faq?: HomepageHelpFaqItem
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export type HomepageHelpFaqCategory = {
|
|
150
|
+
category?: string
|
|
151
|
+
name?: string
|
|
152
|
+
icon?: string
|
|
153
|
+
color?: string
|
|
154
|
+
items?: HomepageHelpFaqItem[]
|
|
155
|
+
faqs?: HomepageHelpFaqItem[]
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
export type HomepageHelpFaqSection = HomepageSectionCopyFields & {
|
|
159
|
+
titleHighlight?: string
|
|
160
|
+
categories?: HomepageHelpFaqCategory[]
|
|
161
|
+
}
|
|
162
|
+
|
|
141
163
|
export type HomepageInstagramPost = {
|
|
142
164
|
id?: string
|
|
143
165
|
image?: string
|
|
@@ -203,6 +225,7 @@ export type HomepageSectionsConfig = {
|
|
|
203
225
|
lovedByMoms?: HomepageSectionCopyFields
|
|
204
226
|
videoStories?: HomepageVideoStoriesSection
|
|
205
227
|
blogPosts?: HomepageBlogPostsSection
|
|
228
|
+
helpFaq?: HomepageHelpFaqSection
|
|
206
229
|
/** Allow kebab-case keys from legacy CMS */
|
|
207
230
|
[sectionKey: string]: HomepageSectionCopyFields | undefined
|
|
208
231
|
}
|
|
@@ -330,6 +353,7 @@ export const HOMEPAGE_SECTION_IDS = [
|
|
|
330
353
|
"lovedByMoms",
|
|
331
354
|
"videoStories",
|
|
332
355
|
"blogPosts",
|
|
356
|
+
"helpFaq",
|
|
333
357
|
] as const
|
|
334
358
|
|
|
335
359
|
export type HomepageSectionId = (typeof HOMEPAGE_SECTION_IDS)[number]
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import helpFaqDefaults from "./help-faq-section-defaults.json"
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Default `homepage-config.sections` blocks.
|
|
3
5
|
* Dynamic config overrides any field; unset fields keep these defaults.
|
|
@@ -161,6 +163,7 @@ export const DEFAULT_HOMEPAGE_SECTIONS = {
|
|
|
161
163
|
title: "Watch Stories & Reviews",
|
|
162
164
|
"video-urls": [],
|
|
163
165
|
},
|
|
166
|
+
helpFaq: helpFaqDefaults as Record<string, unknown>,
|
|
164
167
|
blogPosts: {
|
|
165
168
|
title: "Blog posts",
|
|
166
169
|
posts: [
|
|
@@ -195,6 +195,45 @@ function normalizeSections(sections: Loose): Loose {
|
|
|
195
195
|
}
|
|
196
196
|
}
|
|
197
197
|
|
|
198
|
+
const helpFaq = asObject(sections.helpFaq)
|
|
199
|
+
if (helpFaq) {
|
|
200
|
+
const categories = asArray(helpFaq.categories)
|
|
201
|
+
.map((row) => {
|
|
202
|
+
const cat = asObject((row as Loose)?.category) ?? asObject(row)
|
|
203
|
+
if (!cat) return null
|
|
204
|
+
const items = asArray(cat.items)
|
|
205
|
+
.map((item) => {
|
|
206
|
+
const faq = asObject((item as Loose)?.faq) ?? asObject(item)
|
|
207
|
+
if (!faq) return null
|
|
208
|
+
const question = String(
|
|
209
|
+
faq.question ?? faq["faq-question"] ?? ""
|
|
210
|
+
).trim()
|
|
211
|
+
const answer = String(faq.answer ?? faq["faq-answer"] ?? "").trim()
|
|
212
|
+
if (!question || !answer) return null
|
|
213
|
+
return { question, answer }
|
|
214
|
+
})
|
|
215
|
+
.filter(Boolean)
|
|
216
|
+
const category = String(cat.category ?? cat.name ?? "").trim()
|
|
217
|
+
if (!category || items.length === 0) return null
|
|
218
|
+
return {
|
|
219
|
+
category,
|
|
220
|
+
icon: cat.icon,
|
|
221
|
+
color: cat.color,
|
|
222
|
+
items,
|
|
223
|
+
}
|
|
224
|
+
})
|
|
225
|
+
.filter(Boolean)
|
|
226
|
+
if (categories.length) {
|
|
227
|
+
out.helpFaq = {
|
|
228
|
+
eyebrow: helpFaq.eyebrow,
|
|
229
|
+
title: helpFaq.title,
|
|
230
|
+
titleHighlight: helpFaq.titleHighlight,
|
|
231
|
+
subtitle: helpFaq.subtitle ?? helpFaq.description,
|
|
232
|
+
categories,
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
198
237
|
return out
|
|
199
238
|
}
|
|
200
239
|
|