Compare commits

..

No commits in common. "6fc4988506d20eae89dc4a72cf1c6f3302ef8910" and "cab69a41e930d4e09b7281e0c173f5d94f4d360f" have entirely different histories.

13 changed files with 177 additions and 204 deletions

View File

@ -3908,8 +3908,8 @@ a.logo:hover {
display: none; display: none;
} }
.social-nav:hover { .body-scrolled .social-nav {
color: #00abad; color: var(--color-dark-3);
} }
/* Menu sub */ /* Menu sub */

View File

@ -33,7 +33,9 @@ export default function MainLayout({
<body className="appear-animate body"> <body className="appear-animate body">
<div className="theme-slick"> <div className="theme-slick">
<div className="page" id="top"> <div className="page" id="top">
<Header links={navMenuData} /> <nav className="main-nav dark transparent stick-fixed wow-menubar wch-unset">
<Header links={navMenuData} />
</nav>
<main id="main">{children}</main> <main id="main">{children}</main>
<Footer /> <Footer />
</div> </div>

View File

@ -1,16 +1,10 @@
import formatSlug from "@/utils/payload/formatSlug"; import formatSlug from "@/utils/payload/formatSlug";
import setAuthor from "@/utils/payload/setAuthor";
import { lexicalEditor } from "@payloadcms/richtext-lexical"; import { lexicalEditor } from "@payloadcms/richtext-lexical";
import type { CollectionConfig } from "payload"; import type { CollectionConfig } from "payload";
export const Blogs: CollectionConfig = { export const Blogs: CollectionConfig = {
slug: "blogs", slug: "blogs",
labels: { plural: "Posts", singular: "Post" }, labels: { plural: "Posts", singular: "Post" },
versions: {
drafts: {
validate: true,
},
},
fields: [ fields: [
{ {
name: "title", name: "title",
@ -71,27 +65,32 @@ export const Blogs: CollectionConfig = {
}, },
], ],
}, },
{
name: "is_published",
label: "Published",
type: "checkbox",
defaultValue: true,
admin: {
position: "sidebar",
},
},
{ {
name: "createdBy", name: "createdBy",
type: "relationship", type: "relationship",
relationTo: "users", relationTo: "users",
hooks: { hidden: true,
beforeChange: [setAuthor], // hooks: {
}, // beforeChange: [setAuthor],
admin: { // },
hidden: true,
},
}, },
{ {
name: "updatedBy", name: "updatedBy",
type: "relationship", type: "relationship",
relationTo: "users", relationTo: "users",
hooks: { hidden: true,
beforeChange: [setAuthor], // hooks: {
}, // beforeChange: [setAuthor],
admin: { // },
hidden: true,
},
}, },
], ],
admin: { admin: {

View File

@ -8,16 +8,10 @@ import { HorizontalImageContentBlock } from "@/blocks/HorizontalImageContent";
import { ImageSliderBlock } from "@/blocks/ImageSlider"; import { ImageSliderBlock } from "@/blocks/ImageSlider";
import { OurTeamBlock } from "@/blocks/OurTeam"; import { OurTeamBlock } from "@/blocks/OurTeam";
import formatSlug from "@/utils/payload/formatSlug"; import formatSlug from "@/utils/payload/formatSlug";
import setAuthor from "@/utils/payload/setAuthor";
import { CollectionConfig } from "payload"; import { CollectionConfig } from "payload";
export const Pages: CollectionConfig = { export const Pages: CollectionConfig = {
slug: "pages", slug: "pages",
versions: {
drafts: {
validate: true,
},
},
fields: [ fields: [
{ {
name: "title", name: "title",
@ -35,6 +29,9 @@ export const Pages: CollectionConfig = {
name: "slug", name: "slug",
label: "Page Slug", label: "Page Slug",
type: "text", type: "text",
admin: {
position: "sidebar",
},
hooks: { hooks: {
beforeValidate: [formatSlug("title")], beforeValidate: [formatSlug("title")],
}, },
@ -78,28 +75,6 @@ export const Pages: CollectionConfig = {
}, },
], ],
}, },
{
name: "createdBy",
type: "relationship",
relationTo: "users",
hooks: {
beforeChange: [setAuthor],
},
admin: {
hidden: true,
},
},
{
name: "updatedBy",
type: "relationship",
relationTo: "users",
hooks: {
beforeChange: [setAuthor],
},
admin: {
hidden: true,
},
},
], ],
admin: { admin: {
hideAPIURL: true, hideAPIURL: true,

View File

@ -15,12 +15,24 @@ export default async function Blog() {
<div className="row mb-60 mb-sm-40"> <div className="row mb-60 mb-sm-40">
<div className="col-lg-8 offset-lg-2 text-center mb-md-30"> <div className="col-lg-8 offset-lg-2 text-center mb-md-30">
<h2 className="section-caption-slick mb-30 mb-sm-20">Our Blog</h2> <h2 className="section-caption-slick mb-30 mb-sm-20">Our Blog</h2>
<h3 className="section-title-large mb-30">Knowledge and Support for Your Cancer Journey</h3> <h3 className="section-title mb-30">Check the latest news about our company in our blog.</h3>
<p className="mb-0"> <p className="section-descr mb-0">
Cancer treatment involves a team of specialists providing personalized, comprehensive care. Staying There are three kinds of web developer specialization front-end developer, back-end developer, and
informed and engaged empowers you to choose the best approach. Remember, youre not alone in this journey. full-stack developer.
</p> </p>
</div> </div>
<div className="col-lg-2 d-flex align-items-end">
<div className="local-scroll text-center text-lg-end w-100">
<Link href={`/slick-blog-dark`} className="link-hover-anim" data-link-animate="y">
<span className="link-strong link-strong-unhovered">
Our blog <i className="mi-arrow-right size-24" aria-hidden="true"></i>
</span>
<span className="link-strong link-strong-hovered" aria-hidden="true">
Our blog <i className="mi-arrow-right size-24" aria-hidden="true"></i>
</span>
</Link>
</div>
</div>
</div> </div>
{/* Blog Posts Grid */} {/* Blog Posts Grid */}
<div className="row mt-n30"> <div className="row mt-n30">

View File

@ -4,7 +4,6 @@ import { RichText } from "@payloadcms/richtext-lexical/react";
import { headers } from "next/headers"; import { headers } from "next/headers";
import Image from "next/image"; import Image from "next/image";
import { notFound } from "next/navigation"; import { notFound } from "next/navigation";
import Blog from "./Blog";
export interface BlogDetailProps { export interface BlogDetailProps {
slug: string | undefined; slug: string | undefined;
@ -49,14 +48,10 @@ export default async function BlogDetail({ slug }: BlogDetailProps) {
{/* End Post */} {/* End Post */}
</div> </div>
{/* End Content */} {/* End Content */}
<hr style={{ width: "100%", border: "1px solid #aaa" }} />
</div> </div>
</div> </div>
</section> </section>
{/* End Section */} {/* End Section */}
<div className="mb-5">
<Blog />
</div>
</> </>
); );
} }

View File

@ -5,79 +5,66 @@ import { navMenuData } from "@/data/menu";
import { toggleMobileMenu } from "@/utils/toggleMobileMenu"; import { toggleMobileMenu } from "@/utils/toggleMobileMenu";
import Image from "next/image"; import Image from "next/image";
import Link from "next/link"; import Link from "next/link";
import { FaFacebook, FaLinkedin, FaPhone } from "react-icons/fa"; import { FaFacebook, FaLinkedin, FaTwitter } from "react-icons/fa";
const shareIcons: Record<string, any> = { const shareIcons: Record<string, any> = {
phone: { facebook: <FaFacebook className="social-nav text-2xl lg:text-gray-300" />,
link: "tel:+15208036644", linkedin: <FaLinkedin className="social-nav text-2xl lg:text-gray-300" />,
dom: ( twitter: <FaTwitter className="social-nav text-2xl lg:text-gray-300" />,
<span className="social-nav flex gap-3 text-2xl lg:text-[#00898b]">
<FaPhone />
<b className="text-sm">(520) 803-6644</b>
</span>
),
},
facebook: {
link: "https://www.facebook.com/p/Cochise-Oncology-61556262839823",
dom: <FaFacebook className="social-nav text-2xl lg:text-[#00898b]" />,
},
linkedin: {
link: "https://linkedin.com/company/cochise-oncology",
dom: <FaLinkedin className="social-nav text-2xl lg:text-[#00898b]" />,
},
}; };
export default function Header({ links }: { links: typeof navMenuData }) { export default function Header({ links }: { links: typeof navMenuData }) {
return ( return (
<nav className="main-nav dark stick-fixed wow-menubar wch-unset relative"> <div className="main-nav-sub full-wrapper">
<div className="main-nav-sub full-wrapper"> {/* Logo (* Add your text or image to the link tag. Use SVG or PNG image format.
{/* Logo (* Add your text or image to the link tag. Use SVG or PNG image format.
If you use a PNG logo image, the image resolution must be equal 200% of the visible logo If you use a PNG logo image, the image resolution must be equal 200% of the visible logo
image size for support of retina screens. See details in the template documentation. *) */} image size for support of retina screens. See details in the template documentation. *) */}
<div className="nav-logo-wrap local-scroll"> <div className="nav-logo-wrap local-scroll">
<Link href={`/`} className="logo"> <Link href={`/`} className="logo">
<Image <Image
src="/assets/images/demo-slick/logo-dark.webp" src="/assets/images/demo-slick/logo-dark.webp"
alt="Your Company Logo" alt="Your Company Logo"
width={105} width={105}
height={34} height={34}
className="light-mode-logo" className="light-mode-logo"
/> />
<Image <Image
src="/assets/images/demo-slick/logo-dark.webp" src="/assets/images/demo-slick/logo-dark.webp"
alt="Your Company Logo" alt="Your Company Logo"
width={405} width={405}
height={34} height={34}
className="dark-mode-logo" className="dark-mode-logo"
/> />
</Link> </Link>
</div>
{/* Mobile Menu Button */}
<div onClick={toggleMobileMenu} className="mobile-nav" role="button" tabIndex={0}>
<i className="mobile-nav-icon" />
<span className="visually-hidden">Menu</span>
</div>
{/* Main Menu */}
<div className="inner-nav desktop-nav">
<ul className="clearlist local-scroll">
{/* Item With Sub */}
<HeaderNav links={links} />
{/* End Item With Sub */}
</ul>
<ul className="items-end clearlist">
{Object.keys(shareIcons).map((k, idx) => {
return (
<li key={idx} className="!p-0 !m-0">
<a className="cursor-pointer" href={shareIcons[k].link} target="_blank">
{shareIcons[k].dom}
</a>
</li>
);
})}
</ul>
</div>
{/* End Main Menu */}
</div> </div>
</nav> {/* Mobile Menu Button */}
<div onClick={toggleMobileMenu} className="mobile-nav" role="button" tabIndex={0}>
<i className="mobile-nav-icon" />
<span className="visually-hidden">Menu</span>
</div>
{/* Main Menu */}
<div className="inner-nav desktop-nav">
<ul className="clearlist local-scroll">
{/* Item With Sub */}
<HeaderNav links={links} />
{/* End Item With Sub */}
</ul>
<ul className="items-end clearlist">
{/* Languages */}
{/* <LanguageSelect /> */}
{/* End Languages */}
<li></li>
</ul>
</div>
<div className="flex mt-4 gap-3">
{Object.keys(shareIcons).map((k, idx) => {
return (
<a key={idx} className="cursor-pointer" href={"/"} target="_blank">
{shareIcons[k]}
</a>
);
})}
</div>
{/* End Main Menu */}
</div>
); );
} }

View File

@ -56,7 +56,7 @@ export default function HeaderNav({ links, animateY = false }: { links: typeof n
{Array.isArray(link?.child) && ( {Array.isArray(link?.child) && (
<> <>
<Link href={link?.href ?? "#"} className="mn-has-sub flex justify-between"> <Link href={link?.href ?? "#"} className="mn-has-sub">
{link.text} <i className="mi-chevron-down" onClick={() => toggleDropdown([link.text])} /> {link.text} <i className="mi-chevron-down" onClick={() => toggleDropdown([link.text])} />
</Link> </Link>
@ -70,8 +70,8 @@ export default function HeaderNav({ links, animateY = false }: { links: typeof n
)} )}
{Array.isArray(subLink?.child) && ( {Array.isArray(subLink?.child) && (
<> <>
<Link href={subLink?.href ?? "#"} className="mn-has-sub !flex !justify-between"> <Link href={subLink?.href ?? "#"} className="mn-has-sub">
<span>{subLink.text}</span> {subLink.text}
<i className="mi-chevron-down" onClick={() => toggleDropdown([link.text, subLink.text])} /> <i className="mi-chevron-down" onClick={() => toggleDropdown([link.text, subLink.text])} />
</Link> </Link>

View File

@ -57,61 +57,55 @@ export default function homepage({ dark = false }) {
</Link> </Link>
</div> </div>
</section> </section>
<section className="py-5 w-full flex flex-col"> <section className="w-full py-10 flex flex-col items-center">
<div className="relative flex justify-center"> <div className="w-11/12 md:w-3/4 lg:w-2/3 bg-white p-6 md:p-8 rounded-lg shadow-lg">
<div className="w-full md:w-1/2 self-center mt-[-70px] mb-50 flex justify-center"> <p className="italic text-gray-700">
<div className="bg-white h-full flex flex-col lg:flex-row flex-wrap justify-center p-4 lg:p-8 gap-3 rounded-xl shadow-xl"> I was diagnosed with cancer up in Tucson. The doctor was said to be best oncologist in the state. Problem
<blockquote was I needed radiation for 45 days not counting weekends and holidays.
className="self-center border-teal-500 pl-4 italic text-gray-800" </p>
style={{ borderLeft: "4px solid #eee" }} <p className="italic text-gray-700 mt-4">
> I had to tell her that that was not doable. I couldn't commute daily and I couldn't rent. I told her that I
I was diagnosed with cancer up in Tucson. The doctor was said to be best oncologist in the state. could get treatment of some sort in Sierra Vista. She told me that normally she would fight me, but only 2
Problem was I needed radiation for 45 days not counting weekends and holidays. Clinics in the state had this latest and greatest radiation hardware. Hers and Cochise Oncology in Sierra
<br /> Vista.
<br /> </p>
I had to tell her that that was not doable. I couldn&apos;t commute daily and I couldn&apos;t rent. I <p className="italic text-gray-700 mt-4">
told her that I could get treatment of some sort in Sierra Vista. She told me that normally she would I had to tell her that that was not doable. I couldn't commute daily and I couldn't rent. I told her that I
fight me, but only 2 Clinics in the state had this latest and greatest radiation hardware. Hers and could get treatment of some sort in Sierra Vista. She told me that normally she would fight me, but only 2
Cochise Oncology in Sierra Vista. Clinics in the state had this latest and greatest radiation hardware. Hers and Cochise Oncology in Sierra
<br /> Vista.
<br /> </p>
At Cochise Oncology I was introduced to Dr. Vedula. What a good man and what a great doctor. Check out <p className="italic text-gray-700 mt-4">Do yourself a favor and see Dr. Vedula.</p>
his credentials. I am now cancer free for 9 months. It was still 45 days of treatment but no side <p className="font-bold text-indigo-600 mt-4">- a Cochise Oncology patient</p>
effects. Plus, I would go home every day after undergoing treatment. I forget, maybe 15 minutes of <p className="text-sm text-gray-500 text-center mt-4">*Individual Results May Vary</p>
treatment.
<br />
<br />
Do yourself a favor and see Dr. Vedula.
<br></br>
<b>-a Cochise Oncology patient</b>
</blockquote>
</div>
</div>
</div> </div>
<h1 className="w-full text-center !font-light">Testimonials</h1> </section>
<blockquote <section className="py-5 w-full items-center">
className="w-full md:w-8/12 self-center border-teal-500 pl-4 italic text-gray-800" <div className="max-w-7xl mx-auto p-6 text-center">
style={{ borderLeft: "4px solid #eee" }} <h2>Testimonials</h2>
> <div className="text-left text-gray-700 space-y-4">
I was diagnosed with cancer up in Tucson. The doctor was said to be best oncologist in the state. Problem was <p className="italic">
I needed radiation for 45 days not counting weekends and holidays. I was diagnosed with cancer up in Tucson. The doctor was said to be the best oncologist in the state.
<br /> Problem was I needed radiation for 45 days not counting weekends and holidays.
<br /> </p>
I had to tell her that that was not doable. I couldn&apos;t commute daily and I couldn&apos;t rent. I told her <p className="italic">
that I could get treatment of some sort in Sierra Vista. She told me that normally she would fight me, but I had to tell her that that was not doable. I couldn't commute daily and I couldn't rent. I told her that
only 2 Clinics in the state had this latest and greatest radiation hardware. Hers and Cochise Oncology in I could get treatment of some sort in Sierra Vista. She told me that normally she would fight me, but only
Sierra Vista. 2 clinics in the state had this latest and greatest radiation hardware. Hers and Cochise Oncology in
<br /> Sierra Vista.
<br /> </p>
At Cochise Oncology I was introduced to Dr. Vedula. What a good man and what a great doctor. Check out his <p className="italic">
credentials. I am now cancer free for 9 months. It was still 45 days of treatment but no side effects. Plus, I At Cochise Oncology I was introduced to Dr. Vedula. What a good man and what a great doctor. Check out his
would go home every day after undergoing treatment. I forget, maybe 15 minutes of treatment. credentials. I am now cancer free for 9 months. It was still 45 days of treatment but no side effects.
<br /> Plus, I would go home every day after undergoing treatment. I forget, maybe 15 minutes of treatment.
<br /> </p>
Do yourself a favor and see Dr. Vedula. <p>Do yourself a favor and see Dr. Vedula.</p>
<br></br> <p className="font-bold text-gray-900">- a Cochise Oncology patient</p>
<b>-a Cochise Oncology patient</b> </div>
</blockquote> <p className="text-sm text-gray-500 mt-4">*Individual Results May Vary</p>
</div>
</section>
<section className="py-5 w-full items-center">
<Testimonials /> <Testimonials />
</section> </section>
<section className="page-section bg-scroll light-content bg-[url(/assets/images/demo-modern/section-bg-3.jpeg)] bg-cover"> <section className="page-section bg-scroll light-content bg-[url(/assets/images/demo-modern/section-bg-3.jpeg)] bg-cover">

View File

@ -146,11 +146,11 @@ export interface Blog {
description?: string | null; description?: string | null;
canonical_url?: string | null; canonical_url?: string | null;
}; };
is_published?: boolean | null;
createdBy?: (number | null) | User; createdBy?: (number | null) | User;
updatedBy?: (number | null) | User; updatedBy?: (number | null) | User;
updatedAt: string; updatedAt: string;
createdAt: string; createdAt: string;
_status?: ('draft' | 'published') | null;
} }
/** /**
* This interface was referenced by `Config`'s JSON-Schema * This interface was referenced by `Config`'s JSON-Schema
@ -306,11 +306,8 @@ export interface Page {
description?: string | null; description?: string | null;
cannonical_url?: string | null; cannonical_url?: string | null;
}; };
createdBy?: (number | null) | User;
updatedBy?: (number | null) | User;
updatedAt: string; updatedAt: string;
createdAt: string; createdAt: string;
_status?: ('draft' | 'published') | null;
} }
/** /**
* This interface was referenced by `Config`'s JSON-Schema * This interface was referenced by `Config`'s JSON-Schema
@ -647,11 +644,11 @@ export interface BlogsSelect<T extends boolean = true> {
description?: T; description?: T;
canonical_url?: T; canonical_url?: T;
}; };
is_published?: T;
createdBy?: T; createdBy?: T;
updatedBy?: T; updatedBy?: T;
updatedAt?: T; updatedAt?: T;
createdAt?: T; createdAt?: T;
_status?: T;
} }
/** /**
* This interface was referenced by `Config`'s JSON-Schema * This interface was referenced by `Config`'s JSON-Schema
@ -750,11 +747,8 @@ export interface PagesSelect<T extends boolean = true> {
description?: T; description?: T;
cannonical_url?: T; cannonical_url?: T;
}; };
createdBy?: T;
updatedBy?: T;
updatedAt?: T; updatedAt?: T;
createdAt?: T; createdAt?: T;
_status?: T;
} }
/** /**
* This interface was referenced by `Config`'s JSON-Schema * This interface was referenced by `Config`'s JSON-Schema

View File

@ -10,11 +10,24 @@ export async function fetchBlog(page: number | undefined, search: string = "") {
pagination: true, pagination: true,
limit: 6, limit: 6,
where: !search where: !search
? undefined ? {
: { is_published: {
title: { equals: true,
contains: search,
}, },
}
: {
and: [
{
is_published: {
equals: true,
},
},
{
title: {
contains: search,
},
},
],
}, },
}); });
@ -38,6 +51,9 @@ export async function fetchBlogDetail(slug: string | undefined) {
collection: "blogs", collection: "blogs",
where: { where: {
slug: { equals: slug }, slug: { equals: slug },
is_published: {
equals: true,
},
}, },
limit: 1, limit: 1,
pagination: false, pagination: false,

View File

@ -2,9 +2,11 @@ export const headerChangeOnScroll = () => {
const mainNav = document.querySelector(".main-nav"); const mainNav = document.querySelector(".main-nav");
const lightAfterScroll = document.querySelector(".light-after-scroll"); const lightAfterScroll = document.querySelector(".light-after-scroll");
if (window.scrollY > 0) { if (window.scrollY > 0) {
mainNav?.classList.remove("transparent");
mainNav?.classList.add("body-scrolled"); mainNav?.classList.add("body-scrolled");
if (lightAfterScroll) lightAfterScroll.classList.remove("dark"); if (lightAfterScroll) lightAfterScroll.classList.remove("dark");
} else if (window.scrollY === 0) { } else if (window.scrollY === 0) {
mainNav?.classList.add("transparent");
mainNav?.classList.remove("body-scrolled"); mainNav?.classList.remove("body-scrolled");
if (lightAfterScroll) lightAfterScroll.classList.add("dark"); if (lightAfterScroll) lightAfterScroll.classList.add("dark");
} }

View File

@ -1,17 +1,14 @@
import { FieldHook } from "payload"; import { FieldHook } from "payload";
const setAuthor: FieldHook = ({ value, req, data, field, operation }) => { const setAuthor: FieldHook = ({ req, operation, data, value }) => {
if (req.user && !!data) { // if (req.user && !!data) {
if (operation === "create") { // if (operation === "create") {
return req.user.id; // data.createdBy = req.user.id;
} else { // }
if (field.name === "updatedBy") { // data.updatedBy = req.user.id;
return req.user.id; // }
}
}
}
return value; return data;
}; };
export default setAuthor; export default setAuthor;