create-nextblock 0.16.3 → 0.17.0
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/CLAUDE.md +22 -0
- package/docker-template/.env.docker.example +69 -69
- package/docker-template/docker/db/init/99-jwt.sql +6 -6
- package/docker-template/docker/db/init/99-roles.sql +25 -25
- package/docker-template/docker/kong/kong.yml +112 -112
- package/docker-template/scripts/docker-setup.mjs +310 -310
- package/package.json +1 -1
- package/templates/nextblock-template/.browserslistrc +11 -11
- package/templates/nextblock-template/.swcrc +30 -30
- package/templates/nextblock-template/CLAUDE.md +26 -0
- package/templates/nextblock-template/app/(auth-pages)/sign-up/page.tsx +46 -46
- package/templates/nextblock-template/app/(auth-pages)/two-factor/page.tsx +51 -51
- package/templates/nextblock-template/app/.well-known/ucp/route.ts +16 -16
- package/templates/nextblock-template/app/actions/consent.ts +57 -57
- package/templates/nextblock-template/app/actions/twoFactorEmail.ts +22 -22
- package/templates/nextblock-template/app/api/ai/cortex/build-widget/route.ts +153 -153
- package/templates/nextblock-template/app/api/ai/generate-blocks/route.ts +96 -96
- package/templates/nextblock-template/app/api/brand/email-logo/route.ts +48 -48
- package/templates/nextblock-template/app/api/checkout/freemius/sync/route.ts +29 -29
- package/templates/nextblock-template/app/api/cms/check-updates/route.ts +44 -44
- package/templates/nextblock-template/app/api/cms/full-backup/export/route.ts +33 -33
- package/templates/nextblock-template/app/api/cms/full-backup/restore/route.ts +63 -63
- package/templates/nextblock-template/app/api/cron/reset-sandbox/route.ts +270 -205
- package/templates/nextblock-template/app/api/cron/reset-sandbox/sandboxResetSql.ts +10388 -9315
- package/templates/nextblock-template/app/api/cron/sync-currencies/route.ts +39 -39
- package/templates/nextblock-template/app/api/custom-blocks/db-relations/route.ts +92 -92
- package/templates/nextblock-template/app/api/custom-blocks/editor-definitions/route.ts +43 -43
- package/templates/nextblock-template/app/api/media/library/route.ts +69 -69
- package/templates/nextblock-template/app/api/media/r2-presigned/route.ts +53 -53
- package/templates/nextblock-template/app/api/visual-editing/block-draft/route.ts +47 -47
- package/templates/nextblock-template/app/api/visual-editing/product-draft/route.ts +47 -47
- package/templates/nextblock-template/app/article/[slug]/PostClientContent.tsx +442 -441
- package/templates/nextblock-template/app/article/[slug]/page.utils.ts +4 -1
- package/templates/nextblock-template/app/checkout/UcpCartHydrator.tsx +20 -20
- package/templates/nextblock-template/app/cms/blocks/components/BlockEditorModal.tsx +241 -241
- package/templates/nextblock-template/app/cms/blocks/components/CustomBlockEditorPreview.tsx +160 -160
- package/templates/nextblock-template/app/cms/blocks/editors/DynamicCustomBlockEditor.tsx +167 -167
- package/templates/nextblock-template/app/cms/components/ConnectGitHubButton.tsx +122 -122
- package/templates/nextblock-template/app/cms/components/CortexAiActiveContext.tsx +23 -23
- package/templates/nextblock-template/app/cms/components/SeoScoreBadge.tsx +3 -40
- package/templates/nextblock-template/app/cms/components/SystemAlertsBanner.tsx +112 -112
- package/templates/nextblock-template/app/cms/components/TablePagination.tsx +136 -136
- package/templates/nextblock-template/app/cms/components/TwoFactorReminderBanner.tsx +45 -45
- package/templates/nextblock-template/app/cms/components/github-connect-actions.ts +102 -102
- package/templates/nextblock-template/app/cms/components/system-alerts-actions.ts +31 -31
- package/templates/nextblock-template/app/cms/coupons/[id]/edit/page.tsx +16 -16
- package/templates/nextblock-template/app/cms/coupons/page.tsx +16 -16
- package/templates/nextblock-template/app/cms/custom-blocks/[id]/edit/page.tsx +66 -66
- package/templates/nextblock-template/app/cms/custom-blocks/actions.ts +519 -519
- package/templates/nextblock-template/app/cms/custom-blocks/components/BlocksLibraryTransferControls.tsx +256 -256
- package/templates/nextblock-template/app/cms/custom-blocks/components/DBRelationSelect.tsx +384 -384
- package/templates/nextblock-template/app/cms/custom-blocks/components/ImageR2Picker.tsx +221 -221
- package/templates/nextblock-template/app/cms/custom-blocks/new/page.tsx +12 -12
- package/templates/nextblock-template/app/cms/custom-blocks/page.tsx +438 -438
- package/templates/nextblock-template/app/cms/dashboard/components/DashboardComponents.tsx +200 -200
- package/templates/nextblock-template/app/cms/dashboard/components/DashboardOnboarding.tsx +130 -130
- package/templates/nextblock-template/app/cms/import-export/actions.ts +226 -226
- package/templates/nextblock-template/app/cms/pages/page.tsx +273 -273
- package/templates/nextblock-template/app/cms/posts/page.tsx +251 -251
- package/templates/nextblock-template/app/cms/products/ProductFormClientShell.tsx +19 -0
- package/templates/nextblock-template/app/cms/products/[id]/edit/page.tsx +14 -2
- package/templates/nextblock-template/app/cms/products/categories/page.tsx +12 -12
- package/templates/nextblock-template/app/cms/products/new/page.tsx +135 -135
- package/templates/nextblock-template/app/cms/promotions/PromotionsWorkspace.tsx +456 -456
- package/templates/nextblock-template/app/cms/promotions/actions.ts +115 -115
- package/templates/nextblock-template/app/cms/promotions/page.tsx +31 -31
- package/templates/nextblock-template/app/cms/settings/backup-restore/BackupRestoreWorkspace.tsx +1004 -1004
- package/templates/nextblock-template/app/cms/settings/backup-restore/page.tsx +29 -29
- package/templates/nextblock-template/app/cms/settings/bot-protection/page.tsx +24 -24
- package/templates/nextblock-template/app/cms/settings/email/page.tsx +28 -28
- package/templates/nextblock-template/app/cms/settings/extra-translations/actions.ts +276 -276
- package/templates/nextblock-template/app/cms/settings/google-analytics/page.tsx +26 -26
- package/templates/nextblock-template/app/cms/settings/logos/components/DeleteLogoButton.tsx +21 -21
- package/templates/nextblock-template/app/cms/settings/logos/components/SetActiveLogoButton.tsx +42 -42
- package/templates/nextblock-template/app/cms/settings/logos/components/SiteSeoSettingsForm.tsx +133 -133
- package/templates/nextblock-template/app/cms/settings/privacy/page.tsx +27 -27
- package/templates/nextblock-template/app/cms/settings/registration/page.tsx +27 -27
- package/templates/nextblock-template/app/cms/settings/security/page.tsx +33 -33
- package/templates/nextblock-template/app/lib/site-settings.ts +105 -105
- package/templates/nextblock-template/app/lib/ucp/protocol.ts +190 -190
- package/templates/nextblock-template/app/lib/ucp/server.test.ts +56 -56
- package/templates/nextblock-template/app/setup/SetupWizard.tsx +678 -678
- package/templates/nextblock-template/app/setup/layout.tsx +13 -13
- package/templates/nextblock-template/app/setup/page.tsx +111 -111
- package/templates/nextblock-template/app/ucp/v1/carts/[id]/cancel/route.ts +38 -38
- package/templates/nextblock-template/app/ucp/v1/carts/[id]/route.ts +68 -68
- package/templates/nextblock-template/app/ucp/v1/carts/route.ts +35 -35
- package/templates/nextblock-template/app/ucp/v1/catalog/lookup/route.ts +35 -35
- package/templates/nextblock-template/app/ucp/v1/catalog/product/route.ts +35 -35
- package/templates/nextblock-template/app/ucp/v1/catalog/search/route.ts +34 -34
- package/templates/nextblock-template/components/CartTranslator.tsx +210 -210
- package/templates/nextblock-template/components/DeferredCartTranslator.tsx +51 -51
- package/templates/nextblock-template/components/DeferredGlobalSearch.tsx +68 -68
- package/templates/nextblock-template/components/DeferredGoogleAnalytics.tsx +70 -70
- package/templates/nextblock-template/components/FeatureImageHero.tsx +47 -47
- package/templates/nextblock-template/components/GlobalSearch.tsx +557 -557
- package/templates/nextblock-template/components/Header.tsx +38 -38
- package/templates/nextblock-template/components/PublicEnvBootstrap.tsx +30 -30
- package/templates/nextblock-template/components/ResponsiveNav.tsx +14 -14
- package/templates/nextblock-template/components/auth/AuthBotProtection.tsx +182 -182
- package/templates/nextblock-template/components/blocks/PostsGridClient.tsx +48 -48
- package/templates/nextblock-template/components/blocks/TestimonialBlock.tsx +9 -9
- package/templates/nextblock-template/components/blocks/publicRendererLoaders.ts +25 -25
- package/templates/nextblock-template/components/blocks/renderers/ButtonBlockRenderer.tsx +92 -92
- package/templates/nextblock-template/components/blocks/renderers/ClientTextBlockRenderer.tsx +11 -0
- package/templates/nextblock-template/components/blocks/renderers/PostsGridBlockRenderer.tsx +24 -24
- package/templates/nextblock-template/components/blocks/renderers/TestimonialBlockRenderer.tsx +57 -57
- package/templates/nextblock-template/components/blocks/renderers/inline/AlertWidgetRenderer.tsx +2 -2
- package/templates/nextblock-template/components/blocks/renderers/inline/CtaWidgetRenderer.tsx +2 -2
- package/templates/nextblock-template/components/media/YouTubeFacade.tsx +105 -105
- package/templates/nextblock-template/components/media/youtube-embed-replace.tsx +32 -32
- package/templates/nextblock-template/components/privacy/ConsentBanner.tsx +170 -170
- package/templates/nextblock-template/components/privacy/ConsentGatedAnalytics.tsx +70 -70
- package/templates/nextblock-template/components/renderers/CachedDynamicLayoutEngine.tsx +28 -28
- package/templates/nextblock-template/components/renderers/DynamicLayoutEngine.test.tsx +166 -166
- package/templates/nextblock-template/components/renderers/DynamicLayoutEngine.tsx +471 -471
- package/templates/nextblock-template/components/visual-editing/DeferredVisualEditing.tsx +21 -21
- package/templates/nextblock-template/context/language-rest-client.ts +32 -32
- package/templates/nextblock-template/docker/db/init/99-jwt.sql +6 -6
- package/templates/nextblock-template/docker/db/init/99-roles.sql +25 -25
- package/templates/nextblock-template/docker/kong/kong.yml +112 -112
- package/templates/nextblock-template/docs/02-ECOMMERCE-CAPABILITIES.md +364 -364
- package/templates/nextblock-template/docs/04-DATABASE-AND-AUTH.md +11 -0
- package/templates/nextblock-template/docs/07-BLOCK-SDK-AND-EXTENSIBILITY.md +146 -146
- package/templates/nextblock-template/docs/08-NEXTBLOCK-CORTEX-AI-ARCHITECTURE.md +19 -0
- package/templates/nextblock-template/docs/10-CUSTOM-BLOCKS.md +222 -222
- package/templates/nextblock-template/lib/app-secrets.ts +39 -39
- package/templates/nextblock-template/lib/auth/cookies.ts +47 -47
- package/templates/nextblock-template/lib/auth/crypto.ts +45 -45
- package/templates/nextblock-template/lib/auth/trustedDevices.ts +92 -92
- package/templates/nextblock-template/lib/blocks/README.md +13 -13
- package/templates/nextblock-template/lib/botProtection/verify.ts +134 -134
- package/templates/nextblock-template/lib/cms/payments-reminder.test.ts +135 -135
- package/templates/nextblock-template/lib/cms/payments-reminder.ts +105 -105
- package/templates/nextblock-template/lib/cms-transfer/types.ts +145 -145
- package/templates/nextblock-template/lib/custom-block-definitions.ts +87 -87
- package/templates/nextblock-template/lib/custom-block-r2-upload-shared.ts +178 -178
- package/templates/nextblock-template/lib/custom-block-r2-upload.test.ts +140 -140
- package/templates/nextblock-template/lib/custom-block-r2-upload.ts +88 -88
- package/templates/nextblock-template/lib/custom-block-relations.test.ts +227 -227
- package/templates/nextblock-template/lib/custom-block-relations.ts +279 -279
- package/templates/nextblock-template/lib/custom-block-safelist.ts +14 -14
- package/templates/nextblock-template/lib/editor/dynamic-extension-core.test.ts +172 -172
- package/templates/nextblock-template/lib/editor/dynamic-extension-core.ts +213 -213
- package/templates/nextblock-template/lib/editor/dynamic-extension-loader.ts +22 -22
- package/templates/nextblock-template/lib/editor/dynamic-extensions.tsx +193 -193
- package/templates/nextblock-template/lib/email/branding-format.test.ts +133 -133
- package/templates/nextblock-template/lib/email/branding-format.ts +123 -123
- package/templates/nextblock-template/lib/email/branding.ts +76 -76
- package/templates/nextblock-template/lib/full-backup/manifest.test.ts +121 -121
- package/templates/nextblock-template/lib/full-backup/manifest.ts +206 -206
- package/templates/nextblock-template/lib/logos/active-logo.ts +53 -53
- package/templates/nextblock-template/lib/media/resolveMediaUrl.ts +56 -54
- package/templates/nextblock-template/lib/media/youtube.ts +99 -99
- package/templates/nextblock-template/lib/onboarding/actions.ts +31 -31
- package/templates/nextblock-template/lib/privacy/consent-client.ts +57 -57
- package/templates/nextblock-template/lib/privacy/contact-emails.ts +64 -64
- package/templates/nextblock-template/lib/privacy/settings.ts +115 -115
- package/templates/nextblock-template/lib/privacy/types.ts +69 -69
- package/templates/nextblock-template/lib/promotions/server.test.ts +74 -74
- package/templates/nextblock-template/lib/promotions/server.ts +741 -741
- package/templates/nextblock-template/lib/resolve-block-relations.test.ts +142 -142
- package/templates/nextblock-template/lib/resolve-block-relations.ts +255 -255
- package/templates/nextblock-template/lib/seo/page-audit-context.tsx +3 -3
- package/templates/nextblock-template/lib/seo/page-document.test.ts +34 -0
- package/templates/nextblock-template/lib/seo/page-document.ts +3 -462
- package/templates/nextblock-template/lib/seo/robots-txt.ts +5 -4
- package/templates/nextblock-template/lib/setup/actions.ts +460 -460
- package/templates/nextblock-template/lib/setup/env-status.ts +125 -125
- package/templates/nextblock-template/lib/setup/env-write.ts +111 -111
- package/templates/nextblock-template/lib/setup/migrations-bundle.ts +50 -10
- package/templates/nextblock-template/lib/setup/provisioning.ts +59 -59
- package/templates/nextblock-template/lib/setup/schema-apply.ts +408 -408
- package/templates/nextblock-template/lib/setup/system-config.ts +105 -105
- package/templates/nextblock-template/lib/setup/types.ts +18 -18
- package/templates/nextblock-template/lib/storage/provider.ts +66 -66
- package/templates/nextblock-template/lib/storage/supabase-storage.ts +103 -103
- package/templates/nextblock-template/lib/updates/github-device.ts +206 -206
- package/templates/nextblock-template/lib/updates/repo-identity.ts +56 -56
- package/templates/nextblock-template/lib/visual-editing/draft-content.test.ts +105 -105
- package/templates/nextblock-template/lib/visual-editing/draft-route.test.ts +42 -42
- package/templates/nextblock-template/lib/visual-editing/edit-info.test.ts +143 -143
- package/templates/nextblock-template/lib/visual-editing/edit-info.ts +94 -94
- package/templates/nextblock-template/lib/visual-editing/product-drafts.test.ts +81 -81
- package/templates/nextblock-template/lib/zod-config.ts +5 -5
- package/templates/nextblock-template/next-env.d.ts +1 -0
- package/templates/nextblock-template/package.json +1 -1
- package/templates/nextblock-template/public/images/cortex_post.webp +0 -0
- package/templates/nextblock-template/public/images/update_nextblock.webp +0 -0
- package/templates/nextblock-template/scripts/docker-setup.mjs +310 -310
- package/templates/nextblock-template/scripts/validate-editor-block-schema.ts +112 -112
- package/templates/nextblock-template/scripts/verify-cortex-ai-build-widget.tsx +98 -98
- package/templates/nextblock-template/scripts/verify-cortex-ai-generate-blocks.ts +62 -62
- package/templates/nextblock-template/scripts/verify-cortex-ai-global-tools.ts +537 -537
- package/templates/nextblock-template/scripts/verify-cortex-ai-routing.ts +58 -58
- package/templates/nextblock-template/scripts/verify-custom-block-definitions.ts +188 -188
- package/templates/nextblock-template/scripts/verify-dynamic-custom-block-extensions.ts +123 -123
- package/templates/nextblock-template/scripts/verify-dynamic-layout-engine.tsx +133 -133
- package/templates/nextblock-template/scripts/verify-milestone-2-custom-blocks.ts +65 -65
- package/templates/nextblock-template/tools/deploy-supabase.js +159 -159
- package/templates/nextblock-template/types/jsdom.d.ts +6 -6
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { EditCouponPage as EditCouponPageUI } from '@nextblock-cms/ecommerce/server';
|
|
2
|
-
import { verifyPackageOnline } from '@nextblock-cms/db/server';
|
|
3
|
-
import { redirect } from 'next/navigation';
|
|
4
|
-
|
|
5
|
-
export default async function EditCouponPage({
|
|
6
|
-
params,
|
|
7
|
-
}: {
|
|
8
|
-
params: Promise<{ id: string }>;
|
|
9
|
-
}) {
|
|
10
|
-
const isOnline = await verifyPackageOnline('ecommerce');
|
|
11
|
-
if (!isOnline) {
|
|
12
|
-
redirect('/cms/settings/packages');
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
return <EditCouponPageUI params={params} />;
|
|
16
|
-
}
|
|
1
|
+
import { EditCouponPage as EditCouponPageUI } from '@nextblock-cms/ecommerce/server';
|
|
2
|
+
import { verifyPackageOnline } from '@nextblock-cms/db/server';
|
|
3
|
+
import { redirect } from 'next/navigation';
|
|
4
|
+
|
|
5
|
+
export default async function EditCouponPage({
|
|
6
|
+
params,
|
|
7
|
+
}: {
|
|
8
|
+
params: Promise<{ id: string }>;
|
|
9
|
+
}) {
|
|
10
|
+
const isOnline = await verifyPackageOnline('ecommerce');
|
|
11
|
+
if (!isOnline) {
|
|
12
|
+
redirect('/cms/settings/packages');
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
return <EditCouponPageUI params={params} />;
|
|
16
|
+
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { CouponsPage as CouponsPageUI } from '@nextblock-cms/ecommerce/server';
|
|
2
|
-
import { verifyPackageOnline } from '@nextblock-cms/db/server';
|
|
3
|
-
import { redirect } from 'next/navigation';
|
|
4
|
-
|
|
5
|
-
export default async function CouponsPage({
|
|
6
|
-
searchParams,
|
|
7
|
-
}: {
|
|
8
|
-
searchParams: Promise<{ status?: string; q?: string }>;
|
|
9
|
-
}) {
|
|
10
|
-
const isOnline = await verifyPackageOnline('ecommerce');
|
|
11
|
-
if (!isOnline) {
|
|
12
|
-
redirect('/cms/settings/packages');
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
return <CouponsPageUI searchParams={await searchParams} />;
|
|
16
|
-
}
|
|
1
|
+
import { CouponsPage as CouponsPageUI } from '@nextblock-cms/ecommerce/server';
|
|
2
|
+
import { verifyPackageOnline } from '@nextblock-cms/db/server';
|
|
3
|
+
import { redirect } from 'next/navigation';
|
|
4
|
+
|
|
5
|
+
export default async function CouponsPage({
|
|
6
|
+
searchParams,
|
|
7
|
+
}: {
|
|
8
|
+
searchParams: Promise<{ status?: string; q?: string }>;
|
|
9
|
+
}) {
|
|
10
|
+
const isOnline = await verifyPackageOnline('ecommerce');
|
|
11
|
+
if (!isOnline) {
|
|
12
|
+
redirect('/cms/settings/packages');
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
return <CouponsPageUI searchParams={await searchParams} />;
|
|
16
|
+
}
|
|
@@ -1,66 +1,66 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import Link from "next/link";
|
|
3
|
-
import { ArrowLeft, AlertCircle } from "lucide-react";
|
|
4
|
-
import { Button } from "@nextblock-cms/ui";
|
|
5
|
-
import { BlockComposer } from "../../components/BlockComposer";
|
|
6
|
-
import { getCustomBlockDefinition } from "../../actions";
|
|
7
|
-
|
|
8
|
-
interface EditCustomBlockPageProps {
|
|
9
|
-
params: Promise<{
|
|
10
|
-
id: string;
|
|
11
|
-
}>;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export const dynamic = "force-dynamic";
|
|
15
|
-
|
|
16
|
-
export default async function EditCustomBlockPage(props: EditCustomBlockPageProps) {
|
|
17
|
-
const params = await props.params;
|
|
18
|
-
const blockId = params.id;
|
|
19
|
-
|
|
20
|
-
try {
|
|
21
|
-
const res = await getCustomBlockDefinition(blockId);
|
|
22
|
-
|
|
23
|
-
if (!res.success || !res.data) {
|
|
24
|
-
return (
|
|
25
|
-
<div className="flex flex-col items-center justify-center text-center py-16 px-4 max-w-md mx-auto">
|
|
26
|
-
<div className="h-12 w-12 rounded-full bg-destructive/10 flex items-center justify-center text-destructive mb-4">
|
|
27
|
-
<AlertCircle className="h-6 w-6" />
|
|
28
|
-
</div>
|
|
29
|
-
<h3 className="text-lg font-semibold">Block Not Found</h3>
|
|
30
|
-
<p className="text-sm text-muted-foreground mt-2">
|
|
31
|
-
The custom block definition you are trying to edit could not be loaded. It may have been deleted or does not exist.
|
|
32
|
-
</p>
|
|
33
|
-
<Button asChild className="mt-6" variant="outline">
|
|
34
|
-
<Link href="/cms/custom-blocks">
|
|
35
|
-
<ArrowLeft className="mr-2 h-4 w-4" /> Back to Blocks
|
|
36
|
-
</Link>
|
|
37
|
-
</Button>
|
|
38
|
-
</div>
|
|
39
|
-
);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
return (
|
|
43
|
-
<div className="w-full">
|
|
44
|
-
<BlockComposer initialData={res.data} mode="edit" />
|
|
45
|
-
</div>
|
|
46
|
-
);
|
|
47
|
-
} catch (err) {
|
|
48
|
-
console.error("Error loading custom block definition for edit:", err);
|
|
49
|
-
return (
|
|
50
|
-
<div className="flex flex-col items-center justify-center text-center py-16 px-4 max-w-md mx-auto">
|
|
51
|
-
<div className="h-12 w-12 rounded-full bg-destructive/10 flex items-center justify-center text-destructive mb-4">
|
|
52
|
-
<AlertCircle className="h-6 w-6" />
|
|
53
|
-
</div>
|
|
54
|
-
<h3 className="text-lg font-semibold">Unexpected Error</h3>
|
|
55
|
-
<p className="text-sm text-muted-foreground mt-2">
|
|
56
|
-
An error occurred while trying to load the custom block definition. Please try again.
|
|
57
|
-
</p>
|
|
58
|
-
<Button asChild className="mt-6" variant="outline">
|
|
59
|
-
<Link href="/cms/custom-blocks">
|
|
60
|
-
<ArrowLeft className="mr-2 h-4 w-4" /> Back to Blocks
|
|
61
|
-
</Link>
|
|
62
|
-
</Button>
|
|
63
|
-
</div>
|
|
64
|
-
);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
1
|
+
import React from "react";
|
|
2
|
+
import Link from "next/link";
|
|
3
|
+
import { ArrowLeft, AlertCircle } from "lucide-react";
|
|
4
|
+
import { Button } from "@nextblock-cms/ui";
|
|
5
|
+
import { BlockComposer } from "../../components/BlockComposer";
|
|
6
|
+
import { getCustomBlockDefinition } from "../../actions";
|
|
7
|
+
|
|
8
|
+
interface EditCustomBlockPageProps {
|
|
9
|
+
params: Promise<{
|
|
10
|
+
id: string;
|
|
11
|
+
}>;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const dynamic = "force-dynamic";
|
|
15
|
+
|
|
16
|
+
export default async function EditCustomBlockPage(props: EditCustomBlockPageProps) {
|
|
17
|
+
const params = await props.params;
|
|
18
|
+
const blockId = params.id;
|
|
19
|
+
|
|
20
|
+
try {
|
|
21
|
+
const res = await getCustomBlockDefinition(blockId);
|
|
22
|
+
|
|
23
|
+
if (!res.success || !res.data) {
|
|
24
|
+
return (
|
|
25
|
+
<div className="flex flex-col items-center justify-center text-center py-16 px-4 max-w-md mx-auto">
|
|
26
|
+
<div className="h-12 w-12 rounded-full bg-destructive/10 flex items-center justify-center text-destructive mb-4">
|
|
27
|
+
<AlertCircle className="h-6 w-6" />
|
|
28
|
+
</div>
|
|
29
|
+
<h3 className="text-lg font-semibold">Block Not Found</h3>
|
|
30
|
+
<p className="text-sm text-muted-foreground mt-2">
|
|
31
|
+
The custom block definition you are trying to edit could not be loaded. It may have been deleted or does not exist.
|
|
32
|
+
</p>
|
|
33
|
+
<Button asChild className="mt-6" variant="outline">
|
|
34
|
+
<Link href="/cms/custom-blocks">
|
|
35
|
+
<ArrowLeft className="mr-2 h-4 w-4" /> Back to Blocks
|
|
36
|
+
</Link>
|
|
37
|
+
</Button>
|
|
38
|
+
</div>
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<div className="w-full">
|
|
44
|
+
<BlockComposer initialData={res.data} mode="edit" />
|
|
45
|
+
</div>
|
|
46
|
+
);
|
|
47
|
+
} catch (err) {
|
|
48
|
+
console.error("Error loading custom block definition for edit:", err);
|
|
49
|
+
return (
|
|
50
|
+
<div className="flex flex-col items-center justify-center text-center py-16 px-4 max-w-md mx-auto">
|
|
51
|
+
<div className="h-12 w-12 rounded-full bg-destructive/10 flex items-center justify-center text-destructive mb-4">
|
|
52
|
+
<AlertCircle className="h-6 w-6" />
|
|
53
|
+
</div>
|
|
54
|
+
<h3 className="text-lg font-semibold">Unexpected Error</h3>
|
|
55
|
+
<p className="text-sm text-muted-foreground mt-2">
|
|
56
|
+
An error occurred while trying to load the custom block definition. Please try again.
|
|
57
|
+
</p>
|
|
58
|
+
<Button asChild className="mt-6" variant="outline">
|
|
59
|
+
<Link href="/cms/custom-blocks">
|
|
60
|
+
<ArrowLeft className="mr-2 h-4 w-4" /> Back to Blocks
|
|
61
|
+
</Link>
|
|
62
|
+
</Button>
|
|
63
|
+
</div>
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
}
|