From 3e9ade8f994ab9624ab8437838c64ff311e2add8 Mon Sep 17 00:00:00 2001 From: RizqiSyahrendra Date: Wed, 12 Feb 2025 01:13:31 +0700 Subject: [PATCH 1/8] fix: comment unused page --- src/app/(main)/coba/page.tsx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/app/(main)/coba/page.tsx b/src/app/(main)/coba/page.tsx index 2058104..775cad4 100644 --- a/src/app/(main)/coba/page.tsx +++ b/src/app/(main)/coba/page.tsx @@ -1,9 +1,5 @@ import { ImageSliderBlock } from "@/components/Blocks/ImageSlider"; export default function CobaPage() { - return ( - <> - - - ); + return <>{/* */}; } From 275bb73659b61e8af03fb29015acf4bb7a357400 Mon Sep 17 00:00:00 2001 From: RizqiSyahrendra Date: Wed, 12 Feb 2025 02:42:13 +0700 Subject: [PATCH 2/8] fix: homepage & hero for build --- src/app/(main)/home-bg-video/page.tsx | 2 +- src/collections/Pages.ts | 3 ++- src/components/Blocks/RenderBlocks.tsx | 2 ++ src/components/Hero.tsx | 4 ++-- src/components/Homepage.tsx | 18 +++++------------- src/payload-types.ts | 23 +++++++++++++++++++++++ yarn.lock | 16 ++++++++++++++++ 7 files changed, 51 insertions(+), 17 deletions(-) diff --git a/src/app/(main)/home-bg-video/page.tsx b/src/app/(main)/home-bg-video/page.tsx index c7df79b..9317775 100644 --- a/src/app/(main)/home-bg-video/page.tsx +++ b/src/app/(main)/home-bg-video/page.tsx @@ -3,7 +3,7 @@ import Hero from "@/components/Hero"; import dynamic from "next/dynamic"; const ParallaxContainer = dynamic(() => import("@/components/ParallaxContainer"), { - ssr: true, + ssr: false, }); export default function Home1BGVideoMultiPage() { diff --git a/src/collections/Pages.ts b/src/collections/Pages.ts index 533af53..766bf8b 100644 --- a/src/collections/Pages.ts +++ b/src/collections/Pages.ts @@ -1,6 +1,7 @@ import { BeforeFooterBlock } from "@/blocks/BeforeFooter"; import { ContentBlock } from "@/blocks/Content"; import { HorizontalImageContentBlock } from "@/blocks/HorizontalImageContent"; +import { ImageSliderBlock } from "@/blocks/ImageSlider"; import { OurTeamBlock } from "@/blocks/OurTeam"; import formatSlug from "@/utils/formatSlug"; import { CollectionConfig } from "payload"; @@ -36,7 +37,7 @@ export const Pages: CollectionConfig = { label: "Page Layout", type: "blocks", minRows: 1, - blocks: [ContentBlock, BeforeFooterBlock, OurTeamBlock, HorizontalImageContentBlock], + blocks: [ContentBlock, BeforeFooterBlock, OurTeamBlock, HorizontalImageContentBlock, ImageSliderBlock], }, { name: "meta", diff --git a/src/components/Blocks/RenderBlocks.tsx b/src/components/Blocks/RenderBlocks.tsx index 37a92e3..646d7d1 100644 --- a/src/components/Blocks/RenderBlocks.tsx +++ b/src/components/Blocks/RenderBlocks.tsx @@ -5,12 +5,14 @@ import { ContentBlock } from "./Content"; import { BeforeFooterBlock } from "./BeforeFooter"; import { OurTeamBlock } from "./OurTeam"; import { HorizontalImageContentBlock } from "./HorizontalImageContent"; +import { ImageSliderBlock } from "./ImageSlider"; const blockComponents = { contentBlock: ContentBlock, beforeFooterBlock: BeforeFooterBlock, ourTeamBlock: OurTeamBlock, horizontalImageContentBlock: HorizontalImageContentBlock, + imageSliderBlock: ImageSliderBlock, }; export const RenderBlocks: React.FC<{ diff --git a/src/components/Hero.tsx b/src/components/Hero.tsx index 6b6adbd..dea36c5 100644 --- a/src/components/Hero.tsx +++ b/src/components/Hero.tsx @@ -60,9 +60,9 @@ export default function Hero6() { > Learn More - + diff --git a/src/components/Homepage.tsx b/src/components/Homepage.tsx index ac4d043..b4fdcd7 100644 --- a/src/components/Homepage.tsx +++ b/src/components/Homepage.tsx @@ -1,18 +1,10 @@ -import React from "react"; - +import { features4 } from "@/data/features"; +import Image from "next/image"; +import Link from "next/link"; +import Blog from "./Blogs/Blog"; +import Cta3 from "./cta3"; import Facts from "./Facts"; import Service from "./Service"; -import Image from "next/image"; -import Testimonials from "./Testimonials"; -import Blog from "./Blogs/Blog"; -import Newsletter from "./Newsletter"; -import Contact from "./Contacts/Contact"; -import Link from "next/link"; -import TestimonialsDark from "./TestimonialsDark"; -import ContactDark from "./ContactDark"; -import { features4 } from "@/data/features"; -import Cta3 from "./cta3"; -import { fetchBlog } from "@/services/payload/blog"; export default function homepage({ onePage = false, dark = false }) { return ( diff --git a/src/payload-types.ts b/src/payload-types.ts index 80374ba..56dede4 100644 --- a/src/payload-types.ts +++ b/src/payload-types.ts @@ -197,6 +197,17 @@ export interface Page { blockName?: string | null; blockType: 'horizontalImageContentBlock'; } + | { + images?: + | { + image?: (number | null) | Media; + id?: string | null; + }[] + | null; + id?: string | null; + blockName?: string | null; + blockType: 'imageSliderBlock'; + } )[] | null; meta?: { @@ -569,6 +580,18 @@ export interface PagesSelect { id?: T; blockName?: T; }; + imageSliderBlock?: + | T + | { + images?: + | T + | { + image?: T; + id?: T; + }; + id?: T; + blockName?: T; + }; }; meta?: | T diff --git a/yarn.lock b/yarn.lock index 0089dac..258077f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3370,6 +3370,13 @@ __metadata: languageName: node linkType: hard +"@types/animejs@npm:^3.1.13": + version: 3.1.13 + resolution: "@types/animejs@npm:3.1.13" + checksum: 10c0/6c1c977417a699bf4c3eaf6fdb948ea29011543f69370f98f7c7bac42aadb3309dda23a8415738f7480eed1a355b6ee130d1405339cd031a876774fc8e6f6c47 + languageName: node + linkType: hard + "@types/bootstrap@npm:^5.2.10": version: 5.2.10 resolution: "@types/bootstrap@npm:5.2.10" @@ -3781,6 +3788,13 @@ __metadata: languageName: node linkType: hard +"animejs@npm:^3.2.2": + version: 3.2.2 + resolution: "animejs@npm:3.2.2" + checksum: 10c0/f43dfcc0c743a2774e76fbfcb16a22350da7104f413d9d1b85c48128b0c078090642809deb631e21dfa0a40651111be39d9d7f694c9c1b70d8637ce8b6d63116 + languageName: node + linkType: hard + "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -7595,6 +7609,7 @@ __metadata: "@payloadcms/richtext-lexical": "npm:^3.20.0" "@payloadcms/storage-s3": "npm:^3.20.0" "@popperjs/core": "npm:2.11.8" + "@types/animejs": "npm:^3.1.13" "@types/bootstrap": "npm:^5.2.10" "@types/imagesloaded": "npm:^4.1.6" "@types/isotope-layout": "npm:^3.0.14" @@ -7602,6 +7617,7 @@ __metadata: "@types/react": "npm:^19" "@types/react-dom": "npm:^19" "@types/react-modal-video": "npm:^1.2.3" + animejs: "npm:^3.2.2" bootstrap: "npm:^5.1.3" dayjs: "npm:^1.11.13" eslint: "npm:^9" From 54f124a39d6b4d4d8e7bd406ebaded6ed4a494f5 Mon Sep 17 00:00:00 2001 From: RizqiSyahrendra Date: Wed, 12 Feb 2025 02:46:12 +0700 Subject: [PATCH 3/8] fix: yarn --- yarn.lock | 518 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 291 insertions(+), 227 deletions(-) diff --git a/yarn.lock b/yarn.lock index 0300460..8d561ce 100644 --- a/yarn.lock +++ b/yarn.lock @@ -793,7 +793,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.2": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.26.2": version: 7.26.2 resolution: "@babel/code-frame@npm:7.26.2" dependencies: @@ -804,16 +804,16 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.26.5": - version: 7.26.5 - resolution: "@babel/generator@npm:7.26.5" +"@babel/generator@npm:^7.26.8": + version: 7.26.8 + resolution: "@babel/generator@npm:7.26.8" dependencies: - "@babel/parser": "npm:^7.26.5" - "@babel/types": "npm:^7.26.5" + "@babel/parser": "npm:^7.26.8" + "@babel/types": "npm:^7.26.8" "@jridgewell/gen-mapping": "npm:^0.3.5" "@jridgewell/trace-mapping": "npm:^0.3.25" jsesc: "npm:^3.0.2" - checksum: 10c0/3be79e0aa03f38858a465d12ee2e468320b9122dc44fc85984713e32f16f4d77ce34a16a1a9505972782590e0b8d847b6f373621f9c6fafa1906d90f31416cb0 + checksum: 10c0/9467f197d285ac315d1fa419138d36a3bfd69ca4baf763e914acab12f5f38e5d231497f6528e80613b28e73bb28c66fcc50b250b1f277b1a4d38ac14b03e9674 languageName: node linkType: hard @@ -841,14 +841,14 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.5, @babel/parser@npm:^7.26.7": - version: 7.26.7 - resolution: "@babel/parser@npm:7.26.7" +"@babel/parser@npm:^7.26.8": + version: 7.26.8 + resolution: "@babel/parser@npm:7.26.8" dependencies: - "@babel/types": "npm:^7.26.7" + "@babel/types": "npm:^7.26.8" bin: parser: ./bin/babel-parser.js - checksum: 10c0/dcb08a4f2878ece33caffefe43b71488d753324bae7ca58d64bca3bc4af34dcfa1b58abdf9972516d76af760fceb25bb9294ca33461d56b31c5059ccfe32001f + checksum: 10c0/da04f26bae732a5b6790775a736b58c7876c28e62203c5097f043fd7273ef6debe5bfd7a4e670a6819f4549b215c7b9762c6358e44797b3c4d733defc8290781 languageName: node linkType: hard @@ -861,39 +861,46 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/template@npm:7.25.9" +"@babel/template@npm:^7.26.8": + version: 7.26.8 + resolution: "@babel/template@npm:7.26.8" dependencies: - "@babel/code-frame": "npm:^7.25.9" - "@babel/parser": "npm:^7.25.9" - "@babel/types": "npm:^7.25.9" - checksum: 10c0/ebe677273f96a36c92cc15b7aa7b11cc8bc8a3bb7a01d55b2125baca8f19cae94ff3ce15f1b1880fb8437f3a690d9f89d4e91f16fc1dc4d3eb66226d128983ab + "@babel/code-frame": "npm:^7.26.2" + "@babel/parser": "npm:^7.26.8" + "@babel/types": "npm:^7.26.8" + checksum: 10c0/90bc1085cbc090cbdd43af7b9dbb98e6bda96e55e0f565f17ebb8e97c2dfce866dc727ca02b8e08bd2662ba4fd3851907ba3c48618162c291221af17fb258213 languageName: node linkType: hard "@babel/traverse@npm:^7.25.9": - version: 7.26.7 - resolution: "@babel/traverse@npm:7.26.7" + version: 7.26.8 + resolution: "@babel/traverse@npm:7.26.8" dependencies: "@babel/code-frame": "npm:^7.26.2" - "@babel/generator": "npm:^7.26.5" - "@babel/parser": "npm:^7.26.7" - "@babel/template": "npm:^7.25.9" - "@babel/types": "npm:^7.26.7" + "@babel/generator": "npm:^7.26.8" + "@babel/parser": "npm:^7.26.8" + "@babel/template": "npm:^7.26.8" + "@babel/types": "npm:^7.26.8" debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: 10c0/b23a36ce40d2e4970741431c45d4f92e3f4c2895c0a421456516b2729bd9e17278846e01ee3d9039b0adf5fc5a071768061c17fcad040e74a5c3e39517449d5b + checksum: 10c0/0771d1ce0351628ad2e8dac56f0d59f706eb125c83fbcc039bde83088ba0a1477244ad5fb060802f90366cc4d7fa871e5009a292aef6205bcf83f2e01d1a0a5d languageName: node linkType: hard -"@babel/types@npm:^7.25.9, @babel/types@npm:^7.26.5, @babel/types@npm:^7.26.7": - version: 7.26.7 - resolution: "@babel/types@npm:7.26.7" +"@babel/types@npm:^7.25.9, @babel/types@npm:^7.26.8": + version: 7.26.8 + resolution: "@babel/types@npm:7.26.8" dependencies: "@babel/helper-string-parser": "npm:^7.25.9" "@babel/helper-validator-identifier": "npm:^7.25.9" - checksum: 10c0/7810a2bca97b13c253f07a0863a628d33dbe76ee3c163367f24be93bfaf4c8c0a325f73208abaaa050a6b36059efc2950c2e4b71fb109c0f07fa62221d8473d4 + checksum: 10c0/cd41ea47bb3d7baf2b3bf5e70e9c3a16f2eab699fab8575b2b31a7b1cb64166eb52c97124313863dde0581747bfc7a1810c838ad60b5b7ad1897d8004c7b95a9 + languageName: node + linkType: hard + +"@date-fns/tz@npm:1.2.0": + version: 1.2.0 + resolution: "@date-fns/tz@npm:1.2.0" + checksum: 10c0/411e9d4303b10951f6fd0189d18fb845f0d934a575df2176bc10daf664282c765fb6b057a977e446bbb1229151d89e7788978600a019f1fc24b5c75276d496bd languageName: node linkType: hard @@ -2340,13 +2347,20 @@ __metadata: languageName: node linkType: hard -"@next/env@npm:15.1.6, @next/env@npm:^15.1.5": +"@next/env@npm:15.1.6": version: 15.1.6 resolution: "@next/env@npm:15.1.6" checksum: 10c0/b68d541abe0cf5f8bab83633680c193ff1756e73b024ffb18c146502a588e038ee705c6064d9c39609a9c0097c563162a296ae43041b34e06831f5b72a215121 languageName: node linkType: hard +"@next/env@npm:^15.1.5": + version: 15.1.7 + resolution: "@next/env@npm:15.1.7" + checksum: 10c0/ad7761078552d8c88fe3c87224a3761d1bca82a15c747f417f561f92a4521898f227e3e7d2e8e65227a5ac8364ea8a2351c1febec5b5aa2ac1dcf016dd065edd + languageName: node + linkType: hard + "@next/eslint-plugin-next@npm:15.1.6": version: 15.1.6 resolution: "@next/eslint-plugin-next@npm:15.1.6" @@ -2469,10 +2483,10 @@ __metadata: linkType: hard "@payloadcms/db-postgres@npm:^3.20.0": - version: 3.22.0 - resolution: "@payloadcms/db-postgres@npm:3.22.0" + version: 3.23.0 + resolution: "@payloadcms/db-postgres@npm:3.23.0" dependencies: - "@payloadcms/drizzle": "npm:3.22.0" + "@payloadcms/drizzle": "npm:3.23.0" "@types/pg": "npm:8.10.2" console-table-printer: "npm:2.12.1" drizzle-kit: "npm:0.28.0" @@ -2482,14 +2496,14 @@ __metadata: to-snake-case: "npm:1.0.0" uuid: "npm:10.0.0" peerDependencies: - payload: 3.22.0 - checksum: 10c0/567da0b03716c0a3a1819e5559820bd6662caed7168798729d50be9b8bbc594072bcf9b86c3fd3cc4e3f4db0953e44746067f568111a3d219d244cb034aac79c + payload: 3.23.0 + checksum: 10c0/c4b073a5bb7724db4e1033adb1bda789b8822e382d4b2c6e2116c442ec0537bc15125718b084c971000d64655428f7c8923208a2e5bdc993cd2a9990e3f4627e languageName: node linkType: hard -"@payloadcms/drizzle@npm:3.22.0": - version: 3.22.0 - resolution: "@payloadcms/drizzle@npm:3.22.0" +"@payloadcms/drizzle@npm:3.23.0": + version: 3.23.0 + resolution: "@payloadcms/drizzle@npm:3.23.0" dependencies: console-table-printer: "npm:2.12.1" drizzle-orm: "npm:0.36.1" @@ -2497,25 +2511,25 @@ __metadata: to-snake-case: "npm:1.0.0" uuid: "npm:9.0.0" peerDependencies: - payload: 3.22.0 - checksum: 10c0/ae309226da0b5a5f710a94094b04a6a84c8d86f0d39f30b95b8c6b5fcab7aba60b3dfb54fd368d9c74addb0df4d5191d89bed6ace79751e154896ce00554c997 + payload: 3.23.0 + checksum: 10c0/b81e91fe111dda9bd1d87707524b70750a6e1b5e161445161f3f0876b54b4d83eb83dc4fe95fd92009b1e587f10ef9909b143f50806d8e0d1aea23de1bc65073 languageName: node linkType: hard -"@payloadcms/email-nodemailer@npm:3.22.0": - version: 3.22.0 - resolution: "@payloadcms/email-nodemailer@npm:3.22.0" +"@payloadcms/email-nodemailer@npm:3.23.0": + version: 3.23.0 + resolution: "@payloadcms/email-nodemailer@npm:3.23.0" dependencies: nodemailer: "npm:6.9.16" peerDependencies: - payload: 3.22.0 - checksum: 10c0/b1050d6251193c8343aecf82abf587ee0c60a5246be5d2049ec8f3fc04213d68b21b0f6cfb651defdcb8cd3968cf00d16013dfc402116c1686cfc0fb606d59ff + payload: 3.23.0 + checksum: 10c0/5bc5cc28d6206a1ea815e8931c955dbdef5f96f20882e3c8dbc0e08063aa271246196f0e87468a126401ec77367739bf598c3e92ad8f0c26e1903d3f9abaa728 languageName: node linkType: hard -"@payloadcms/graphql@npm:3.22.0": - version: 3.22.0 - resolution: "@payloadcms/graphql@npm:3.22.0" +"@payloadcms/graphql@npm:3.23.0": + version: 3.23.0 + resolution: "@payloadcms/graphql@npm:3.23.0" dependencies: graphql-scalars: "npm:1.22.2" pluralize: "npm:8.0.0" @@ -2523,21 +2537,21 @@ __metadata: tsx: "npm:4.19.2" peerDependencies: graphql: ^16.8.1 - payload: 3.22.0 + payload: 3.23.0 bin: payload-graphql: bin.js - checksum: 10c0/f8282a52aeb4e25703f21a21fd2f703456c81e916df78d9c078277cf4f3152df6e9dc1a0c1b69a7fba51fb2063e6d0d8ad9785c9adcb0b1dfb485f6d7e46a9ba + checksum: 10c0/4fbedfbb224765d1f36a8f0ccd113f14c3f70eb81ae584d0aec6c0910b1b5f2b133855c08553ad431d86f7788e86b511dc772deadd62c51e70747680320e7d2f languageName: node linkType: hard "@payloadcms/next@npm:^3.20.0": - version: 3.22.0 - resolution: "@payloadcms/next@npm:3.22.0" + version: 3.23.0 + resolution: "@payloadcms/next@npm:3.23.0" dependencies: "@dnd-kit/core": "npm:6.0.8" - "@payloadcms/graphql": "npm:3.22.0" - "@payloadcms/translations": "npm:3.22.0" - "@payloadcms/ui": "npm:3.22.0" + "@payloadcms/graphql": "npm:3.23.0" + "@payloadcms/translations": "npm:3.23.0" + "@payloadcms/ui": "npm:3.23.0" busboy: "npm:^1.6.0" dequal: "npm:2.0.3" file-type: "npm:19.3.0" @@ -2553,57 +2567,57 @@ __metadata: peerDependencies: graphql: ^16.8.1 next: ^15.0.0 - payload: 3.22.0 - checksum: 10c0/4a430d4cda8dc5eef49a2385902ad8f87bb2b14ae6d8e97cb2d84744f29056b5aae225b291422ac2f6bf415e0ff8cb07941c3fded90f48c760901b6c35359e97 + payload: 3.23.0 + checksum: 10c0/1c15d58d462de47c23f5ae2718ed00fb9af2aa305e5b58b3b67fd0f82526a98feff74a26b335307d6e8fdd672c19e677b40a6122116f96f5722f5ca09d82e033 languageName: node linkType: hard "@payloadcms/payload-cloud@npm:^3.20.0": - version: 3.22.0 - resolution: "@payloadcms/payload-cloud@npm:3.22.0" + version: 3.23.0 + resolution: "@payloadcms/payload-cloud@npm:3.23.0" dependencies: "@aws-sdk/client-cognito-identity": "npm:^3.614.0" "@aws-sdk/client-s3": "npm:^3.614.0" "@aws-sdk/credential-providers": "npm:^3.614.0" "@aws-sdk/lib-storage": "npm:^3.614.0" - "@payloadcms/email-nodemailer": "npm:3.22.0" + "@payloadcms/email-nodemailer": "npm:3.23.0" amazon-cognito-identity-js: "npm:^6.1.2" nodemailer: "npm:6.9.16" peerDependencies: - payload: 3.22.0 - checksum: 10c0/a469ff1e1ed606af6918c6339ee8f8f833eca5b73c73e04acf837fe2e41e4362d84ade712953b5afbb044e862ed90afc32bfef63e284313db38ee9946e4bc6b9 + payload: 3.23.0 + checksum: 10c0/3cc478e14f761bb3e75e346f5bb579792e8a09385b5397cd2aecd534887220a13b7965064a83bc56e9889255012fba8db0d607e673a10194995902823683a041 languageName: node linkType: hard -"@payloadcms/plugin-cloud-storage@npm:3.22.0": - version: 3.22.0 - resolution: "@payloadcms/plugin-cloud-storage@npm:3.22.0" +"@payloadcms/plugin-cloud-storage@npm:3.23.0": + version: 3.23.0 + resolution: "@payloadcms/plugin-cloud-storage@npm:3.23.0" dependencies: find-node-modules: "npm:^2.1.3" range-parser: "npm:^1.2.1" peerDependencies: - payload: 3.22.0 - checksum: 10c0/47f0d56806b91241120e05a4b644aa7468b76a6d01167878f49277361af4f903ba6d5d76a4408dee32425882e0ca4548b0f2e1a034ed51b14c7133f8709f5e05 + payload: 3.23.0 + checksum: 10c0/cd5482b0fa225507173b04df615694bcde7392917367f7902f2cf87ffdb6d97494d0508eb10e09dc46e08010699e1d696044be335b26269c5f4e42a67e32e8d8 languageName: node linkType: hard "@payloadcms/plugin-form-builder@npm:^3.20.0": - version: 3.22.0 - resolution: "@payloadcms/plugin-form-builder@npm:3.22.0" + version: 3.23.0 + resolution: "@payloadcms/plugin-form-builder@npm:3.23.0" dependencies: - "@payloadcms/ui": "npm:3.22.0" + "@payloadcms/ui": "npm:3.23.0" escape-html: "npm:^1.0.3" peerDependencies: - payload: 3.22.0 + payload: 3.23.0 react: ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020 react-dom: ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020 - checksum: 10c0/66f0d423525cb005d16b723fbc76122108bb8f3c9188d74ba7f86a953c2b4fb5c0dc074063a4c6551788260cf78134b40559a38b7ed3b5d1a52e297397d38fa3 + checksum: 10c0/6fff157ec1340620462495168987a6ecfe747c96126363fddb908f1ef029b90a406caec8afcee72725081e0134724b3fded55ef6a877245ddfa6014ce5d28b4c languageName: node linkType: hard "@payloadcms/richtext-lexical@npm:^3.20.0": - version: 3.22.0 - resolution: "@payloadcms/richtext-lexical@npm:3.22.0" + version: 3.23.0 + resolution: "@payloadcms/richtext-lexical@npm:3.23.0" dependencies: "@lexical/headless": "npm:0.21.0" "@lexical/html": "npm:0.21.0" @@ -2614,8 +2628,8 @@ __metadata: "@lexical/rich-text": "npm:0.21.0" "@lexical/selection": "npm:0.21.0" "@lexical/utils": "npm:0.21.0" - "@payloadcms/translations": "npm:3.22.0" - "@payloadcms/ui": "npm:3.22.0" + "@payloadcms/translations": "npm:3.23.0" + "@payloadcms/ui": "npm:3.23.0" "@types/uuid": "npm:10.0.0" acorn: "npm:8.12.1" bson-objectid: "npm:2.0.4" @@ -2642,48 +2656,49 @@ __metadata: "@lexical/selection": 0.21.0 "@lexical/table": 0.21.0 "@lexical/utils": 0.21.0 - "@payloadcms/next": 3.22.0 + "@payloadcms/next": 3.23.0 lexical: 0.21.0 - payload: 3.22.0 + payload: 3.23.0 react: ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020 react-dom: ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020 - checksum: 10c0/c1d42ec66e5b1fcc3fa129cab97c6b0d8d6c11ddd13ddcd670140f1f7499944f4b451cd3cd29546a6bacd72971cff7d5ffa36cb3401b45b7ad04371cdbb22992 + checksum: 10c0/9a4c34155c59117abc9d302440717c0e89b315445d9c3e14cc9f6c44e6d224c441f347df677f1ec99fd678096cd1c7f7ccd47d30a53944286648d3c3d6a91b9f languageName: node linkType: hard "@payloadcms/storage-s3@npm:^3.20.0": - version: 3.22.0 - resolution: "@payloadcms/storage-s3@npm:3.22.0" + version: 3.23.0 + resolution: "@payloadcms/storage-s3@npm:3.23.0" dependencies: "@aws-sdk/client-s3": "npm:^3.614.0" "@aws-sdk/lib-storage": "npm:^3.614.0" - "@payloadcms/plugin-cloud-storage": "npm:3.22.0" + "@payloadcms/plugin-cloud-storage": "npm:3.23.0" peerDependencies: - payload: 3.22.0 - checksum: 10c0/0bc182de9d6a64fa99ac3ee1eac9b7eeced1d7a791e1002c9517a5a652ce3a8bd4c59149341c240de12b2ad55e9e2577ca4c8dd0196b3b0bb40141592c4e0165 + payload: 3.23.0 + checksum: 10c0/0690b0c0c96ca9d46a70d2b489aaacdaa1b4c2b2f4ebf572da4cd27e5c47c6b883de3f352e9bdfe7d7757450c98baf3070ae7740c6106c8b72784078a90ad891 languageName: node linkType: hard -"@payloadcms/translations@npm:3.22.0": - version: 3.22.0 - resolution: "@payloadcms/translations@npm:3.22.0" +"@payloadcms/translations@npm:3.23.0": + version: 3.23.0 + resolution: "@payloadcms/translations@npm:3.23.0" dependencies: date-fns: "npm:4.1.0" - checksum: 10c0/4a599d70d0c5b60718d8a8905b087c8832224cd6f2e1f47da35b590c701052c04d9c9e072dc92b1e508dd253a56ccf18d56bbbe865dfa5f87371d6bd984e8017 + checksum: 10c0/bd11f84f7058a61590095725f4193bc3c09057fcf52259854993085825c2f4342238b4badf3297f0946a4c6e97d5ddb8405f4b2cb094e457fa6a8bafeec67a50 languageName: node linkType: hard -"@payloadcms/ui@npm:3.22.0": - version: 3.22.0 - resolution: "@payloadcms/ui@npm:3.22.0" +"@payloadcms/ui@npm:3.23.0": + version: 3.23.0 + resolution: "@payloadcms/ui@npm:3.23.0" dependencies: + "@date-fns/tz": "npm:1.2.0" "@dnd-kit/core": "npm:6.0.8" "@dnd-kit/sortable": "npm:7.0.2" "@faceless-ui/modal": "npm:3.0.0-beta.2" "@faceless-ui/scroll-info": "npm:2.0.0" "@faceless-ui/window-info": "npm:3.0.1" "@monaco-editor/react": "npm:4.6.0" - "@payloadcms/translations": "npm:3.22.0" + "@payloadcms/translations": "npm:3.23.0" bson-objectid: "npm:2.0.4" date-fns: "npm:4.1.0" dequal: "npm:2.0.3" @@ -2700,10 +2715,10 @@ __metadata: uuid: "npm:10.0.0" peerDependencies: next: ^15.0.0 - payload: 3.22.0 + payload: 3.23.0 react: ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020 react-dom: ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020 - checksum: 10c0/4100adec85954daeeceb5a1da867671b78000b7fc210ea2638aca60fef058dbf7b867469e6083024607dec91929c5a32921dc30a7f924dddf2e73e08cdd537dd + checksum: 10c0/20f08bcf12ebd2f1ec257f7d05d3c0dc67910e795b67b914f1dc0beefb3ad71bc8bc6bf3a0e81f2591af6a313be8613054375289dec707d80fcc9e8e3652b0b1 languageName: node linkType: hard @@ -3592,14 +3607,14 @@ __metadata: linkType: hard "@typescript-eslint/eslint-plugin@npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": - version: 8.23.0 - resolution: "@typescript-eslint/eslint-plugin@npm:8.23.0" + version: 8.24.0 + resolution: "@typescript-eslint/eslint-plugin@npm:8.24.0" dependencies: "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:8.23.0" - "@typescript-eslint/type-utils": "npm:8.23.0" - "@typescript-eslint/utils": "npm:8.23.0" - "@typescript-eslint/visitor-keys": "npm:8.23.0" + "@typescript-eslint/scope-manager": "npm:8.24.0" + "@typescript-eslint/type-utils": "npm:8.24.0" + "@typescript-eslint/utils": "npm:8.24.0" + "@typescript-eslint/visitor-keys": "npm:8.24.0" graphemer: "npm:^1.4.0" ignore: "npm:^5.3.1" natural-compare: "npm:^1.4.0" @@ -3608,64 +3623,64 @@ __metadata: "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.8.0" - checksum: 10c0/6c760a5f90748774f79a1b701f85fe6d99e89f289bc33993009987b0ffe2d13b3960ce595d452a937f3413af3918c76830659317242c05e49db40ceaca593033 + checksum: 10c0/50536dc948f66042666337dc133dabf31d65f92348976cbb4eaca0317ea919b37011d05098185fff124eea04b5be9b9e1d4e957f8644261f83de998847558b7b languageName: node linkType: hard "@typescript-eslint/parser@npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": - version: 8.23.0 - resolution: "@typescript-eslint/parser@npm:8.23.0" + version: 8.24.0 + resolution: "@typescript-eslint/parser@npm:8.24.0" dependencies: - "@typescript-eslint/scope-manager": "npm:8.23.0" - "@typescript-eslint/types": "npm:8.23.0" - "@typescript-eslint/typescript-estree": "npm:8.23.0" - "@typescript-eslint/visitor-keys": "npm:8.23.0" + "@typescript-eslint/scope-manager": "npm:8.24.0" + "@typescript-eslint/types": "npm:8.24.0" + "@typescript-eslint/typescript-estree": "npm:8.24.0" + "@typescript-eslint/visitor-keys": "npm:8.24.0" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.8.0" - checksum: 10c0/f9e0f83a6dd97a9049d4ce23d660a1d4d5f3c57be8efc68e2258e6b2d5b823086d188b534f791a3412ef10d211fe4916b378254728150094c4f8b0ab44aae2a7 + checksum: 10c0/3d2a22435714cc89e29bf05554538010354a52ff6ccb7321d5d68ddb27770f046970445e571c020c23994f0abc7ed271ce06d03bba6f590bd289d49006cc7208 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.23.0": - version: 8.23.0 - resolution: "@typescript-eslint/scope-manager@npm:8.23.0" +"@typescript-eslint/scope-manager@npm:8.24.0": + version: 8.24.0 + resolution: "@typescript-eslint/scope-manager@npm:8.24.0" dependencies: - "@typescript-eslint/types": "npm:8.23.0" - "@typescript-eslint/visitor-keys": "npm:8.23.0" - checksum: 10c0/625b524a4fc25667b20f3541da84674af9c2abfac6596e30f7a40085513172bf1aac125488b32885894e3ef6596a0d06dec9a65ed4562884e0bca87a758600fa + "@typescript-eslint/types": "npm:8.24.0" + "@typescript-eslint/visitor-keys": "npm:8.24.0" + checksum: 10c0/7c47f6b06fb53dbd8bf7b526faad20ed4336f63356f4f3ee6194676b9c10a5c0a25b8449b9254b7a8952dbb859601f8b10617249b767ea11b3b35135822c7ef0 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:8.23.0": - version: 8.23.0 - resolution: "@typescript-eslint/type-utils@npm:8.23.0" +"@typescript-eslint/type-utils@npm:8.24.0": + version: 8.24.0 + resolution: "@typescript-eslint/type-utils@npm:8.24.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:8.23.0" - "@typescript-eslint/utils": "npm:8.23.0" + "@typescript-eslint/typescript-estree": "npm:8.24.0" + "@typescript-eslint/utils": "npm:8.24.0" debug: "npm:^4.3.4" ts-api-utils: "npm:^2.0.1" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.8.0" - checksum: 10c0/a98dc2f2f75ec2132176428011ba620ad5b641a04e9e18471a7b9f979f6966a76aeaf6e51072c5364de68f83832a3a77b04518ec65c3092dadbd033d03fb5e35 + checksum: 10c0/296271f142d3096e9fdd892441657038d3d7fd0508dbfb84147658d1c4559256a9ac0c33af26fb9e6f18e5f0fdd59bdd6149c28fba580e32ff3b1bf4301eab6a languageName: node linkType: hard -"@typescript-eslint/types@npm:8.23.0": - version: 8.23.0 - resolution: "@typescript-eslint/types@npm:8.23.0" - checksum: 10c0/78737a14e8469e33212d9bbc26d6880bca3f8e47764273eb4c662f5ed38d0b35c626d646d4a8e9a6ee64a0e352b18dd36422e59ce217362b5af473b79d058b35 +"@typescript-eslint/types@npm:8.24.0": + version: 8.24.0 + resolution: "@typescript-eslint/types@npm:8.24.0" + checksum: 10c0/d3fe148315a37c272e0d077fd3d05e10c7c3266c006605c94135d587a5cd58e34a7d9ee0bf43bfbe730545cfa329e836b1e5f6b8aabfaf56e2b524578e1b2d26 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:8.23.0": - version: 8.23.0 - resolution: "@typescript-eslint/typescript-estree@npm:8.23.0" +"@typescript-eslint/typescript-estree@npm:8.24.0": + version: 8.24.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.24.0" dependencies: - "@typescript-eslint/types": "npm:8.23.0" - "@typescript-eslint/visitor-keys": "npm:8.23.0" + "@typescript-eslint/types": "npm:8.24.0" + "@typescript-eslint/visitor-keys": "npm:8.24.0" debug: "npm:^4.3.4" fast-glob: "npm:^3.3.2" is-glob: "npm:^4.0.3" @@ -3674,32 +3689,32 @@ __metadata: ts-api-utils: "npm:^2.0.1" peerDependencies: typescript: ">=4.8.4 <5.8.0" - checksum: 10c0/2cc8defb3d9b25b899a62c6b6ca26c442433bf95f626f6275935e2754d9a74abb0015c737de27038b0f378273e67e61120d9cf2941c44848e4bffbbc297fdf74 + checksum: 10c0/38732a9084131f0bfab3c0105367604d4b3017d4359f49562ac9e95b5490c798d38873f0fef5aafd2e1e78a57b079496d935c71649ea4b5be61bbff27055ebad languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.23.0": - version: 8.23.0 - resolution: "@typescript-eslint/utils@npm:8.23.0" +"@typescript-eslint/utils@npm:8.24.0": + version: 8.24.0 + resolution: "@typescript-eslint/utils@npm:8.24.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" - "@typescript-eslint/scope-manager": "npm:8.23.0" - "@typescript-eslint/types": "npm:8.23.0" - "@typescript-eslint/typescript-estree": "npm:8.23.0" + "@typescript-eslint/scope-manager": "npm:8.24.0" + "@typescript-eslint/types": "npm:8.24.0" + "@typescript-eslint/typescript-estree": "npm:8.24.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.8.0" - checksum: 10c0/8967cf6543b1df2fb8d29086a0d35f5f7623e935706ad7c5bfcc6123e6fb08a767be1770601d481d815022bec43422730c6c8035892f23cd11cdadb16176b418 + checksum: 10c0/c08cf9668d6ece98a0d0e7a87b62009f37931d3d799560c5084a59c90c7f22c45acc5022c104b5bd1899d41c46fba24276fdb31e0742402f804f66285943c150 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:8.23.0": - version: 8.23.0 - resolution: "@typescript-eslint/visitor-keys@npm:8.23.0" +"@typescript-eslint/visitor-keys@npm:8.24.0": + version: 8.24.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.24.0" dependencies: - "@typescript-eslint/types": "npm:8.23.0" + "@typescript-eslint/types": "npm:8.24.0" eslint-visitor-keys: "npm:^4.2.0" - checksum: 10c0/a406f78aa18b4efb2adf26e3a6ca48c9a6f2cc9545e083b50efaaf90f0a80d2bea79ceda51da1f109706d4138756b0978a323b9176c9a6a519e87168851e7e16 + checksum: 10c0/ae3dcabbeb5213282806de1a7bc31c657189aae4225f2847356bc3110de46a43a82595634e0f123f6c8ca53ae6520c2acf7ac59a91eeb83c0f763166e3982f5c languageName: node linkType: hard @@ -4212,9 +4227,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.30001579": - version: 1.0.30001698 - resolution: "caniuse-lite@npm:1.0.30001698" - checksum: 10c0/f3128454e6222b86349b62971501b8ebfc49faa9484398176f674293ea85091e1ca96862bc617dcac4d07850cfc5ef5173ebad03d63aa1197b6a8bf3cc46d745 + version: 1.0.30001699 + resolution: "caniuse-lite@npm:1.0.30001699" + checksum: 10c0/e87b3a0602c3124131f6a21f1eb262378e17a2ee3089e3c472ac8b9caa85cf7d6a219655379302c29c6f10a74051f2a712639d7f98ee0444c73fefcbaf25d519 languageName: node linkType: hard @@ -5504,8 +5519,8 @@ __metadata: linkType: hard "eslint@npm:^9": - version: 9.20.0 - resolution: "eslint@npm:9.20.0" + version: 9.20.1 + resolution: "eslint@npm:9.20.1" dependencies: "@eslint-community/eslint-utils": "npm:^4.2.0" "@eslint-community/regexpp": "npm:^4.12.1" @@ -5548,7 +5563,7 @@ __metadata: optional: true bin: eslint: bin/eslint.js - checksum: 10c0/5eb2d9b5ed85a0b022871d19719417d110afb07a4abfedd856ad03d9a821def5f6bc31d7c407ca27f56e5e66e39375300fd2b877017245eb99c44060d6c983bd + checksum: 10c0/056789dd5a00897730376f8c0a191e22840e97b7276916068ec096341cb2ec3a918c8bd474bf94ccd7b457ad9fbc16e5c521a993c7cc6ebcf241933e2fd378b0 languageName: node linkType: hard @@ -5885,11 +5900,11 @@ __metadata: linkType: hard "for-each@npm:^0.3.3": - version: 0.3.4 - resolution: "for-each@npm:0.3.4" + version: 0.3.5 + resolution: "for-each@npm:0.3.5" dependencies: is-callable: "npm:^1.2.7" - checksum: 10c0/6b2016c0a0fe3107c70a233923cac74f07bedb5a1847636039fa6bcc3df09aefa554cfec23c3342ad365acac1f95e799d9f8e220cb82a4c7b8a84f969234302f + checksum: 10c0/0e0b50f6a843a282637d43674d1fb278dda1dd85f4f99b640024cfb10b85058aac0cc781bf689d5fe50b4b7f638e91e548560723a4e76e04fe96ae35ef039cee languageName: node linkType: hard @@ -7637,6 +7652,7 @@ __metadata: react: "npm:^19.0.0" react-dom: "npm:^19.0.0" react-hook-form: "npm:^7.54.2" + react-icons: "npm:^5.4.0" react-modal-video: "npm:^2.0.2" react-photoswipe-gallery: "npm:^3.0.1" rellax: "npm:^1.12.1" @@ -7761,8 +7777,8 @@ __metadata: linkType: hard "node-gyp@npm:latest": - version: 11.0.0 - resolution: "node-gyp@npm:11.0.0" + version: 11.1.0 + resolution: "node-gyp@npm:11.1.0" dependencies: env-paths: "npm:^2.2.0" exponential-backoff: "npm:^3.1.1" @@ -7776,7 +7792,7 @@ __metadata: which: "npm:^5.0.0" bin: node-gyp: bin/node-gyp.js - checksum: 10c0/a3b885bbee2d271f1def32ba2e30ffcf4562a3db33af06b8b365e053153e2dd2051b9945783c3c8e852d26a0f20f65b251c7e83361623383a99635c0280ee573 + checksum: 10c0/c38977ce502f1ea41ba2b8721bd5b49bc3d5b3f813eabfac8414082faf0620ccb5211e15c4daecc23ed9f5e3e9cc4da00e575a0bcfc2a95a069294f2afa1e0cd languageName: node linkType: hard @@ -8087,12 +8103,12 @@ __metadata: linkType: hard "payload@npm:^3.20.0": - version: 3.22.0 - resolution: "payload@npm:3.22.0" + version: 3.23.0 + resolution: "payload@npm:3.23.0" dependencies: "@monaco-editor/react": "npm:4.6.0" "@next/env": "npm:^15.1.5" - "@payloadcms/translations": "npm:3.22.0" + "@payloadcms/translations": "npm:3.23.0" "@types/busboy": "npm:1.5.4" ajv: "npm:8.17.1" bson-objectid: "npm:2.0.4" @@ -8124,7 +8140,7 @@ __metadata: graphql: ^16.8.1 bin: payload: bin.js - checksum: 10c0/76e9041bdeb85553011cbeedc8dc8f939b459efcda6bf8aa323b4241f25a0be1d961b02bfccb1855d3b28eb9357401fffa069bcb448cfc82ef01984d47c70885 + checksum: 10c0/73d2a19e294e045e8ba4971be5a260d862f02ac072139d5fb8141c3f81322f83df17844f7a3abc4efc7e1edf2ecff240b09c6be8aaa107fbb0b2321a057e0e2c languageName: node linkType: hard @@ -8171,18 +8187,18 @@ __metadata: linkType: hard "pg-pool@npm:^3.6.1": - version: 3.7.0 - resolution: "pg-pool@npm:3.7.0" + version: 3.7.1 + resolution: "pg-pool@npm:3.7.1" peerDependencies: pg: ">=8.0" - checksum: 10c0/9128673cf941f288c0cb1a74ca959a9b4f6075ef73b2cc7dece5d4db3dd7043784869e7c12bce2e69ca0df22132a419cc45c2050b4373632856fe8bae9eb94b5 + checksum: 10c0/65bff013102684774f4cfdffbfe0a2b0614252234561d391608f7fd915477e44f5fd0e1968ecc2f42032dcf8bac241d2f724c4f3df90384567d22df37dd3b6ba languageName: node linkType: hard "pg-protocol@npm:*, pg-protocol@npm:^1.6.0": - version: 1.7.0 - resolution: "pg-protocol@npm:1.7.0" - checksum: 10c0/c4af854d9b843c808231c0040fed89f2b9101006157df8da2bb2f62a7dde702de748d852228dc22df41cc7ffddfb526af3bcb34b278b581e9f76a060789186c1 + version: 1.7.1 + resolution: "pg-protocol@npm:1.7.1" + checksum: 10c0/3168d407ddc4c0fa2403eb9b49205399d4bc53dadbafdfcc5d25fa61b860a31c25df25704cf14c8140c80f0a41061d586e5fd5ce9bf800dfb91e9ce810bc2c37 languageName: node linkType: hard @@ -8445,13 +8461,13 @@ __metadata: linkType: hard "postcss@npm:^8, postcss@npm:^8.4.47": - version: 8.5.1 - resolution: "postcss@npm:8.5.1" + version: 8.5.2 + resolution: "postcss@npm:8.5.2" dependencies: nanoid: "npm:^3.3.8" picocolors: "npm:^1.1.1" source-map-js: "npm:^1.2.1" - checksum: 10c0/c4d90c59c98e8a0c102b77d3f4cac190f883b42d63dc60e2f3ed840f16197c0c8e25a4327d2e9a847b45a985612317dc0534178feeebd0a1cf3eb0eecf75cae4 + checksum: 10c0/3044d49bc725029ab62292e8bf9849741251b95f3b754e191bf8b4025414d40ec3b4ac05c5a563d4b50060b5c8e96683eb4d783d8d8fa3867eb7b763cbe66127 languageName: node linkType: hard @@ -8539,11 +8555,11 @@ __metadata: linkType: hard "prettier@npm:^3.2.5, prettier@npm:^3.4.2": - version: 3.4.2 - resolution: "prettier@npm:3.4.2" + version: 3.5.0 + resolution: "prettier@npm:3.5.0" bin: prettier: bin/prettier.cjs - checksum: 10c0/99e076a26ed0aba4ebc043880d0f08bbb8c59a4c6641cdee6cdadf2205bdd87aa1d7823f50c3aea41e015e99878d37c58d7b5f0e663bba0ef047f94e36b96446 + checksum: 10c0/6c355d74c377f5622953229d92477e8b9779162e848db90fd7e06c431deb73585d31fafc4516cf5868917825b97b9ec7c87c8d8b8e03ccd9fc9c0b7699d1a650 languageName: node linkType: hard @@ -8734,6 +8750,15 @@ __metadata: languageName: node linkType: hard +"react-icons@npm:^5.4.0": + version: 5.4.0 + resolution: "react-icons@npm:5.4.0" + peerDependencies: + react: "*" + checksum: 10c0/698b0c4616870152d86de2585fb709bf3eeb9292d971d689965dade5f0ee71cdc92d2125b728ab220cc39a4c6d6bad1ed526b9b934ab39a7b6001bc23b73ee16 + languageName: node + linkType: hard + "react-image-crop@npm:10.1.8": version: 10.1.8 resolution: "react-image-crop@npm:10.1.8" @@ -9348,12 +9373,12 @@ __metadata: linkType: hard "socks@npm:^2.8.3": - version: 2.8.3 - resolution: "socks@npm:2.8.3" + version: 2.8.4 + resolution: "socks@npm:2.8.4" dependencies: ip-address: "npm:^9.0.5" smart-buffer: "npm:^4.2.0" - checksum: 10c0/d54a52bf9325165770b674a67241143a3d8b4e4c8884560c4e0e078aace2a728dffc7f70150660f51b85797c4e1a3b82f9b7aa25e0a0ceae1a243365da5c51a7 + checksum: 10c0/00c3271e233ccf1fb83a3dd2060b94cc37817e0f797a93c560b9a7a86c4a0ec2961fb31263bdd24a3c28945e24868b5f063cd98744171d9e942c513454b50ae5 languageName: node linkType: hard @@ -10366,69 +10391,108 @@ __metadata: linkType: hard "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da + languageName: node + linkType: hard -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 + languageName: node + linkType: hard -ws@^8.16.0: - version "8.18.0" - resolved "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz" - integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== +"ws@npm:^8.16.0": + version: 8.18.0 + resolution: "ws@npm:8.18.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/25eb33aff17edcb90721ed6b0eb250976328533ad3cd1a28a274bd263682e7296a6591ff1436d6cbc50fa67463158b062f9d1122013b361cec99a05f84680e06 + languageName: node + linkType: hard -xss@^1.0.6: - version "1.0.15" - resolved "https://registry.npmjs.org/xss/-/xss-1.0.15.tgz" - integrity sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg== +"xss@npm:^1.0.6": + version: 1.0.15 + resolution: "xss@npm:1.0.15" dependencies: - commander "^2.20.3" - cssfilter "0.0.10" + commander: "npm:^2.20.3" + cssfilter: "npm:0.0.10" + bin: + xss: bin/xss + checksum: 10c0/9b31bee62a208f78e2b7bc8154e3ee87d980f4661dc4ab850ce6f4de7bc50eb152f0bdc13fa759ff8ab6d9bfdf8c0d79cf9f6f86249872b92181912309bccd08 + languageName: node + linkType: hard -xtend@^4.0.0: - version "4.0.2" - resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== +"xtend@npm:^4.0.0": + version: 4.0.2 + resolution: "xtend@npm:4.0.2" + checksum: 10c0/366ae4783eec6100f8a02dff02ac907bf29f9a00b82ac0264b4d8b832ead18306797e283cf19de776538babfdcb2101375ec5646b59f08c52128ac4ab812ed0e + languageName: node + linkType: hard -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard -yaml@^2.3.4: - version "2.7.0" - resolved "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz" - integrity sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA== +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 + languageName: node + linkType: hard -yjs@>=13.5.22: - version "13.6.23" - resolved "https://registry.npmjs.org/yjs/-/yjs-13.6.23.tgz" - integrity sha512-ExtnT5WIOVpkL56bhLeisG/N5c4fmzKn4k0ROVfJa5TY2QHbH7F0Wu2T5ZhR7ErsFWQEFafyrnSI8TPKVF9Few== - dependencies: - lib0 "^0.2.99" +"yaml@npm:^1.10.0": + version: 1.10.2 + resolution: "yaml@npm:1.10.2" + checksum: 10c0/5c28b9eb7adc46544f28d9a8d20c5b3cb1215a886609a2fd41f51628d8aaa5878ccd628b755dbcd29f6bb4921bd04ffbc6dcc370689bb96e594e2f9813d2605f + languageName: node + linkType: hard -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +"yaml@npm:^2.3.4": + version: 2.7.0 + resolution: "yaml@npm:2.7.0" + bin: + yaml: bin.mjs + checksum: 10c0/886a7d2abbd70704b79f1d2d05fe9fb0aa63aefb86e1cb9991837dced65193d300f5554747a872b4b10ae9a12bc5d5327e4d04205f70336e863e35e89d8f4ea9 + languageName: node + linkType: hard -zwitch@^2.0.0: - version "2.0.4" - resolved "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz" - integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f + languageName: node + linkType: hard + +"zwitch@npm:^2.0.0": + version: 2.0.4 + resolution: "zwitch@npm:2.0.4" + checksum: 10c0/3c7830cdd3378667e058ffdb4cf2bb78ac5711214e2725900873accb23f3dfe5f9e7e5a06dcdc5f29605da976fc45c26d9a13ca334d6eea2245a15e77b8fc06e + languageName: node + linkType: hard From d586c6ab1c37861d8ee3635cd8c9147ff38a604d Mon Sep 17 00:00:00 2001 From: RizqiSyahrendra Date: Wed, 12 Feb 2025 02:55:36 +0700 Subject: [PATCH 4/8] fix: slider image --- eslint.config.mjs | 3 ++- src/app/(main)/coba/page.tsx | 2 -- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 14cbcff..93fe29e 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -15,7 +15,8 @@ const eslintConfig = [ rules: { "@typescript-eslint/no-unused-vars": "warn", "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/ban-ts-comment": "off" + "@typescript-eslint/ban-ts-comment": "off", + "@next/next/no-html-link-for-pages": "off" }, }, ]; diff --git a/src/app/(main)/coba/page.tsx b/src/app/(main)/coba/page.tsx index 775cad4..0eab375 100644 --- a/src/app/(main)/coba/page.tsx +++ b/src/app/(main)/coba/page.tsx @@ -1,5 +1,3 @@ -import { ImageSliderBlock } from "@/components/Blocks/ImageSlider"; - export default function CobaPage() { return <>{/* */}; } From cb23d7796704cb7f51e1d348ff44ccc9799e1f91 Mon Sep 17 00:00:00 2001 From: RizqiSyahrendra Date: Wed, 12 Feb 2025 10:42:17 +0700 Subject: [PATCH 5/8] feat(blog): share --- src/app/(main)/blog/[slug]/page.tsx | 11 +++--- src/components/Blogs/BlogDetail.tsx | 22 ++++++++++++ src/middleware.ts | 34 ++++++++++++++++++ src/payload-types.ts | 54 +++++++++++++++++++++++++++++ 4 files changed, 116 insertions(+), 5 deletions(-) create mode 100644 src/middleware.ts diff --git a/src/app/(main)/blog/[slug]/page.tsx b/src/app/(main)/blog/[slug]/page.tsx index 9b29800..0003646 100644 --- a/src/app/(main)/blog/[slug]/page.tsx +++ b/src/app/(main)/blog/[slug]/page.tsx @@ -5,21 +5,22 @@ import Image from "next/image"; import { Suspense } from "react"; export async function generateMetadata({ params }: { params: Promise<{ slug: string }> }): Promise { + const name = "Cochise Oncology"; const slug = (await params).slug; const blog = await fetchBlogDetail(slug); if (!blog) { return { - title: "Cochise Oncology", - description: "Cochise Oncology", + title: name, + description: name, openGraph: { - title: "Cochise Oncology", - description: "Cochise Oncology", + title: name, + description: name, }, }; } - const title = `${blog.data.title} - Cochise Oncology`; + const title = `${blog.data.title} - ${name}`; return { title: title, diff --git a/src/components/Blogs/BlogDetail.tsx b/src/components/Blogs/BlogDetail.tsx index 9171599..745c0a5 100644 --- a/src/components/Blogs/BlogDetail.tsx +++ b/src/components/Blogs/BlogDetail.tsx @@ -1,6 +1,8 @@ import { fetchBlogDetail } from "@/services/payload/blog"; import { RichText } from "@payloadcms/richtext-lexical/react"; +import { headers } from "next/headers"; import Image from "next/image"; +import { FaFacebook, FaLinkedin, FaTwitter } from "react-icons/fa"; export interface BlogDetailProps { slug: string; @@ -8,6 +10,14 @@ export interface BlogDetailProps { export default async function BlogDetail({ slug }: BlogDetailProps) { const data = await fetchBlogDetail(slug); + const headersList = await headers(); + const fullUrl = headersList.get("x-full-url"); + + const shareUrl = { + facebook: `https://www.facebook.com/sharer/sharer.php?u=${fullUrl}`, + linkedin: `https://www.linkedin.com/sharing/share-offsite/?url=${fullUrl}`, + twitter: `https://twitter.com/intent/tweet?url=${fullUrl}`, + }; if (!data) return <>; @@ -32,6 +42,18 @@ export default async function BlogDetail({ slug }: BlogDetailProps) { {/* End Author, Categories, Comments */} + + diff --git a/src/middleware.ts b/src/middleware.ts new file mode 100644 index 0000000..bb27fd2 --- /dev/null +++ b/src/middleware.ts @@ -0,0 +1,34 @@ +// middleware.ts +import { NextResponse } from "next/server"; +import type { NextRequest } from "next/server"; + +// the following code is taken from : https://nextjs.org/docs/advanced-features/middleware#setting-headers +export function middleware(request: NextRequest) { + const protocol = request.headers.get("x-forwarded-proto") || "http"; // Default to 'http' if not provided + const host = request.headers.get("x-forwarded-host") || request.nextUrl.hostname; + const path = request.nextUrl.pathname + request.nextUrl.search; + // Construct the full URL + const fullUrl = `${protocol}://${host}${path}`; + request.headers.set("x-full-url", fullUrl); + + return NextResponse.next({ + request: { + // New request headers + headers: request.headers, + }, + }); +} + +// the following code has been copied from https://nextjs.org/docs/advanced-features/middleware#matcher +export const config = { + matcher: [ + /* + * Match all request paths except for the ones starting with: + * - api (API routes) + * - _next/static (static files) + * - _next/image (image optimization files) + * - favicon.ico, sitemap.xml, robots.txt (metadata files) + */ + "/((?!api|_next/static|_next/image|assets|sw.js|favicon.ico|sitemap.xml|robots.txt).*)", + ], +}; diff --git a/src/payload-types.ts b/src/payload-types.ts index 56dede4..19120e2 100644 --- a/src/payload-types.ts +++ b/src/payload-types.ts @@ -6,6 +6,60 @@ * and re-run `payload generate:types` to regenerate this file. */ +/** + * Supported timezones in IANA format. + * + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "supportedTimezones". + */ +export type SupportedTimezones = + | 'Pacific/Midway' + | 'Pacific/Niue' + | 'Pacific/Honolulu' + | 'Pacific/Rarotonga' + | 'America/Anchorage' + | 'Pacific/Gambier' + | 'America/Los_Angeles' + | 'America/Tijuana' + | 'America/Denver' + | 'America/Phoenix' + | 'America/Chicago' + | 'America/Guatemala' + | 'America/New_York' + | 'America/Bogota' + | 'America/Caracas' + | 'America/Santiago' + | 'America/Buenos_Aires' + | 'America/Sao_Paulo' + | 'Atlantic/South_Georgia' + | 'Atlantic/Azores' + | 'Atlantic/Cape_Verde' + | 'Europe/London' + | 'Europe/Berlin' + | 'Africa/Lagos' + | 'Europe/Athens' + | 'Africa/Cairo' + | 'Europe/Moscow' + | 'Asia/Riyadh' + | 'Asia/Dubai' + | 'Asia/Baku' + | 'Asia/Karachi' + | 'Asia/Tashkent' + | 'Asia/Calcutta' + | 'Asia/Dhaka' + | 'Asia/Almaty' + | 'Asia/Jakarta' + | 'Asia/Bangkok' + | 'Asia/Shanghai' + | 'Asia/Singapore' + | 'Asia/Tokyo' + | 'Asia/Seoul' + | 'Australia/Sydney' + | 'Pacific/Guam' + | 'Pacific/Noumea' + | 'Pacific/Auckland' + | 'Pacific/Fiji'; + export interface Config { auth: { users: UserAuthOperations; From 3433d3a5973f6859fb5ae71934a44623c3ab4c5c Mon Sep 17 00:00:00 2001 From: RizqiSyahrendra Date: Wed, 12 Feb 2025 12:55:08 +0700 Subject: [PATCH 6/8] feat: testimonials screen and cta --- src/app/(main)/testimonials/page.tsx | 34 ++++ src/app/frontend-sample-payload/layout.tsx | 19 -- src/app/frontend-sample-payload/page.tsx | 59 ------- src/app/frontend-sample-payload/styles.css | 164 ------------------ src/app/my-route/route.ts | 14 -- src/components/Blocks/BeforeFooter/index.tsx | 31 ++-- src/components/Blocks/GoogleReviews/index.tsx | 62 ++++++- src/components/Homepage.tsx | 2 +- src/components/Ratings/CardStarRating.tsx | 13 +- 9 files changed, 117 insertions(+), 281 deletions(-) create mode 100644 src/app/(main)/testimonials/page.tsx delete mode 100644 src/app/frontend-sample-payload/layout.tsx delete mode 100644 src/app/frontend-sample-payload/page.tsx delete mode 100644 src/app/frontend-sample-payload/styles.css delete mode 100644 src/app/my-route/route.ts diff --git a/src/app/(main)/testimonials/page.tsx b/src/app/(main)/testimonials/page.tsx new file mode 100644 index 0000000..2ef089b --- /dev/null +++ b/src/app/(main)/testimonials/page.tsx @@ -0,0 +1,34 @@ +import { BeforeFooterBlock } from "@/components/Blocks/BeforeFooter"; +import { GoogleReviewsBlock } from "@/components/Blocks/GoogleReviews"; +import Image from "next/image"; + +export const metadata = { + title: "Testimonials - Cochise Oncology", + description: "Testimonials - Cochise Oncology", +}; + +export default function SlickAboutPage() { + return ( + <> +
+ {/* */} +
+ +
+ {/* */} + +
+
+
+

Testimonials

+
+
+
+
+
+ +
+ + + ); +} diff --git a/src/app/frontend-sample-payload/layout.tsx b/src/app/frontend-sample-payload/layout.tsx deleted file mode 100644 index e7681f7..0000000 --- a/src/app/frontend-sample-payload/layout.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react' -import './styles.css' - -export const metadata = { - description: 'A blank template using Payload in a Next.js app.', - title: 'Payload Blank Template', -} - -export default async function RootLayout(props: { children: React.ReactNode }) { - const { children } = props - - return ( - - -
{children}
- - - ) -} diff --git a/src/app/frontend-sample-payload/page.tsx b/src/app/frontend-sample-payload/page.tsx deleted file mode 100644 index d0e8d64..0000000 --- a/src/app/frontend-sample-payload/page.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import { headers as getHeaders } from 'next/headers.js' -import Image from 'next/image' -import { getPayload } from 'payload' -import React from 'react' -import { fileURLToPath } from 'url' - -import config from '@/payload.config' -import './styles.css' - -export default async function HomePage() { - const headers = await getHeaders() - const payloadConfig = await config - const payload = await getPayload({ config: payloadConfig }) - const { user } = await payload.auth({ headers }) - - const fileURL = `vscode://file/${fileURLToPath(import.meta.url)}` - - return ( -
-
- - - Payload Logo - - {!user &&

Welcome to your new project.

} - {user &&

Welcome back, {user.email}

} - -
-
-

Update this page by editing

- - app/(frontend)/page.tsx - -
-
- ) -} diff --git a/src/app/frontend-sample-payload/styles.css b/src/app/frontend-sample-payload/styles.css deleted file mode 100644 index d1fb941..0000000 --- a/src/app/frontend-sample-payload/styles.css +++ /dev/null @@ -1,164 +0,0 @@ -:root { - --font-mono: 'Roboto Mono', monospace; -} - -* { - box-sizing: border-box; -} - -html { - font-size: 18px; - line-height: 32px; - - background: rgb(0, 0, 0); - -webkit-font-smoothing: antialiased; -} - -html, -body, -#app { - height: 100%; -} - -body { - font-family: system-ui; - font-size: 18px; - line-height: 32px; - - margin: 0; - color: rgb(1000, 1000, 1000); - - @media (max-width: 1024px) { - font-size: 15px; - line-height: 24px; - } -} - -img { - max-width: 100%; - height: auto; - display: block; -} - -h1 { - margin: 40px 0; - font-size: 64px; - line-height: 70px; - font-weight: bold; - - @media (max-width: 1024px) { - margin: 24px 0; - font-size: 42px; - line-height: 42px; - } - - @media (max-width: 768px) { - font-size: 38px; - line-height: 38px; - } - - @media (max-width: 400px) { - font-size: 32px; - line-height: 32px; - } -} - -p { - margin: 24px 0; - - @media (max-width: 1024px) { - margin: calc(var(--base) * 0.75) 0; - } -} - -a { - color: currentColor; - - &:focus { - opacity: 0.8; - outline: none; - } - - &:active { - opacity: 0.7; - outline: none; - } -} - -svg { - vertical-align: middle; -} - -.home { - display: flex; - flex-direction: column; - justify-content: space-between; - align-items: center; - height: 100vh; - padding: 45px; - max-width: 1024px; - margin: 0 auto; - overflow: hidden; - - @media (max-width: 400px) { - padding: 24px; - } - - .content { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - flex-grow: 1; - - h1 { - text-align: center; - } - } - - .links { - display: flex; - align-items: center; - gap: 12px; - - a { - text-decoration: none; - padding: 0.25rem 0.5rem; - border-radius: 4px; - } - - .admin { - color: rgb(0, 0, 0); - background: rgb(1000, 1000, 1000); - border: 1px solid rgb(0, 0, 0); - } - - .docs { - color: rgb(1000, 1000, 1000); - background: rgb(0, 0, 0); - border: 1px solid rgb(1000, 1000, 1000); - } - } - - .footer { - display: flex; - align-items: center; - gap: 8px; - - @media (max-width: 1024px) { - flex-direction: column; - gap: 6px; - } - - p { - margin: 0; - } - - .codeLink { - text-decoration: none; - padding: 0 0.5rem; - background: rgb(60, 60, 60); - border-radius: 4px; - } - } -} diff --git a/src/app/my-route/route.ts b/src/app/my-route/route.ts deleted file mode 100644 index a6422f3..0000000 --- a/src/app/my-route/route.ts +++ /dev/null @@ -1,14 +0,0 @@ -import configPromise from '@payload-config' -import { getPayload } from 'payload' - -export const GET = async () => { - const payload = await getPayload({ - config: configPromise, - }) - - const data = await payload.find({ - collection: 'users', - }) - - return Response.json(data) -} diff --git a/src/components/Blocks/BeforeFooter/index.tsx b/src/components/Blocks/BeforeFooter/index.tsx index 23af317..6325e23 100644 --- a/src/components/Blocks/BeforeFooter/index.tsx +++ b/src/components/Blocks/BeforeFooter/index.tsx @@ -1,28 +1,33 @@ import Link from "next/link"; export interface BeforeFooterBlockProps { - id: string; - title: string; - description: string; - buttonText: string; + id?: string; + title?: string; + description?: string; + buttonText?: string; } +const placeholderTitle = "Begin your path to healing with Cochise Oncology"; +const placeholderDescription = + "Our dedicated team in Sierra Vista, AZ is here to support you with hope, strength, and courage. We offer personalized cancer care using innovative treatments in our state-of-the-art facility. Take the first step towards comprehensive, patient-focused treatment by scheduling a consultation. Let us listen to your needs, answer your questions, and create a tailored plan for your journey. Fill out our form to connect with our compassionate experts and discover how Cochise Oncology can stand with you in your fight against cancer."; +const placeholderButtonText = "Get Started"; + export function BeforeFooterBlock({ title, description, buttonText }: BeforeFooterBlockProps) { return (
+
+
-

{title}

-

{description}

- {!!buttonText && ( -
- - {buttonText} - -
- )} +

{title ?? placeholderTitle}

+

{description ?? placeholderDescription}

+
+ + {buttonText ?? placeholderButtonText} + +
); diff --git a/src/components/Blocks/GoogleReviews/index.tsx b/src/components/Blocks/GoogleReviews/index.tsx index 5991bf0..1100d59 100644 --- a/src/components/Blocks/GoogleReviews/index.tsx +++ b/src/components/Blocks/GoogleReviews/index.tsx @@ -1,13 +1,59 @@ -import { CardStarRating } from "@/components/Ratings/CardStarRating"; +"use client"; + +import { CardStarRating, CardStarRatingProps } from "@/components/Ratings/CardStarRating"; import StarRating from "@/components/Ratings/StarRating"; -import { teamMembers } from "@/data/team"; import Image from "next/image"; import { Navigation } from "swiper/modules"; import { Swiper, SwiperSlide } from "swiper/react"; +const data: CardStarRatingProps["data"][] = [ + { + star: 5, + description: + "Today i did my cat scan , and met Raymond, he radiates hope and good will, i then met Larry who showed me the hospitality suite, i was overwhelmed by thier kindness, every one i have met so far has been truly amazing.while at physical therapy the doc said i had made a wise", + }, + { + star: 5, + description: "Great and caring service. Completely satisfied.", + }, + { + star: 5, + description: "Sincere and caring attitude...very professional and inspires confidence.", + }, + { + star: 5, + description: + "I've been going to cochise oncology for many years and everyone is always professional and take the time to explain everything", + }, + { + star: 5, + description: "One fine person\n Very concerning. Glad to see her", + }, + { + star: 5, + description: + "Barbara was very professional and friendly. She shared all info with me and gave me a copy of my lab results.", + }, + { + star: 5, + description: + "Barbara is great! She listens and ask questions on other issues outside her area just to be sure you’re well taken care of.", + }, + { + star: 5, + description: + "Today, at Cochise Oncology, I had an appointment with Dr. Reid Culton. He explained in great detail from the medical chart of the blood work and listen to my concerns. Dr. Reid Culton also answered my questions in great detail. Thank you.", + }, + { + star: 5, + description: + "I absolutely love the people that work at this place. From the front desk to radiation room. Everyone is loving and caring.", + }, +]; + export function GoogleReviewsBlock() { return ( -
+
@@ -22,7 +68,7 @@ export function GoogleReviewsBlock() {

4.8

- +
Over 200 Reviews
@@ -56,16 +102,16 @@ export function GoogleReviewsBlock() { }} > {/* Group item */} - {teamMembers.map((member, index) => ( + {data.map((rev, index) => (
- +
))} -
+
-
+
Previous Slide
diff --git a/src/components/Homepage.tsx b/src/components/Homepage.tsx index b4fdcd7..0865447 100644 --- a/src/components/Homepage.tsx +++ b/src/components/Homepage.tsx @@ -50,7 +50,7 @@ export default function homepage({ onePage = false, dark = false }) { ) : ( <> Contact us diff --git a/src/components/Ratings/CardStarRating.tsx b/src/components/Ratings/CardStarRating.tsx index b2a5aa0..94c716a 100644 --- a/src/components/Ratings/CardStarRating.tsx +++ b/src/components/Ratings/CardStarRating.tsx @@ -1,14 +1,21 @@ import Image from "next/image"; import StarRating from "./StarRating"; -export function CardStarRating() { +export interface CardStarRatingProps { + data: { + star: number; + description: string; + }; +} + +export function CardStarRating({ data }: CardStarRatingProps) { return (
- +
-

Today my cat scan

+

{data.description}

); } From 27f9c83e8e05eb2d7c10441033a79c6c6ba1a854 Mon Sep 17 00:00:00 2001 From: RizqiSyahrendra Date: Wed, 12 Feb 2025 14:22:55 +0700 Subject: [PATCH 7/8] feat(blogs): restructure and add CTA section --- src/app/(main)/blog/[slug]/page.tsx | 9 ++-- src/app/(main)/blog/page.tsx | 7 ++- src/collections/BlogCategories.ts | 28 +++++++++++ src/collections/BlogTags.tsx | 32 +++++++++++++ src/collections/Blogs.ts | 43 +++++++++++++++-- src/collections/Pages.ts | 5 -- src/payload-types.ts | 74 ++++++++++++++++++++++++++++- src/payload.config.ts | 4 +- src/services/payload/blog.ts | 8 ++++ 9 files changed, 194 insertions(+), 16 deletions(-) create mode 100644 src/collections/BlogCategories.ts create mode 100644 src/collections/BlogTags.tsx diff --git a/src/app/(main)/blog/[slug]/page.tsx b/src/app/(main)/blog/[slug]/page.tsx index 0003646..5b76ce0 100644 --- a/src/app/(main)/blog/[slug]/page.tsx +++ b/src/app/(main)/blog/[slug]/page.tsx @@ -1,3 +1,4 @@ +import { BeforeFooterBlock } from "@/components/Blocks/BeforeFooter"; import BlogDetail, { BlogDetailContentSkeleton } from "@/components/Blogs/BlogDetail"; import { fetchBlogDetail } from "@/services/payload/blog"; import { Metadata } from "next"; @@ -20,14 +21,15 @@ export async function generateMetadata({ params }: { params: Promise<{ slug: str }; } - const title = `${blog.data.title} - ${name}`; + const title = `${!!blog.data?.meta?.title ? blog.data?.meta?.title : blog.data.title} - ${name}`; + const description = `${!!blog.data?.meta?.description ? blog.data?.meta?.description : blog.data.title} - ${name}`; return { title: title, - description: title, + description: description, openGraph: { title: title, - description: title, + description: description, images: [{ url: blog.imgUrl }], }, }; @@ -40,6 +42,7 @@ export default async function SingleBlogPage({ params }: { params: Promise<{ slu <> }> + ); diff --git a/src/app/(main)/blog/page.tsx b/src/app/(main)/blog/page.tsx index 438d0bc..b413360 100644 --- a/src/app/(main)/blog/page.tsx +++ b/src/app/(main)/blog/page.tsx @@ -1,3 +1,4 @@ +import { BeforeFooterBlock } from "@/components/Blocks/BeforeFooter"; import { BlogCardItemSkeleton } from "@/components/Blogs/BlogCardItem"; import Blogs from "@/components/Blogs/Blogs"; import { sanitizePageNumber } from "@/utils/sanitize"; @@ -5,8 +6,8 @@ import Image from "next/image"; import { Suspense } from "react"; export const metadata = { - title: "Blogs | Cochise Oncology", - description: "Blogs | Cochise Oncology", + title: "Blog - Cochise Oncology", + description: "Blog - Cochise Oncology", }; export default async function BlogPage({ searchParams }: { searchParams?: Promise<{ page?: string }> }) { @@ -36,6 +37,8 @@ export default async function BlogPage({ searchParams }: { searchParams?: Promis
+ + ); } diff --git a/src/collections/BlogCategories.ts b/src/collections/BlogCategories.ts new file mode 100644 index 0000000..98f8431 --- /dev/null +++ b/src/collections/BlogCategories.ts @@ -0,0 +1,28 @@ +import formatSlug from "@/utils/formatSlug"; +import type { CollectionConfig } from "payload"; + +export const BlogCategories: CollectionConfig = { + slug: "blogCategories", + labels: { plural: "Categories", singular: "Category" }, + fields: [ + { + name: "name", + type: "text", + required: true, + }, + { + name: "slug", + type: "text", + admin: { + position: "sidebar", + }, + hooks: { + beforeValidate: [formatSlug("title")], + }, + }, + ], + admin: { + hideAPIURL: true, + group: "Blogs", + }, +}; diff --git a/src/collections/BlogTags.tsx b/src/collections/BlogTags.tsx new file mode 100644 index 0000000..c337fd5 --- /dev/null +++ b/src/collections/BlogTags.tsx @@ -0,0 +1,32 @@ +import formatSlug from "@/utils/formatSlug"; +import type { CollectionConfig } from "payload"; + +export const BlogTags: CollectionConfig = { + slug: "blogTags", + labels: { plural: "Tags", singular: "Tag" }, + fields: [ + { + name: "name", + type: "text", + required: true, + }, + { + name: "slug", + type: "text", + admin: { + position: "sidebar", + }, + hooks: { + beforeValidate: [formatSlug("title")], + }, + }, + { + name: "description", + type: "textarea", + }, + ], + admin: { + hideAPIURL: true, + group: "Blogs", + }, +}; diff --git a/src/collections/Blogs.ts b/src/collections/Blogs.ts index ab10ab6..f500a1a 100644 --- a/src/collections/Blogs.ts +++ b/src/collections/Blogs.ts @@ -4,6 +4,7 @@ import formatSlug from "@/utils/formatSlug"; export const Blogs: CollectionConfig = { slug: "blogs", + labels: { plural: "Posts", singular: "Post" }, fields: [ { name: "title", @@ -13,9 +14,6 @@ export const Blogs: CollectionConfig = { { name: "slug", type: "text", - admin: { - position: "sidebar", - }, hooks: { beforeValidate: [formatSlug("title")], }, @@ -33,8 +31,47 @@ export const Blogs: CollectionConfig = { required: true, editor: lexicalEditor({}), }, + { + name: "categories", + type: "relationship", + relationTo: "blogCategories", + hasMany: true, + }, + { + name: "tags", + type: "relationship", + relationTo: "blogTags", + hasMany: true, + }, + { + name: "meta", + label: "Page Meta", + type: "group", + fields: [ + { + name: "title", + label: "Title", + type: "text", + }, + { + name: "description", + label: "Description", + type: "textarea", + }, + ], + }, + { + name: "is_published", + label: "Published", + type: "checkbox", + defaultValue: true, + admin: { + position: "sidebar", + }, + }, ], admin: { hideAPIURL: true, + group: "Blogs", }, }; diff --git a/src/collections/Pages.ts b/src/collections/Pages.ts index 766bf8b..9115e90 100644 --- a/src/collections/Pages.ts +++ b/src/collections/Pages.ts @@ -54,11 +54,6 @@ export const Pages: CollectionConfig = { label: "Description", type: "textarea", }, - { - name: "keywords", - label: "Keywords", - type: "text", - }, ], }, ], diff --git a/src/payload-types.ts b/src/payload-types.ts index 19120e2..89b6426 100644 --- a/src/payload-types.ts +++ b/src/payload-types.ts @@ -70,6 +70,8 @@ export interface Config { blogs: Blog; pages: Page; teams: Team; + blogCategories: BlogCategory; + blogTags: BlogTag; forms: Form; 'form-submissions': FormSubmission; 'payload-locked-documents': PayloadLockedDocument; @@ -83,6 +85,8 @@ export interface Config { blogs: BlogsSelect | BlogsSelect; pages: PagesSelect | PagesSelect; teams: TeamsSelect | TeamsSelect; + blogCategories: BlogCategoriesSelect | BlogCategoriesSelect; + blogTags: BlogTagsSelect | BlogTagsSelect; forms: FormsSelect | FormsSelect; 'form-submissions': FormSubmissionsSelect | FormSubmissionsSelect; 'payload-locked-documents': PayloadLockedDocumentsSelect | PayloadLockedDocumentsSelect; @@ -182,6 +186,36 @@ export interface Blog { }; [k: string]: unknown; }; + categories?: (number | BlogCategory)[] | null; + tags?: (number | BlogTag)[] | null; + meta?: { + title?: string | null; + description?: string | null; + }; + is_published?: boolean | null; + updatedAt: string; + createdAt: string; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "blogCategories". + */ +export interface BlogCategory { + id: number; + name: string; + slug?: string | null; + updatedAt: string; + createdAt: string; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "blogTags". + */ +export interface BlogTag { + id: number; + name: string; + slug?: string | null; + description?: string | null; updatedAt: string; createdAt: string; } @@ -267,7 +301,6 @@ export interface Page { meta?: { title?: string | null; description?: string | null; - keywords?: string | null; }; updatedAt: string; createdAt: string; @@ -496,6 +529,14 @@ export interface PayloadLockedDocument { relationTo: 'teams'; value: number | Team; } | null) + | ({ + relationTo: 'blogCategories'; + value: number | BlogCategory; + } | null) + | ({ + relationTo: 'blogTags'; + value: number | BlogTag; + } | null) | ({ relationTo: 'forms'; value: number | Form; @@ -589,6 +630,15 @@ export interface BlogsSelect { slug?: T; img?: T; content?: T; + categories?: T; + tags?: T; + meta?: + | T + | { + title?: T; + description?: T; + }; + is_published?: T; updatedAt?: T; createdAt?: T; } @@ -652,7 +702,6 @@ export interface PagesSelect { | { title?: T; description?: T; - keywords?: T; }; updatedAt?: T; createdAt?: T; @@ -669,6 +718,27 @@ export interface TeamsSelect { updatedAt?: T; createdAt?: T; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "blogCategories_select". + */ +export interface BlogCategoriesSelect { + name?: T; + slug?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "blogTags_select". + */ +export interface BlogTagsSelect { + name?: T; + slug?: T; + description?: T; + updatedAt?: T; + createdAt?: T; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "forms_select". diff --git a/src/payload.config.ts b/src/payload.config.ts index 776bfdb..e242a8b 100644 --- a/src/payload.config.ts +++ b/src/payload.config.ts @@ -8,7 +8,9 @@ import { buildConfig } from "payload"; import sharp from "sharp"; import { fileURLToPath } from "url"; +import { BlogCategories } from "@/collections/BlogCategories"; import { Blogs } from "@/collections/Blogs"; +import { BlogTags } from "@/collections/BlogTags"; import { Media } from "@/collections/Media"; import { Pages } from "@/collections/Pages"; import { Teams } from "@/collections/Teams"; @@ -47,7 +49,7 @@ export default buildConfig({ }, theme: "dark", }, - collections: [Users, Media, Blogs, Pages, Teams], + collections: [Users, Media, Blogs, Pages, Teams, BlogCategories, BlogTags], secret: process.env.PAYLOAD_SECRET || "", typescript: { outputFile: path.resolve(dirname, "payload-types.ts"), diff --git a/src/services/payload/blog.ts b/src/services/payload/blog.ts index 59b34f8..c3269e2 100644 --- a/src/services/payload/blog.ts +++ b/src/services/payload/blog.ts @@ -9,6 +9,11 @@ export async function fetchBlog(page: number | undefined) { page, pagination: true, limit: 6, + where: { + is_published: { + equals: true, + }, + }, }); const formattedData = blogDataQuery.docs.map((item) => { @@ -31,6 +36,9 @@ export async function fetchBlogDetail(slug: string) { collection: "blogs", where: { slug: { equals: slug }, + is_published: { + equals: true, + }, }, limit: 1, pagination: false, From a16f9d0ca8184e03b85217be1656938178f0ce00 Mon Sep 17 00:00:00 2001 From: RizqiSyahrendra Date: Wed, 12 Feb 2025 16:58:51 +0700 Subject: [PATCH 8/8] feat(blog): category and tag data structure --- src/collections/BlogCategories.ts | 13 ++++++++++++- src/collections/BlogTags.tsx | 2 +- src/payload-types.ts | 4 ++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/collections/BlogCategories.ts b/src/collections/BlogCategories.ts index 98f8431..21cabf2 100644 --- a/src/collections/BlogCategories.ts +++ b/src/collections/BlogCategories.ts @@ -17,12 +17,23 @@ export const BlogCategories: CollectionConfig = { position: "sidebar", }, hooks: { - beforeValidate: [formatSlug("title")], + beforeValidate: [formatSlug("name")], }, }, + { + name: "parent_category", + label: "Parent Category", + type: "relationship", + relationTo: "blogCategories", + }, + { + name: "description", + type: "textarea", + }, ], admin: { hideAPIURL: true, group: "Blogs", + useAsTitle: "name", }, }; diff --git a/src/collections/BlogTags.tsx b/src/collections/BlogTags.tsx index c337fd5..04256cc 100644 --- a/src/collections/BlogTags.tsx +++ b/src/collections/BlogTags.tsx @@ -17,7 +17,7 @@ export const BlogTags: CollectionConfig = { position: "sidebar", }, hooks: { - beforeValidate: [formatSlug("title")], + beforeValidate: [formatSlug("name")], }, }, { diff --git a/src/payload-types.ts b/src/payload-types.ts index 89b6426..537a842 100644 --- a/src/payload-types.ts +++ b/src/payload-types.ts @@ -204,6 +204,8 @@ export interface BlogCategory { id: number; name: string; slug?: string | null; + parent_category?: (number | null) | BlogCategory; + description?: string | null; updatedAt: string; createdAt: string; } @@ -725,6 +727,8 @@ export interface TeamsSelect { export interface BlogCategoriesSelect { name?: T; slug?: T; + parent_category?: T; + description?: T; updatedAt?: T; createdAt?: T; }