@underpeaks/generator-nextjs 1.0.29 → 1.0.32
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/dist/components/registry-display.d.ts.map +1 -1
- package/dist/components/registry-display.js +3 -7
- package/dist/components/registry-display.js.map +1 -1
- package/dist/generator.d.ts +0 -7
- package/dist/generator.d.ts.map +1 -1
- package/dist/generator.js +90 -40
- package/dist/generator.js.map +1 -1
- package/dist/templates/api-builder.d.ts +1 -1
- package/dist/templates/api-builder.d.ts.map +1 -1
- package/dist/templates/api-builder.js +7 -4
- package/dist/templates/api-builder.js.map +1 -1
- package/dist/templates/app-nav.d.ts +3 -20
- package/dist/templates/app-nav.d.ts.map +1 -1
- package/dist/templates/app-nav.js +55 -22
- package/dist/templates/app-nav.js.map +1 -1
- package/dist/templates/layout.d.ts.map +1 -1
- package/dist/templates/layout.js +16 -9
- package/dist/templates/layout.js.map +1 -1
- package/dist/templates/page-auth.d.ts +1 -1
- package/dist/templates/page-auth.d.ts.map +1 -1
- package/dist/templates/page-auth.js +20 -7
- package/dist/templates/page-auth.js.map +1 -1
- package/dist/templates/page-blog-post.d.ts +2 -2
- package/dist/templates/page-blog-post.d.ts.map +1 -1
- package/dist/templates/page-blog-post.js +38 -1
- package/dist/templates/page-blog-post.js.map +1 -1
- package/dist/templates/page-calendar.d.ts +2 -2
- package/dist/templates/page-calendar.d.ts.map +1 -1
- package/dist/templates/page-calendar.js +31 -3
- package/dist/templates/page-calendar.js.map +1 -1
- package/dist/templates/page-cart.d.ts +2 -2
- package/dist/templates/page-cart.d.ts.map +1 -1
- package/dist/templates/page-cart.js +27 -2
- package/dist/templates/page-cart.js.map +1 -1
- package/dist/templates/page-checkout.d.ts +2 -2
- package/dist/templates/page-checkout.d.ts.map +1 -1
- package/dist/templates/page-checkout.js +19 -2
- package/dist/templates/page-checkout.js.map +1 -1
- package/dist/templates/page-contact.d.ts +0 -2
- package/dist/templates/page-contact.d.ts.map +1 -1
- package/dist/templates/page-contact.js +83 -84
- package/dist/templates/page-contact.js.map +1 -1
- package/dist/templates/page-dashboard.d.ts +2 -2
- package/dist/templates/page-dashboard.d.ts.map +1 -1
- package/dist/templates/page-dashboard.js +30 -3
- package/dist/templates/page-dashboard.js.map +1 -1
- package/dist/templates/page-detail.d.ts +2 -2
- package/dist/templates/page-detail.d.ts.map +1 -1
- package/dist/templates/page-detail.js +156 -8
- package/dist/templates/page-detail.js.map +1 -1
- package/dist/templates/page-feed.d.ts +2 -2
- package/dist/templates/page-feed.d.ts.map +1 -1
- package/dist/templates/page-feed.js +44 -3
- package/dist/templates/page-feed.js.map +1 -1
- package/dist/templates/page-form.d.ts.map +1 -1
- package/dist/templates/page-form.js +341 -43
- package/dist/templates/page-form.js.map +1 -1
- package/dist/templates/page-gallery.d.ts +2 -2
- package/dist/templates/page-gallery.d.ts.map +1 -1
- package/dist/templates/page-gallery.js +36 -2
- package/dist/templates/page-gallery.js.map +1 -1
- package/dist/templates/page-invoice.d.ts +2 -2
- package/dist/templates/page-invoice.d.ts.map +1 -1
- package/dist/templates/page-invoice.js +40 -1
- package/dist/templates/page-invoice.js.map +1 -1
- package/dist/templates/page-kanban.d.ts +2 -2
- package/dist/templates/page-kanban.d.ts.map +1 -1
- package/dist/templates/page-kanban.js +29 -4
- package/dist/templates/page-kanban.js.map +1 -1
- package/dist/templates/page-landing-hero-cta.d.ts +3 -0
- package/dist/templates/page-landing-hero-cta.d.ts.map +1 -0
- package/dist/templates/page-landing-hero-cta.js +54 -0
- package/dist/templates/page-landing-hero-cta.js.map +1 -0
- package/dist/templates/page-landing-hero-features.d.ts +3 -0
- package/dist/templates/page-landing-hero-features.d.ts.map +1 -0
- package/dist/templates/page-landing-hero-features.js +45 -0
- package/dist/templates/page-landing-hero-features.js.map +1 -0
- package/dist/templates/page-landing-hero-pricing.d.ts +3 -0
- package/dist/templates/page-landing-hero-pricing.d.ts.map +1 -0
- package/dist/templates/page-landing-hero-pricing.js +46 -0
- package/dist/templates/page-landing-hero-pricing.js.map +1 -0
- package/dist/templates/page-landing-minimal.d.ts +3 -0
- package/dist/templates/page-landing-minimal.d.ts.map +1 -0
- package/dist/templates/page-landing-minimal.js +26 -0
- package/dist/templates/page-landing-minimal.js.map +1 -0
- package/dist/templates/page-list.d.ts +2 -2
- package/dist/templates/page-list.d.ts.map +1 -1
- package/dist/templates/page-list.js +96 -11
- package/dist/templates/page-list.js.map +1 -1
- package/dist/templates/page-otp-entry.d.ts +2 -2
- package/dist/templates/page-otp-entry.d.ts.map +1 -1
- package/dist/templates/page-otp-entry.js +23 -2
- package/dist/templates/page-otp-entry.js.map +1 -1
- package/dist/templates/page-otp-request.d.ts +2 -2
- package/dist/templates/page-otp-request.d.ts.map +1 -1
- package/dist/templates/page-otp-request.js +18 -2
- package/dist/templates/page-otp-request.js.map +1 -1
- package/dist/templates/page-profile.d.ts +2 -2
- package/dist/templates/page-profile.d.ts.map +1 -1
- package/dist/templates/page-profile.js +37 -1
- package/dist/templates/page-profile.js.map +1 -1
- package/dist/templates/page-reset-password.d.ts +3 -0
- package/dist/templates/page-reset-password.d.ts.map +1 -0
- package/dist/templates/page-reset-password.js +122 -0
- package/dist/templates/page-reset-password.js.map +1 -0
- package/dist/templates/page-search.d.ts +2 -2
- package/dist/templates/page-search.d.ts.map +1 -1
- package/dist/templates/page-search.js +22 -2
- package/dist/templates/page-search.js.map +1 -1
- package/dist/templates/page-settings.d.ts +2 -2
- package/dist/templates/page-settings.d.ts.map +1 -1
- package/dist/templates/page-settings.js +48 -4
- package/dist/templates/page-settings.js.map +1 -1
- package/dist/templates/page-wallet.d.ts +2 -2
- package/dist/templates/page-wallet.d.ts.map +1 -1
- package/dist/templates/page-wallet.js +44 -2
- package/dist/templates/page-wallet.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,23 +3,70 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.generateListPage = generateListPage;
|
|
5
5
|
const generator_core_1 = require("@underpeaks/generator-core");
|
|
6
|
-
function
|
|
6
|
+
function toRoutePath(slug) {
|
|
7
|
+
return slug.replace(/^\//, '');
|
|
8
|
+
}
|
|
9
|
+
function generateListPage(page, model, projectType,
|
|
10
|
+
// NAVIGATOR: routes originating from this page, and the full page list
|
|
11
|
+
// so a route's to_page_id can be resolved to a real path. Both default
|
|
12
|
+
// to [] so this stays backward compatible with any caller that hasn't
|
|
13
|
+
// been updated yet.
|
|
14
|
+
routes = [], allPages = []) {
|
|
7
15
|
const className = (0, generator_core_1.modelToClassName)(model.name);
|
|
8
16
|
const fileName = (0, generator_core_1.modelToFileName)(model.name);
|
|
9
17
|
const pk = (0, generator_core_1.getPrimaryKey)(model);
|
|
10
18
|
const pkName = pk?.name ?? 'id';
|
|
11
|
-
const columns = (0, generator_core_1.getVisibleColumns)(model).slice(0, 4);
|
|
12
19
|
const isGrid = page.template_type === 'grid';
|
|
13
20
|
const routePath = page.slug.replace(/^\//, '');
|
|
14
21
|
const modelSlug = model.name.replace('nxf_', '').replace(/_/g, '-');
|
|
22
|
+
const selection = (0, generator_core_1.selectCardFields)(model, projectType);
|
|
23
|
+
const tableColumns = (0, generator_core_1.getVisibleColumns)(model).slice(0, 4);
|
|
24
|
+
// ── NAVIGATOR: tap (card-tap override) / button triggers ──────────────
|
|
25
|
+
// Default behavior (tap -> this model's own detail page) is unchanged
|
|
26
|
+
// UNLESS a route explicitly exists with trigger 'tap' AND
|
|
27
|
+
// attach_to 'card-tap' targeting a different, non-id-requiring page —
|
|
28
|
+
// in that case every card/row in this list navigates there instead.
|
|
29
|
+
// 'button' renders an extra button below the content; both skip
|
|
30
|
+
// rendering (with a comment) if the target page itself requires a
|
|
31
|
+
// record id we don't have.
|
|
32
|
+
const tapRoute = routes.find((r) => r.from_page_id === page.page_id && r.trigger === 'tap' && r.attach_to === 'card-tap');
|
|
33
|
+
const buttonRoute = routes.find((r) => r.from_page_id === page.page_id && r.trigger === 'button');
|
|
34
|
+
const tapTarget = tapRoute ? allPages.find((p) => p.page_id === tapRoute.to_page_id) : undefined;
|
|
35
|
+
const buttonTarget = buttonRoute ? allPages.find((p) => p.page_id === buttonRoute.to_page_id) : undefined;
|
|
36
|
+
const tapTargetUsable = !!tapTarget && tapTarget.template_type !== 'detail';
|
|
37
|
+
const buttonTargetUsable = !!buttonTarget && buttonTarget.template_type !== 'detail';
|
|
38
|
+
// Returns a complete JSX href attribute — either a static override, or
|
|
39
|
+
// the default per-item dynamic link, so callers just splice this in.
|
|
40
|
+
function detailHrefAttr() {
|
|
41
|
+
if (tapTargetUsable)
|
|
42
|
+
return `href="/${toRoutePath(tapTarget.slug)}"`;
|
|
43
|
+
return `href={\`/${routePath}/\${item.${pkName}}\`}`;
|
|
44
|
+
}
|
|
45
|
+
const buttonLabel = (buttonRoute?.label && buttonRoute.label.trim()) || 'Continue';
|
|
15
46
|
const lines = [];
|
|
16
47
|
lines.push(`// GENERATED BY UNDERPEAKS CODEGEN v1.0.0`);
|
|
17
48
|
lines.push(`// Page: ${page.name} — ${page.template_type}`);
|
|
18
49
|
lines.push(`// Presentation layer — generated once, you own this file.`);
|
|
19
50
|
lines.push(`// Regenerate: nxf generate nextjs --include-views`);
|
|
20
51
|
lines.push(`// WARNING: --include-views will overwrite your changes.`);
|
|
52
|
+
if (isGrid) {
|
|
53
|
+
lines.push(`// NOTE: the fields shown on each card are a BEST GUESS based on field`);
|
|
54
|
+
lines.push(`// names and this project's type — we might have picked the wrong ones.`);
|
|
55
|
+
lines.push(`// Feel free to swap which fields are shown below.`);
|
|
56
|
+
}
|
|
57
|
+
if (tapRoute && !tapTargetUsable) {
|
|
58
|
+
lines.push(`// NAVIGATOR: a card-tap route exists but its target ('${tapRoute.to_page_id}') requires`);
|
|
59
|
+
lines.push(`// a record id we don't have here — falling back to default tap-to-detail.`);
|
|
60
|
+
}
|
|
61
|
+
if (buttonRoute && !buttonTargetUsable) {
|
|
62
|
+
lines.push(`// NAVIGATOR: a button route exists but its target ('${buttonRoute.to_page_id}') requires`);
|
|
63
|
+
lines.push(`// a record id we don't have here — button not rendered.`);
|
|
64
|
+
}
|
|
21
65
|
lines.push(``);
|
|
22
66
|
lines.push(`import Link from 'next/link'`);
|
|
67
|
+
if (isGrid && selection.imageField) {
|
|
68
|
+
lines.push(`import Image from 'next/image'`);
|
|
69
|
+
}
|
|
23
70
|
lines.push(`import { notFound } from 'next/navigation'`);
|
|
24
71
|
lines.push(`import type { ${className} } from '../../../generated/types/${fileName}.types'`);
|
|
25
72
|
lines.push(``);
|
|
@@ -59,14 +106,40 @@ function generateListPage(page, model) {
|
|
|
59
106
|
lines.push(` {items.map((item) => (`);
|
|
60
107
|
lines.push(` <Link`);
|
|
61
108
|
lines.push(` key={item.${pkName}}`);
|
|
62
|
-
lines.push(`
|
|
63
|
-
lines.push(` className="block
|
|
109
|
+
lines.push(` ${detailHrefAttr()}`);
|
|
110
|
+
lines.push(` className="block bg-white border border-gray-200 rounded-xl hover:border-gray-400 transition overflow-hidden"`);
|
|
64
111
|
lines.push(` >`);
|
|
65
|
-
if (
|
|
66
|
-
lines.push(` <
|
|
112
|
+
if (selection.allFields) {
|
|
113
|
+
lines.push(` <div className="p-4">`);
|
|
114
|
+
for (const col of selection.allFields) {
|
|
115
|
+
lines.push(` <p className="text-sm text-gray-700 truncate">{item.${col.name}?.toString() ?? '—'}</p>`);
|
|
116
|
+
}
|
|
117
|
+
lines.push(` </div>`);
|
|
67
118
|
}
|
|
68
|
-
|
|
69
|
-
|
|
119
|
+
else {
|
|
120
|
+
if (selection.imageField) {
|
|
121
|
+
lines.push(` <div className="relative w-full aspect-video bg-gray-100">`);
|
|
122
|
+
lines.push(` {item.${selection.imageField.name} ? (`);
|
|
123
|
+
lines.push(` <Image`);
|
|
124
|
+
lines.push(` src={item.${selection.imageField.name} as string}`);
|
|
125
|
+
lines.push(` alt={item.${selection.titleField?.name ?? pkName}?.toString() ?? ''}`);
|
|
126
|
+
lines.push(` fill`);
|
|
127
|
+
lines.push(` className="object-cover"`);
|
|
128
|
+
lines.push(` />`);
|
|
129
|
+
lines.push(` ) : (`);
|
|
130
|
+
lines.push(` <div className="w-full h-full flex items-center justify-center text-gray-300 text-2xl">🖼</div>`);
|
|
131
|
+
lines.push(` )}`);
|
|
132
|
+
lines.push(` </div>`);
|
|
133
|
+
}
|
|
134
|
+
lines.push(` <div className="p-4">`);
|
|
135
|
+
lines.push(` <p className="font-semibold text-gray-900 truncate">{item.${selection.titleField?.name ?? pkName}?.toString() ?? '—'}</p>`);
|
|
136
|
+
for (const metaField of selection.metaFields) {
|
|
137
|
+
lines.push(` <p className="text-sm text-gray-500 mt-1 truncate">{item.${metaField.name}?.toString() ?? ''}</p>`);
|
|
138
|
+
}
|
|
139
|
+
if (selection.priceField) {
|
|
140
|
+
lines.push(` <p className="text-sm font-bold text-gray-900 mt-2">{item.${selection.priceField.name}?.toString() ?? ''}</p>`);
|
|
141
|
+
}
|
|
142
|
+
lines.push(` </div>`);
|
|
70
143
|
}
|
|
71
144
|
lines.push(` </Link>`);
|
|
72
145
|
lines.push(` ))}`);
|
|
@@ -84,7 +157,7 @@ function generateListPage(page, model) {
|
|
|
84
157
|
lines.push(` <table className="w-full text-sm">`);
|
|
85
158
|
lines.push(` <thead className="bg-gray-50 border-b border-gray-200">`);
|
|
86
159
|
lines.push(` <tr>`);
|
|
87
|
-
for (const col of
|
|
160
|
+
for (const col of tableColumns) {
|
|
88
161
|
const label = col.name.replaceAll('_', ' ');
|
|
89
162
|
lines.push(` <th className="px-4 py-3 text-left font-medium text-gray-600 capitalize">${label}</th>`);
|
|
90
163
|
}
|
|
@@ -94,12 +167,12 @@ function generateListPage(page, model) {
|
|
|
94
167
|
lines.push(` <tbody className="divide-y divide-gray-100">`);
|
|
95
168
|
lines.push(` {items.map((item) => (`);
|
|
96
169
|
lines.push(` <tr key={item.${pkName}} className="hover:bg-gray-50 transition">`);
|
|
97
|
-
for (const col of
|
|
170
|
+
for (const col of tableColumns) {
|
|
98
171
|
lines.push(` <td className="px-4 py-3 text-gray-700">{item.${col.name}?.toString() ?? '—'}</td>`);
|
|
99
172
|
}
|
|
100
173
|
lines.push(` <td className="px-4 py-3 text-right">`);
|
|
101
174
|
lines.push(` <Link`);
|
|
102
|
-
lines.push(`
|
|
175
|
+
lines.push(` ${detailHrefAttr()}`);
|
|
103
176
|
lines.push(` className="text-blue-600 hover:underline text-xs font-medium mr-3"`);
|
|
104
177
|
lines.push(` >`);
|
|
105
178
|
lines.push(` View`);
|
|
@@ -118,6 +191,18 @@ function generateListPage(page, model) {
|
|
|
118
191
|
lines.push(` </div>`);
|
|
119
192
|
lines.push(` )}`);
|
|
120
193
|
}
|
|
194
|
+
if (buttonTargetUsable) {
|
|
195
|
+
lines.push(``);
|
|
196
|
+
lines.push(` {/* NAVIGATOR: button-trigger route wired to '${buttonTarget.name}' */}`);
|
|
197
|
+
lines.push(` <div className="mt-6">`);
|
|
198
|
+
lines.push(` <Link`);
|
|
199
|
+
lines.push(` href="/${toRoutePath(buttonTarget.slug)}"`);
|
|
200
|
+
lines.push(` className="block w-full text-center px-4 py-3 bg-black text-white rounded-lg text-sm font-medium hover:bg-gray-800 transition"`);
|
|
201
|
+
lines.push(` >`);
|
|
202
|
+
lines.push(` ${buttonLabel}`);
|
|
203
|
+
lines.push(` </Link>`);
|
|
204
|
+
lines.push(` </div>`);
|
|
205
|
+
}
|
|
121
206
|
lines.push(` </div>`);
|
|
122
207
|
lines.push(` )`);
|
|
123
208
|
lines.push(`}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-list.js","sourceRoot":"","sources":["../../src/templates/page-list.ts"],"names":[],"mappings":";AAAA,gFAAgF;;
|
|
1
|
+
{"version":3,"file":"page-list.js","sourceRoot":"","sources":["../../src/templates/page-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { PageDef, GeneratedFile } from '@underpeaks/generator-core';
|
|
2
|
-
export declare function generateOtpEntryPage(page: PageDef): GeneratedFile;
|
|
1
|
+
import type { PageDef, PageRoute, GeneratedFile } from '@underpeaks/generator-core';
|
|
2
|
+
export declare function generateOtpEntryPage(page: PageDef, routes?: PageRoute[], allPages?: PageDef[]): GeneratedFile;
|
|
3
3
|
//# sourceMappingURL=page-otp-entry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-otp-entry.d.ts","sourceRoot":"","sources":["../../src/templates/page-otp-entry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"page-otp-entry.d.ts","sourceRoot":"","sources":["../../src/templates/page-otp-entry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAMnF,wBAAgB,oBAAoB,CAClC,IAAI,EAAM,OAAO,EAKjB,MAAM,GAAI,SAAS,EAAO,EAC1B,QAAQ,GAAE,OAAO,EAAS,GACzB,aAAa,CA+Ff"}
|
|
@@ -2,13 +2,34 @@
|
|
|
2
2
|
// File: underpeaks_codegen/packages/generator-nextjs/src/templates/page-otp-entry.ts
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.generateOtpEntryPage = generateOtpEntryPage;
|
|
5
|
-
function
|
|
5
|
+
function toRoutePath(slug) {
|
|
6
|
+
return slug.replace(/^\//, '');
|
|
7
|
+
}
|
|
8
|
+
function generateOtpEntryPage(page,
|
|
9
|
+
// NAVIGATOR: post-verify destination was hardcoded to '/' — now overridable
|
|
10
|
+
// via a button-trigger route with attach_to: 'primary-action' (the only
|
|
11
|
+
// attach_to value that makes sense for a single verify action). Falls back
|
|
12
|
+
// to '/' if no such route is configured.
|
|
13
|
+
routes = [], allPages = []) {
|
|
6
14
|
const routePath = page.slug.replace(/^\//, '');
|
|
15
|
+
const primaryRoute = routes.find((r) => r.from_page_id === page.page_id && r.trigger === 'button' && r.attach_to === 'primary-action');
|
|
16
|
+
const primaryTarget = primaryRoute ? allPages.find((p) => p.page_id === primaryRoute.to_page_id) : undefined;
|
|
17
|
+
const redirectPath = primaryTarget ? `/${toRoutePath(primaryTarget.slug)}` : '/';
|
|
7
18
|
const lines = [];
|
|
8
19
|
lines.push(`// GENERATED BY UNDERPEAKS CODEGEN v1.0.0`);
|
|
9
20
|
lines.push(`// Page: ${page.name} — otp_entry`);
|
|
10
21
|
lines.push(`// Presentation layer — generated once, you own this file.`);
|
|
11
22
|
lines.push(`// Regenerate: nxf generate nextjs --include-views`);
|
|
23
|
+
if (primaryRoute && !primaryTarget) {
|
|
24
|
+
lines.push(`// NAVIGATOR: a primary-action route exists but its target page could not be`);
|
|
25
|
+
lines.push(`// resolved — falling back to '/' after verify.`);
|
|
26
|
+
}
|
|
27
|
+
else if (primaryTarget) {
|
|
28
|
+
lines.push(`// NAVIGATOR: primary-action route wired to '${primaryTarget.name}'`);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
lines.push(`// NAVIGATOR: no primary-action route configured — falling back to '/' after verify.`);
|
|
32
|
+
}
|
|
12
33
|
lines.push(``);
|
|
13
34
|
lines.push(`'use client'`);
|
|
14
35
|
lines.push(`import { useState, useRef } from 'react'`);
|
|
@@ -44,7 +65,7 @@ function generateOtpEntryPage(page) {
|
|
|
44
65
|
lines.push(` body: JSON.stringify({ phone, otp: code }),`);
|
|
45
66
|
lines.push(` })`);
|
|
46
67
|
lines.push(` if (!res.ok) throw new Error('Invalid OTP')`);
|
|
47
|
-
lines.push(` router.push('
|
|
68
|
+
lines.push(` router.push('${redirectPath}')`);
|
|
48
69
|
lines.push(` } catch (err: any) {`);
|
|
49
70
|
lines.push(` setError(err.message)`);
|
|
50
71
|
lines.push(` setOtp(Array(6).fill(''))`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-otp-entry.js","sourceRoot":"","sources":["../../src/templates/page-otp-entry.ts"],"names":[],"mappings":";AAAA,qFAAqF;;
|
|
1
|
+
{"version":3,"file":"page-otp-entry.js","sourceRoot":"","sources":["../../src/templates/page-otp-entry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { PageDef, GeneratedFile } from '@underpeaks/generator-core';
|
|
2
|
-
export declare function generateOtpRequestPage(page: PageDef): GeneratedFile;
|
|
1
|
+
import type { PageDef, PageRoute, GeneratedFile } from '@underpeaks/generator-core';
|
|
2
|
+
export declare function generateOtpRequestPage(page: PageDef, routes?: PageRoute[], allPages?: PageDef[]): GeneratedFile;
|
|
3
3
|
//# sourceMappingURL=page-otp-request.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-otp-request.d.ts","sourceRoot":"","sources":["../../src/templates/page-otp-request.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"page-otp-request.d.ts","sourceRoot":"","sources":["../../src/templates/page-otp-request.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAUnF,wBAAgB,sBAAsB,CACpC,IAAI,EAAM,OAAO,EACjB,MAAM,GAAI,SAAS,EAAO,EAC1B,QAAQ,GAAE,OAAO,EAAS,GACzB,aAAa,CA8Ef"}
|
|
@@ -2,13 +2,29 @@
|
|
|
2
2
|
// File: underpeaks_codegen/packages/generator-nextjs/src/templates/page-otp-request.ts
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.generateOtpRequestPage = generateOtpRequestPage;
|
|
5
|
-
function
|
|
5
|
+
function toRoutePath(slug) {
|
|
6
|
+
return slug.replace(/^\//, '');
|
|
7
|
+
}
|
|
8
|
+
// FIX: redirect to the OTP entry screen hardcoded '/otp-entry' — no
|
|
9
|
+
// guarantee a page exists at that exact slug. Only overridden by an
|
|
10
|
+
// explicit 'button' trigger route on this page — no template-type
|
|
11
|
+
// guessing. Without one, the old hardcoded literal stays, flagged below.
|
|
12
|
+
function generateOtpRequestPage(page, routes = [], allPages = []) {
|
|
6
13
|
const routePath = page.slug.replace(/^\//, '');
|
|
14
|
+
const buttonRoute = routes.find((r) => r.from_page_id === page.page_id && r.trigger === 'button');
|
|
15
|
+
const buttonTarget = buttonRoute ? allPages.find((p) => p.page_id === buttonRoute.to_page_id) : undefined;
|
|
16
|
+
const buttonTargetUsable = !!buttonTarget && buttonTarget.template_type !== 'detail';
|
|
17
|
+
const otpEntryRoute = buttonTargetUsable ? `/${toRoutePath(buttonTarget.slug)}` : '/otp-entry';
|
|
7
18
|
const lines = [];
|
|
8
19
|
lines.push(`// GENERATED BY UNDERPEAKS CODEGEN v1.0.0`);
|
|
9
20
|
lines.push(`// Page: ${page.name} — otp_request`);
|
|
10
21
|
lines.push(`// Presentation layer — generated once, you own this file.`);
|
|
11
22
|
lines.push(`// Regenerate: nxf generate nextjs --include-views`);
|
|
23
|
+
if (!buttonTargetUsable) {
|
|
24
|
+
lines.push(`// NOTE: falls back to hardcoded '/otp-entry' — there's no guarantee a page`);
|
|
25
|
+
lines.push(`// exists at that path. Add a 'button' trigger route on this page in`);
|
|
26
|
+
lines.push(`// Navigator to point it at the real OTP entry page.`);
|
|
27
|
+
}
|
|
12
28
|
lines.push(``);
|
|
13
29
|
lines.push(`'use client'`);
|
|
14
30
|
lines.push(`import { useState } from 'react'`);
|
|
@@ -31,7 +47,7 @@ function generateOtpRequestPage(page) {
|
|
|
31
47
|
lines.push(` body: JSON.stringify({ phone }),`);
|
|
32
48
|
lines.push(` })`);
|
|
33
49
|
lines.push(` if (!res.ok) throw new Error('Failed to send OTP')`);
|
|
34
|
-
lines.push(` router.push(
|
|
50
|
+
lines.push(` router.push(\`${otpEntryRoute}?phone=\${encodeURIComponent(phone)}\`)`);
|
|
35
51
|
lines.push(` } catch (err: any) {`);
|
|
36
52
|
lines.push(` setError(err.message)`);
|
|
37
53
|
lines.push(` } finally {`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-otp-request.js","sourceRoot":"","sources":["../../src/templates/page-otp-request.ts"],"names":[],"mappings":";AAAA,uFAAuF;;
|
|
1
|
+
{"version":3,"file":"page-otp-request.js","sourceRoot":"","sources":["../../src/templates/page-otp-request.ts"],"names":[],"mappings":";AAAA,uFAAuF;;AAYvF,wDAkFC;AA1FD,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AAChC,CAAC;AAED,oEAAoE;AACpE,oEAAoE;AACpE,kEAAkE;AAClE,yEAAyE;AACzE,SAAgB,sBAAsB,CACpC,IAAiB,EACjB,SAAwB,EAAE,EAC1B,WAAwB,EAAE;IAE1B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAE9C,MAAM,WAAW,GAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAA;IAClG,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACzG,MAAM,kBAAkB,GAAG,CAAC,CAAC,YAAY,IAAI,YAAY,CAAC,aAAa,KAAK,QAAQ,CAAA;IAEpF,MAAM,aAAa,GAAG,kBAAkB,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,YAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAA;IAE/F,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAA;IACvD,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,gBAAgB,CAAC,CAAA;IACjD,KAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAA;IACxE,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAA;IAChE,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAA;QACzF,KAAK,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAA;QAClF,KAAK,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAA;IACpE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC1B,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAA;IAC/C,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAA;IACzD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAA;IACxD,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAA;IAC7D,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAA;IAC9D,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAA;IACjE,KAAK,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAA;IAC/E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAA;IACjE,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;IACpC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;IAClC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;IAChC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACvB,KAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAA;IACtE,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;IACtC,KAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAA;IACtE,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAA;IACzD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACtB,KAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAA;IACtE,KAAK,CAAC,IAAI,CAAC,uBAAuB,aAAa,yCAAyC,CAAC,CAAA;IACzF,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;IACtC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;IACzC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;IAC7B,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA;IACrC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACnB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACxB,KAAK,CAAC,IAAI,CAAC,qFAAqF,CAAC,CAAA;IACjG,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAA;IACjE,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAA;IAC7D,KAAK,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAA;IAC/E,KAAK,CAAC,IAAI,CAAC,sGAAsG,CAAC,CAAA;IAClH,KAAK,CAAC,IAAI,CAAC,iIAAiI,CAAC,CAAA;IAC7I,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAA;IAC7D,KAAK,CAAC,IAAI,CAAC,uFAAuF,CAAC,CAAA;IACnG,KAAK,CAAC,IAAI,CAAC,iGAAiG,CAAC,CAAA;IAC7G,KAAK,CAAC,IAAI,CAAC,mIAAmI,CAAC,CAAA;IAC/I,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IAC9B,KAAK,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAA;IAClF,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAA;IAChE,KAAK,CAAC,IAAI,CAAC,qIAAqI,CAAC,CAAA;IACjJ,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAA;IAC/D,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;IACjC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;IAC7B,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC1B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACxB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEf,OAAO;QACL,IAAI,EAAM,sBAAsB,SAAS,WAAW;QACpD,OAAO,EAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,QAAQ,EAAE,cAAc;KACzB,CAAA;AACH,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { Model, PageDef, GeneratedFile } from '@underpeaks/generator-core';
|
|
2
|
-
export declare function generateProfilePage(page: PageDef, model?: Model): GeneratedFile;
|
|
1
|
+
import type { Model, PageDef, PageRoute, GeneratedFile } from '@underpeaks/generator-core';
|
|
2
|
+
export declare function generateProfilePage(page: PageDef, model?: Model, routes?: PageRoute[], allPages?: PageDef[]): GeneratedFile;
|
|
3
3
|
//# sourceMappingURL=page-profile.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-profile.d.ts","sourceRoot":"","sources":["../../src/templates/page-profile.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"page-profile.d.ts","sourceRoot":"","sources":["../../src/templates/page-profile.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAO1F,wBAAgB,mBAAmB,CACjC,IAAI,EAAM,OAAO,EACjB,KAAK,CAAC,EAAI,KAAK,EAGf,MAAM,GAAI,SAAS,EAAO,EAC1B,QAAQ,GAAE,OAAO,EAAS,GACzB,aAAa,CAkGf"}
|
|
@@ -3,18 +3,39 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.generateProfilePage = generateProfilePage;
|
|
5
5
|
const generator_core_1 = require("@underpeaks/generator-core");
|
|
6
|
-
function
|
|
6
|
+
function toRoutePath(slug) {
|
|
7
|
+
return slug.replace(/^\//, '');
|
|
8
|
+
}
|
|
9
|
+
function generateProfilePage(page, model,
|
|
10
|
+
// NAVIGATOR: functionally a detail page — same back/button pattern as
|
|
11
|
+
// page-detail.ts.
|
|
12
|
+
routes = [], allPages = []) {
|
|
7
13
|
const routePath = page.slug.replace(/^\//, '');
|
|
8
14
|
const className = model ? (0, generator_core_1.modelToClassName)(model.name) : 'Item';
|
|
9
15
|
const fileName = model ? (0, generator_core_1.modelToFileName)(model.name) : 'item';
|
|
10
16
|
const pk = model ? (0, generator_core_1.getPrimaryKey)(model) : null;
|
|
11
17
|
const pkName = pk?.name ?? 'id';
|
|
12
18
|
const columns = model ? (0, generator_core_1.getVisibleColumns)(model) : [];
|
|
19
|
+
const backRoute = routes.find((r) => r.from_page_id === page.page_id && r.trigger === 'back');
|
|
20
|
+
const buttonRoute = routes.find((r) => r.from_page_id === page.page_id && r.trigger === 'button');
|
|
21
|
+
const backTarget = backRoute ? allPages.find((p) => p.page_id === backRoute.to_page_id) : undefined;
|
|
22
|
+
const buttonTarget = buttonRoute ? allPages.find((p) => p.page_id === buttonRoute.to_page_id) : undefined;
|
|
23
|
+
const backTargetUsable = !!backTarget && backTarget.template_type !== 'detail' && backTarget.template_type !== 'profile';
|
|
24
|
+
const buttonTargetUsable = !!buttonTarget && buttonTarget.template_type !== 'detail' && buttonTarget.template_type !== 'profile';
|
|
25
|
+
const buttonLabel = (buttonRoute?.label && buttonRoute.label.trim()) || 'Continue';
|
|
13
26
|
const lines = [];
|
|
14
27
|
lines.push(`// GENERATED BY UNDERPEAKS CODEGEN v1.0.0`);
|
|
15
28
|
lines.push(`// Page: ${page.name} — profile`);
|
|
16
29
|
lines.push(`// Presentation layer — generated once, you own this file.`);
|
|
17
30
|
lines.push(`// Regenerate: nxf generate nextjs --include-views`);
|
|
31
|
+
if (backRoute && !backTargetUsable) {
|
|
32
|
+
lines.push(`// NAVIGATOR: a 'back' route exists but its target ('${backRoute.to_page_id}') requires`);
|
|
33
|
+
lines.push(`// a record id we don't have here — no back link rendered.`);
|
|
34
|
+
}
|
|
35
|
+
if (buttonRoute && !buttonTargetUsable) {
|
|
36
|
+
lines.push(`// NAVIGATOR: a 'button' route exists but its target ('${buttonRoute.to_page_id}') requires`);
|
|
37
|
+
lines.push(`// a record id we don't have here — button not rendered.`);
|
|
38
|
+
}
|
|
18
39
|
lines.push(``);
|
|
19
40
|
lines.push(`import type { ${className} } from '../../../../generated/types/${fileName}.types'`);
|
|
20
41
|
lines.push(`import { notFound } from 'next/navigation'`);
|
|
@@ -35,6 +56,12 @@ function generateProfilePage(page, model) {
|
|
|
35
56
|
lines.push(` if (!item) notFound()`);
|
|
36
57
|
lines.push(` return (`);
|
|
37
58
|
lines.push(` <div className="container mx-auto px-4 py-8 max-w-2xl">`);
|
|
59
|
+
if (backTargetUsable) {
|
|
60
|
+
lines.push(` {/* NAVIGATOR: back-trigger route wired to '${backTarget.name}' */}`);
|
|
61
|
+
lines.push(` <Link href="/${toRoutePath(backTarget.slug)}" className="text-sm text-gray-500 hover:text-gray-900 inline-block mb-4">`);
|
|
62
|
+
lines.push(` ← Back`);
|
|
63
|
+
lines.push(` </Link>`);
|
|
64
|
+
}
|
|
38
65
|
lines.push(` <div className="bg-white border border-gray-200 rounded-xl overflow-hidden">`);
|
|
39
66
|
lines.push(` <div className="h-32 bg-gray-100" />`);
|
|
40
67
|
lines.push(` <div className="px-6 pb-6">`);
|
|
@@ -56,6 +83,15 @@ function generateProfilePage(page, model) {
|
|
|
56
83
|
lines.push(` </div>`);
|
|
57
84
|
lines.push(` </div>`);
|
|
58
85
|
lines.push(` </div>`);
|
|
86
|
+
if (buttonTargetUsable) {
|
|
87
|
+
lines.push(` {/* NAVIGATOR: button-trigger route wired to '${buttonTarget.name}' */}`);
|
|
88
|
+
lines.push(` <div className="mt-6">`);
|
|
89
|
+
lines.push(` <Link href="/${toRoutePath(buttonTarget.slug)}"`);
|
|
90
|
+
lines.push(` className="block text-center px-6 py-2.5 bg-black text-white rounded-lg text-sm font-medium hover:bg-gray-800 transition">`);
|
|
91
|
+
lines.push(` ${buttonLabel}`);
|
|
92
|
+
lines.push(` </Link>`);
|
|
93
|
+
lines.push(` </div>`);
|
|
94
|
+
}
|
|
59
95
|
lines.push(` </div>`);
|
|
60
96
|
lines.push(` )`);
|
|
61
97
|
lines.push(`}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-profile.js","sourceRoot":"","sources":["../../src/templates/page-profile.ts"],"names":[],"mappings":";AAAA,mFAAmF;;
|
|
1
|
+
{"version":3,"file":"page-profile.js","sourceRoot":"","sources":["../../src/templates/page-profile.ts"],"names":[],"mappings":";AAAA,mFAAmF;;AASnF,kDAyGC;AA/GD,+DAAgH;AAEhH,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AAChC,CAAC;AAED,SAAgB,mBAAmB,CACjC,IAAiB,EACjB,KAAe;AACf,sEAAsE;AACtE,kBAAkB;AAClB,SAAwB,EAAE,EAC1B,WAAwB,EAAE;IAE1B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,IAAA,iCAAgB,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IAC/D,MAAM,QAAQ,GAAI,KAAK,CAAC,CAAC,CAAC,IAAA,gCAAe,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IAC9D,MAAM,EAAE,GAAU,KAAK,CAAC,CAAC,CAAC,IAAA,8BAAa,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACrD,MAAM,MAAM,GAAM,EAAE,EAAE,IAAI,IAAI,IAAI,CAAA;IAClC,MAAM,OAAO,GAAK,KAAK,CAAC,CAAC,CAAC,IAAA,kCAAiB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAEvD,MAAM,SAAS,GAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,CAAA;IAC/F,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAA;IAEjG,MAAM,UAAU,GAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACrG,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAEzG,MAAM,gBAAgB,GAAK,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC,aAAa,KAAK,QAAQ,IAAI,UAAU,CAAC,aAAa,KAAK,SAAS,CAAA;IAC1H,MAAM,kBAAkB,GAAG,CAAC,CAAC,YAAY,IAAI,YAAY,CAAC,aAAa,KAAK,QAAQ,IAAI,YAAY,CAAC,aAAa,KAAK,SAAS,CAAA;IAEhI,MAAM,WAAW,GAAG,CAAC,WAAW,EAAE,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,UAAU,CAAA;IAElF,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAA;IACvD,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,YAAY,CAAC,CAAA;IAC7C,KAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAA;IACxE,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAA;IAChE,IAAI,SAAS,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,wDAAwD,SAAS,CAAC,UAAU,aAAa,CAAC,CAAA;QACrG,KAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAA;IAC1E,CAAC;IACD,IAAI,WAAW,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,0DAA0D,WAAW,CAAC,UAAU,aAAa,CAAC,CAAA;QACzG,KAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAA;IACxE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,iBAAiB,SAAS,wCAAwC,QAAQ,SAAS,CAAC,CAAA;IAC/F,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAA;IACxD,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAA;IAClD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,+CAA+C,SAAS,YAAY,CAAC,CAAA;IAChF,KAAK,CAAC,IAAI,CAAC,uEAAuE,QAAQ,mCAAmC,CAAC,CAAA;IAC9H,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAA;IACnD,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAA;IAC7C,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;IAChC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACf,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,uCAAuC,MAAM,eAAe,CAAC,CAAA;IACxE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAA;IAC5E,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,mBAAmB,CAAC,CAAA;IAClD,KAAK,CAAC,IAAI,CAAC,gCAAgC,MAAM,GAAG,CAAC,CAAA;IACrD,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA;IACrC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACxB,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAA;IACzE,IAAI,gBAAgB,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,qDAAqD,UAAW,CAAC,IAAI,OAAO,CAAC,CAAA;QACxF,KAAK,CAAC,IAAI,CAAC,sBAAsB,WAAW,CAAC,UAAW,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAA;QAC3I,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAC5B,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IAC7B,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,oFAAoF,CAAC,CAAA;IAChG,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAA;IAC1D,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAA;IACjD,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAA;IACrD,KAAK,CAAC,IAAI,CAAC,0IAA0I,CAAC,CAAA;IACtJ,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IAC9B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAC3C,KAAK,CAAC,IAAI,CAAC,6FAA6F,CAAC,CAAA;QACzG,KAAK,CAAC,IAAI,CAAC,kEAAkE,KAAK,SAAS,CAAC,CAAA;QAC5F,KAAK,CAAC,IAAI,CAAC,2DAA2D,GAAG,CAAC,IAAI,6BAA6B,CAAC,CAAA;QAC5G,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IAChC,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;IAC9C,KAAK,CAAC,IAAI,CAAC,8BAA8B,SAAS,YAAY,MAAM,WAAW,CAAC,CAAA;IAChF,KAAK,CAAC,IAAI,CAAC,wHAAwH,CAAC,CAAA;IACpI,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;IACxC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;IACjC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IAC9B,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;IAC5B,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC1B,IAAI,kBAAkB,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,uDAAuD,YAAa,CAAC,IAAI,OAAO,CAAC,CAAA;QAC5F,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;QAC1C,KAAK,CAAC,IAAI,CAAC,wBAAwB,WAAW,CAAC,YAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACtE,KAAK,CAAC,IAAI,CAAC,sIAAsI,CAAC,CAAA;QAClJ,KAAK,CAAC,IAAI,CAAC,aAAa,WAAW,EAAE,CAAC,CAAA;QACtC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QAC7B,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC5B,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACxB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEf,OAAO;QACL,IAAI,EAAM,sBAAsB,SAAS,KAAK,MAAM,YAAY;QAChE,OAAO,EAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,QAAQ,EAAE,cAAc;KACzB,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-reset-password.d.ts","sourceRoot":"","sources":["../../src/templates/page-reset-password.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAWnF,wBAAgB,yBAAyB,CACvC,IAAI,EAAM,OAAO,EACjB,MAAM,GAAI,SAAS,EAAO,EAC1B,QAAQ,GAAE,OAAO,EAAS,GACzB,aAAa,CAiHf"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// File: underpeaks_codegen/packages/generator-nextjs/src/templates/page-reset-password.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.generateResetPasswordPage = generateResetPasswordPage;
|
|
5
|
+
function toRoutePath(slug) {
|
|
6
|
+
return slug.replace(/^\//, '');
|
|
7
|
+
}
|
|
8
|
+
// NEW FILE — this template_type had no Next.js handler at all before
|
|
9
|
+
// (unlike Flutter, which has a real reset-password page). Post-reset
|
|
10
|
+
// redirect is only set by an explicit 'button' trigger route on this
|
|
11
|
+
// page — no template-type guessing. Without one, falls back to a
|
|
12
|
+
// hardcoded '/sign-in' literal, flagged below.
|
|
13
|
+
function generateResetPasswordPage(page, routes = [], allPages = []) {
|
|
14
|
+
const routePath = page.slug.replace(/^\//, '');
|
|
15
|
+
const buttonRoute = routes.find((r) => r.from_page_id === page.page_id && r.trigger === 'button');
|
|
16
|
+
const buttonTarget = buttonRoute ? allPages.find((p) => p.page_id === buttonRoute.to_page_id) : undefined;
|
|
17
|
+
const buttonTargetUsable = !!buttonTarget && buttonTarget.template_type !== 'detail';
|
|
18
|
+
const signInRoute = buttonTargetUsable ? `/${toRoutePath(buttonTarget.slug)}` : '/sign-in';
|
|
19
|
+
const lines = [];
|
|
20
|
+
lines.push(`'use client'`);
|
|
21
|
+
lines.push(``);
|
|
22
|
+
lines.push(`// GENERATED BY UNDERPEAKS CODEGEN v1.0.0`);
|
|
23
|
+
lines.push(`// Page: Reset Password`);
|
|
24
|
+
lines.push(`// Presentation layer — generated once, you own this file.`);
|
|
25
|
+
if (!buttonTargetUsable) {
|
|
26
|
+
lines.push(`// NOTE: "Back to Sign In" falls back to hardcoded '/sign-in' — there's no`);
|
|
27
|
+
lines.push(`// guarantee a page exists at that path. Add a 'button' trigger route on`);
|
|
28
|
+
lines.push(`// this page in Navigator to point it somewhere real.`);
|
|
29
|
+
}
|
|
30
|
+
lines.push(``);
|
|
31
|
+
lines.push(`import { useState } from 'react'`);
|
|
32
|
+
lines.push(`import { useRouter,`);
|
|
33
|
+
lines.push(` useSearchParams } from 'next/navigation'`);
|
|
34
|
+
lines.push(`import Link from 'next/link'`);
|
|
35
|
+
lines.push(`import { validatePassword } from '@/lib/validators'`);
|
|
36
|
+
lines.push(``);
|
|
37
|
+
lines.push(`export default function ResetPasswordPage() {`);
|
|
38
|
+
lines.push(` const router = useRouter()`);
|
|
39
|
+
lines.push(` const searchParams = useSearchParams()`);
|
|
40
|
+
lines.push(` const token = searchParams.get('token') ?? ''`);
|
|
41
|
+
lines.push(` const [password, setPassword] = useState('')`);
|
|
42
|
+
lines.push(` const [confirm, setConfirm] = useState('')`);
|
|
43
|
+
lines.push(` const [loading, setLoading] = useState(false)`);
|
|
44
|
+
lines.push(` const [done, setDone] = useState(false)`);
|
|
45
|
+
lines.push(` const [error, setError] = useState<string | null>(null)`);
|
|
46
|
+
lines.push(``);
|
|
47
|
+
lines.push(` async function handleSubmit(e: React.FormEvent) {`);
|
|
48
|
+
lines.push(` e.preventDefault()`);
|
|
49
|
+
lines.push(``);
|
|
50
|
+
lines.push(` const passError = validatePassword(password)`);
|
|
51
|
+
lines.push(` if (passError) { setError(passError); return }`);
|
|
52
|
+
lines.push(` if (password !== confirm) { setError('Passwords do not match'); return }`);
|
|
53
|
+
lines.push(``);
|
|
54
|
+
lines.push(` setLoading(true)`);
|
|
55
|
+
lines.push(` setError(null)`);
|
|
56
|
+
lines.push(` try {`);
|
|
57
|
+
lines.push(` const res = await fetch('/api/auth/reset-password', {`);
|
|
58
|
+
lines.push(` method: 'POST',`);
|
|
59
|
+
lines.push(` headers: { 'Content-Type': 'application/json' },`);
|
|
60
|
+
lines.push(` body: JSON.stringify({ token, password }),`);
|
|
61
|
+
lines.push(` })`);
|
|
62
|
+
lines.push(` if (!res.ok) {`);
|
|
63
|
+
lines.push(` const data = await res.json()`);
|
|
64
|
+
lines.push(` throw new Error(data.error ?? 'Reset failed')`);
|
|
65
|
+
lines.push(` }`);
|
|
66
|
+
lines.push(` setDone(true)`);
|
|
67
|
+
lines.push(` setTimeout(() => router.push('${signInRoute}'), 2000)`);
|
|
68
|
+
lines.push(` } catch (err: any) {`);
|
|
69
|
+
lines.push(` setError(err.message)`);
|
|
70
|
+
lines.push(` } finally {`);
|
|
71
|
+
lines.push(` setLoading(false)`);
|
|
72
|
+
lines.push(` }`);
|
|
73
|
+
lines.push(` }`);
|
|
74
|
+
lines.push(``);
|
|
75
|
+
lines.push(` if (done) {`);
|
|
76
|
+
lines.push(` return (`);
|
|
77
|
+
lines.push(` <div className="min-h-screen flex items-center justify-center bg-gray-50">`);
|
|
78
|
+
lines.push(` <div className="text-center">`);
|
|
79
|
+
lines.push(` <div className="text-5xl mb-4">✅</div>`);
|
|
80
|
+
lines.push(` <h1 className="text-2xl font-bold mb-2">Password reset!</h1>`);
|
|
81
|
+
lines.push(` <p className="text-gray-500">Redirecting to sign in...</p>`);
|
|
82
|
+
lines.push(` </div>`);
|
|
83
|
+
lines.push(` </div>`);
|
|
84
|
+
lines.push(` )`);
|
|
85
|
+
lines.push(` }`);
|
|
86
|
+
lines.push(``);
|
|
87
|
+
lines.push(` return (`);
|
|
88
|
+
lines.push(` <div className="min-h-screen flex items-center justify-center bg-gray-50 px-4">`);
|
|
89
|
+
lines.push(` <div className="w-full max-w-sm">`);
|
|
90
|
+
lines.push(` <h1 className="text-2xl font-bold text-center mb-8">New Password</h1>`);
|
|
91
|
+
lines.push(` <form onSubmit={handleSubmit} className="bg-white border border-gray-200 rounded-xl p-6 flex flex-col gap-4">`);
|
|
92
|
+
lines.push(` <div className="flex flex-col gap-1">`);
|
|
93
|
+
lines.push(` <label className="text-sm font-medium text-gray-700">New Password</label>`);
|
|
94
|
+
lines.push(` <input type="password" value={password} onChange={(e) => setPassword(e.target.value)} required minLength={8}`);
|
|
95
|
+
lines.push(` className="px-3 py-2 border border-gray-200 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-black" />`);
|
|
96
|
+
lines.push(` <p className="text-xs text-gray-500">Min 8 chars, upper + lower, number, symbol</p>`);
|
|
97
|
+
lines.push(` </div>`);
|
|
98
|
+
lines.push(` <div className="flex flex-col gap-1">`);
|
|
99
|
+
lines.push(` <label className="text-sm font-medium text-gray-700">Confirm Password</label>`);
|
|
100
|
+
lines.push(` <input type="password" value={confirm} onChange={(e) => setConfirm(e.target.value)} required`);
|
|
101
|
+
lines.push(` className="px-3 py-2 border border-gray-200 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-black" />`);
|
|
102
|
+
lines.push(` </div>`);
|
|
103
|
+
lines.push(` {error && <p className="text-sm text-red-500">{error}</p>}`);
|
|
104
|
+
lines.push(` <button type="submit" disabled={loading}`);
|
|
105
|
+
lines.push(` className="py-2.5 bg-black text-white rounded-lg text-sm font-medium hover:bg-gray-800 disabled:opacity-40 transition">`);
|
|
106
|
+
lines.push(` {loading ? 'Resetting...' : 'Reset Password'}`);
|
|
107
|
+
lines.push(` </button>`);
|
|
108
|
+
lines.push(` <Link href="${signInRoute}" className="text-sm text-center text-gray-500 hover:text-gray-900">`);
|
|
109
|
+
lines.push(` Back to Sign In`);
|
|
110
|
+
lines.push(` </Link>`);
|
|
111
|
+
lines.push(` </form>`);
|
|
112
|
+
lines.push(` </div>`);
|
|
113
|
+
lines.push(` </div>`);
|
|
114
|
+
lines.push(` )`);
|
|
115
|
+
lines.push(`}`);
|
|
116
|
+
return {
|
|
117
|
+
path: `app/(presentation)/${routePath}/page.tsx`,
|
|
118
|
+
content: lines.join('\n'),
|
|
119
|
+
category: 'customizable',
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=page-reset-password.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-reset-password.js","sourceRoot":"","sources":["../../src/templates/page-reset-password.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { Model, PageDef, GeneratedFile } from '@underpeaks/generator-core';
|
|
2
|
-
export declare function generateSearchPage(page: PageDef, model?: Model): GeneratedFile;
|
|
1
|
+
import type { Model, PageDef, PageRoute, GeneratedFile } from '@underpeaks/generator-core';
|
|
2
|
+
export declare function generateSearchPage(page: PageDef, model?: Model, routes?: PageRoute[], allPages?: PageDef[]): GeneratedFile;
|
|
3
3
|
//# sourceMappingURL=page-search.d.ts.map
|