This commit is contained in:
Iliyan Angelov
2025-12-10 01:37:23 +02:00
13 changed files with 326 additions and 5 deletions

View File

@@ -12,7 +12,11 @@ import ServicesInitAnimations from "@/components/pages/services/ServicesInitAnim
import { Service } from "@/lib/api/serviceService";
import { generateServiceMetadata } from "@/lib/seo/metadata";
import { ServiceSchema, BreadcrumbSchema } from "@/components/shared/seo/StructuredData";
<<<<<<< HEAD
import { API_CONFIG, getApiHeaders } from "@/lib/config/api";
=======
import { API_CONFIG } from "@/lib/config/api";
>>>>>>> d7d7a2757a183aa1abd9dbabff804c45298df4e5
interface ServicePageProps {
params: Promise<{
@@ -24,6 +28,7 @@ interface ServicePageProps {
// This pre-generates known pages, but new pages can still be generated on-demand
export async function generateStaticParams() {
try {
<<<<<<< HEAD
// Use internal API URL for server-side requests
const apiUrl = process.env.INTERNAL_API_URL || process.env.NEXT_PUBLIC_API_URL || 'http://127.0.0.1:1086';
const response = await fetch(
@@ -31,6 +36,15 @@ export async function generateStaticParams() {
{
method: 'GET',
headers: getApiHeaders(),
=======
const response = await fetch(
`${API_CONFIG.BASE_URL}/api/services/`,
{
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
>>>>>>> d7d7a2757a183aa1abd9dbabff804c45298df4e5
next: { revalidate: 60 }, // Revalidate every minute for faster image updates
}
);
@@ -57,6 +71,7 @@ export async function generateMetadata({ params }: ServicePageProps) {
const { slug } = await params;
try {
<<<<<<< HEAD
// Use internal API URL for server-side requests
const apiUrl = process.env.INTERNAL_API_URL || process.env.NEXT_PUBLIC_API_URL || 'http://127.0.0.1:1086';
const response = await fetch(
@@ -64,6 +79,15 @@ export async function generateMetadata({ params }: ServicePageProps) {
{
method: 'GET',
headers: getApiHeaders(),
=======
const response = await fetch(
`${API_CONFIG.BASE_URL}/api/services/${slug}/`,
{
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
>>>>>>> d7d7a2757a183aa1abd9dbabff804c45298df4e5
next: { revalidate: 60 }, // Revalidate every minute for faster image updates
}
);
@@ -87,6 +111,7 @@ const ServicePage = async ({ params }: ServicePageProps) => {
const { slug } = await params;
try {
<<<<<<< HEAD
// Use internal API URL for server-side requests
const apiUrl = process.env.INTERNAL_API_URL || process.env.NEXT_PUBLIC_API_URL || 'http://127.0.0.1:1086';
const response = await fetch(
@@ -94,6 +119,15 @@ const ServicePage = async ({ params }: ServicePageProps) => {
{
method: 'GET',
headers: getApiHeaders(),
=======
const response = await fetch(
`${API_CONFIG.BASE_URL}/api/services/${slug}/`,
{
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
>>>>>>> d7d7a2757a183aa1abd9dbabff804c45298df4e5
next: { revalidate: 60 }, // Revalidate every minute for faster image updates
}
);

View File

@@ -12,8 +12,29 @@ type ModalType = 'create' | 'knowledge' | 'status' | null;
const SupportCenterPage = () => {
// Set metadata for client component
useEffect(() => {
<<<<<<< HEAD
// Only run on client side
if (typeof window === 'undefined' || typeof document === 'undefined') return;
=======
const metadata = createMetadata({
title: "Support Center - Enterprise Support & Help Desk",
description: "Get 24/7 enterprise support from GNX Soft. Access our knowledge base, create support tickets, check ticket status, and get help with our software solutions and services.",
keywords: [
"Support Center",
"Customer Support",
"Help Desk",
"Technical Support",
"Knowledge Base",
"Support Tickets",
"Enterprise Support",
"IT Support",
],
url: "/support-center",
});
const titleString = typeof metadata.title === 'string' ? metadata.title : "Support Center | GNX Soft";
document.title = titleString;
>>>>>>> d7d7a2757a183aa1abd9dbabff804c45298df4e5
try {
const metadata = createMetadata({

View File

@@ -227,7 +227,11 @@ const AboutBanner = () => {
{/* Social Links */}
<div className="social-links">
<<<<<<< HEAD
<Link href="https://www.linkedin.com" target="_blank" className="social-link">
=======
<Link href="https://linkedin.com" target="_blank" className="social-link">
>>>>>>> d7d7a2757a183aa1abd9dbabff804c45298df4e5
<i className="fa-brands fa-linkedin-in"></i>
</Link>
<Link href="https://github.com" target="_blank" className="social-link">

View File

@@ -117,7 +117,11 @@ const CareerBanner = () => {
<ul className="social">
<li>
<Link
<<<<<<< HEAD
href="https://www.linkedin.com"
=======
href="https://linkedin.com"
>>>>>>> d7d7a2757a183aa1abd9dbabff804c45298df4e5
target="_blank"
aria-label="connect with us on linkedin"
>

View File

@@ -5,7 +5,10 @@ import Link from "next/link";
import { useRouter } from "next/navigation";
import { useCaseStudy } from "@/lib/hooks/useCaseStudy";
import { getImageUrl } from "@/lib/imageUtils";
<<<<<<< HEAD
import { sanitizeHTML } from "@/lib/security/sanitize";
=======
>>>>>>> d7d7a2757a183aa1abd9dbabff804c45298df4e5
interface CaseSingleProps {
slug: string;

View File

@@ -84,7 +84,11 @@ const ServicesBanner = () => {
<ul className="social">
<li>
<Link
<<<<<<< HEAD
href="https://www.linkedin.com"
=======
href="https://linkedin.com"
>>>>>>> d7d7a2757a183aa1abd9dbabff804c45298df4e5
target="_blank"
aria-label="connect with us on linkedin"
>

View File

@@ -289,7 +289,11 @@ const Footer = () => {
<div className="col-12 col-lg-6">
<div className="social-links justify-content-center justify-content-lg-end">
<Link
<<<<<<< HEAD
href="https://www.linkedin.com"
=======
href="https://linkedin.com"
>>>>>>> d7d7a2757a183aa1abd9dbabff804c45298df4e5
target="_blank"
rel="noopener noreferrer"
title="LinkedIn"
@@ -298,7 +302,11 @@ const Footer = () => {
<i className="fa-brands fa-linkedin-in"></i>
</Link>
<Link
<<<<<<< HEAD
href="https://github.com/"
=======
href="https://github.com"
>>>>>>> d7d7a2757a183aa1abd9dbabff804c45298df4e5
target="_blank"
rel="noopener noreferrer"
title="GitHub"

View File

@@ -175,7 +175,11 @@ const OffcanvasMenu = ({
<ul className="enterprise-social nav-fade">
<li>
<Link
<<<<<<< HEAD
href="https://www.linkedin.com"
=======
href="https://linkedin.com"
>>>>>>> d7d7a2757a183aa1abd9dbabff804c45298df4e5
target="_blank"
aria-label="Connect with us on LinkedIn"
>

View File

@@ -123,9 +123,13 @@ const nextConfig = {
// Note: Removed conflicting directives that are ignored with 'strict-dynamic'
{
key: 'Content-Security-Policy',
<<<<<<< HEAD
value: process.env.NODE_ENV === 'production'
? "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://www.googletagmanager.com https://www.google-analytics.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: https:; font-src 'self' data: https://fonts.gstatic.com; connect-src 'self' https://www.google-analytics.com; frame-src 'self' https://www.google.com; frame-ancestors 'self'; base-uri 'self'; form-action 'self'; object-src 'none'; upgrade-insecure-requests;"
: "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://www.googletagmanager.com https://www.google-analytics.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: https: http://localhost:8000 http://localhost:8080; font-src 'self' data: https://fonts.gstatic.com; connect-src 'self' http://localhost:8000 https://www.google-analytics.com; frame-src 'self' https://www.google.com; frame-ancestors 'self'; base-uri 'self'; form-action 'self';"
=======
value: "default-src 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline' https://www.googletagmanager.com https://www.google-analytics.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: https: http://localhost:8000 http://localhost:8080; font-src 'self' data: https://fonts.gstatic.com; connect-src 'self' http://localhost:8000 https://www.google-analytics.com; frame-src 'self' https://www.google.com; frame-ancestors 'self'; base-uri 'self'; form-action 'self'"
>>>>>>> d7d7a2757a183aa1abd9dbabff804c45298df4e5
},
// Hide X-Powered-By header from Next.js
{