feat: support crisp chat
This commit is contained in:
parent
1be38e3e8d
commit
757f1dc4ae
@ -161,6 +161,12 @@ NEXT_PUBLIC_AFFILIATE_PROMOTEKIT_ID=""
|
|||||||
NEXT_PUBLIC_TURNSTILE_SITE_KEY=""
|
NEXT_PUBLIC_TURNSTILE_SITE_KEY=""
|
||||||
TURNSTILE_SECRET_KEY=""
|
TURNSTILE_SECRET_KEY=""
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Crisp
|
||||||
|
# https://mksaas.com/docs/chat#setup
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
NEXT_PUBLIC_CRISP_WEBSITE_ID=""
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
# Inngest
|
# Inngest
|
||||||
# https://mksaas.com/docs/jobs#setup
|
# https://mksaas.com/docs/jobs#setup
|
||||||
|
@ -86,6 +86,7 @@
|
|||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"cmdk": "1.1.1",
|
"cmdk": "1.1.1",
|
||||||
"cookie": "^1.0.2",
|
"cookie": "^1.0.2",
|
||||||
|
"crisp-sdk-web": "^1.0.25",
|
||||||
"date-fns": "^4.1.0",
|
"date-fns": "^4.1.0",
|
||||||
"deepmerge": "^4.3.1",
|
"deepmerge": "^4.3.1",
|
||||||
"dotenv": "^16.4.7",
|
"dotenv": "^16.4.7",
|
||||||
|
8
pnpm-lock.yaml
generated
8
pnpm-lock.yaml
generated
@ -194,6 +194,9 @@ importers:
|
|||||||
cookie:
|
cookie:
|
||||||
specifier: ^1.0.2
|
specifier: ^1.0.2
|
||||||
version: 1.0.2
|
version: 1.0.2
|
||||||
|
crisp-sdk-web:
|
||||||
|
specifier: ^1.0.25
|
||||||
|
version: 1.0.25
|
||||||
date-fns:
|
date-fns:
|
||||||
specifier: ^4.1.0
|
specifier: ^4.1.0
|
||||||
version: 4.1.0
|
version: 4.1.0
|
||||||
@ -4389,6 +4392,9 @@ packages:
|
|||||||
resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
|
resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
|
||||||
engines: {node: '>= 0.10'}
|
engines: {node: '>= 0.10'}
|
||||||
|
|
||||||
|
crisp-sdk-web@1.0.25:
|
||||||
|
resolution: {integrity: sha512-CWTHFFeHRV0oqiXoPh/aIAKhFs6xcIM4NenGPnClAMCZUDQgQsF1OWmZWmnVNjJriXUmWRgDfeUxcxygS0dCRA==}
|
||||||
|
|
||||||
cross-domain-safe-weakmap@1.0.29:
|
cross-domain-safe-weakmap@1.0.29:
|
||||||
resolution: {integrity: sha512-VLoUgf2SXnf3+na8NfeUFV59TRZkIJqCIATaMdbhccgtnTlSnHXkyTRwokngEGYdQXx8JbHT9GDYitgR2sdjuA==}
|
resolution: {integrity: sha512-VLoUgf2SXnf3+na8NfeUFV59TRZkIJqCIATaMdbhccgtnTlSnHXkyTRwokngEGYdQXx8JbHT9GDYitgR2sdjuA==}
|
||||||
|
|
||||||
@ -10476,6 +10482,8 @@ snapshots:
|
|||||||
object-assign: 4.1.1
|
object-assign: 4.1.1
|
||||||
vary: 1.1.2
|
vary: 1.1.2
|
||||||
|
|
||||||
|
crisp-sdk-web@1.0.25: {}
|
||||||
|
|
||||||
cross-domain-safe-weakmap@1.0.29:
|
cross-domain-safe-weakmap@1.0.29:
|
||||||
dependencies:
|
dependencies:
|
||||||
cross-domain-utils: 2.0.38
|
cross-domain-utils: 2.0.38
|
||||||
|
@ -10,8 +10,8 @@ import LogoCloud from '@/components/blocks/logo-cloud/logo-cloud';
|
|||||||
import PricingSection from '@/components/blocks/pricing/pricing';
|
import PricingSection from '@/components/blocks/pricing/pricing';
|
||||||
import StatsSection from '@/components/blocks/stats/stats';
|
import StatsSection from '@/components/blocks/stats/stats';
|
||||||
import TestimonialsSection from '@/components/blocks/testimonials/testimonials';
|
import TestimonialsSection from '@/components/blocks/testimonials/testimonials';
|
||||||
|
import CrispChat from '@/components/layout/crisp-chat';
|
||||||
import { NewsletterCard } from '@/components/newsletter/newsletter-card';
|
import { NewsletterCard } from '@/components/newsletter/newsletter-card';
|
||||||
import DiscordWidget from '@/components/shared/discord-widget';
|
|
||||||
import { constructMetadata } from '@/lib/metadata';
|
import { constructMetadata } from '@/lib/metadata';
|
||||||
import { getUrlWithLocale } from '@/lib/urls/urls';
|
import { getUrlWithLocale } from '@/lib/urls/urls';
|
||||||
import type { Metadata } from 'next';
|
import type { Metadata } from 'next';
|
||||||
@ -73,6 +73,8 @@ export default async function HomePage(props: HomePageProps) {
|
|||||||
<TestimonialsSection />
|
<TestimonialsSection />
|
||||||
|
|
||||||
<NewsletterCard />
|
<NewsletterCard />
|
||||||
|
|
||||||
|
<CrispChat />
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
36
src/components/layout/crisp-chat.tsx
Normal file
36
src/components/layout/crisp-chat.tsx
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
'use client';
|
||||||
|
|
||||||
|
import { websiteConfig } from '@/config/website';
|
||||||
|
import { Crisp } from 'crisp-sdk-web';
|
||||||
|
import { useEffect } from 'react';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Crisp chat component
|
||||||
|
* https://crisp.chat/en/
|
||||||
|
* https://help.crisp.chat/en/article/how-do-i-install-crisp-live-chat-on-nextjs-xh9yse/
|
||||||
|
*/
|
||||||
|
const CrispChat = () => {
|
||||||
|
useEffect(() => {
|
||||||
|
if (!websiteConfig.features.enableCrispChat) {
|
||||||
|
console.log('Crisp chat is disabled');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const websiteId = process.env.NEXT_PUBLIC_CRISP_WEBSITE_ID;
|
||||||
|
if (!websiteId) {
|
||||||
|
console.warn('Crisp website ID is not configured.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Crisp.configure(websiteId);
|
||||||
|
console.log('Crisp chat initialized successfully');
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Failed to initialize Crisp chat:', error);
|
||||||
|
}
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default CrispChat;
|
@ -34,6 +34,7 @@ export const websiteConfig: WebsiteConfig = {
|
|||||||
},
|
},
|
||||||
features: {
|
features: {
|
||||||
enableDiscordWidget: false,
|
enableDiscordWidget: false,
|
||||||
|
enableCrispChat: process.env.NEXT_PUBLIC_DEMO_WEBSITE === 'true',
|
||||||
enableUpgradeCard: true,
|
enableUpgradeCard: true,
|
||||||
enableAffonsoAffiliate: false,
|
enableAffonsoAffiliate: false,
|
||||||
enablePromotekitAffiliate: false,
|
enablePromotekitAffiliate: false,
|
||||||
|
1
src/types/index.d.ts
vendored
1
src/types/index.d.ts
vendored
@ -69,6 +69,7 @@ export interface SocialConfig {
|
|||||||
*/
|
*/
|
||||||
export interface FeaturesConfig {
|
export interface FeaturesConfig {
|
||||||
enableDiscordWidget?: boolean; // Whether to enable the discord widget, deprecated
|
enableDiscordWidget?: boolean; // Whether to enable the discord widget, deprecated
|
||||||
|
enableCrispChat?: boolean; // Whether to enable the crisp chat
|
||||||
enableUpgradeCard?: boolean; // Whether to enable the upgrade card in the sidebar
|
enableUpgradeCard?: boolean; // Whether to enable the upgrade card in the sidebar
|
||||||
enableAffonsoAffiliate?: boolean; // Whether to enable affonso affiliate
|
enableAffonsoAffiliate?: boolean; // Whether to enable affonso affiliate
|
||||||
enablePromotekitAffiliate?: boolean; // Whether to enable promotekit affiliate
|
enablePromotekitAffiliate?: boolean; // Whether to enable promotekit affiliate
|
||||||
|
Loading…
Reference in New Issue
Block a user