36 Commits

Author SHA1 Message Date
Roland Schneider
0c232f80cd [yoga-26] remove feedback widget from home page 2025-08-27 15:37:15 +02:00
Roland Schneider
effa7f8f2f [yoga-26] remove feedback widget from home page 2025-08-27 15:37:04 +02:00
Roland Schneider
2c74b1a2fd [yoga-26] remove feedback widget from home page 2025-08-27 15:36:56 +02:00
Roland Schneider
a9ca4b3482 [yoga-23] achievements.item.component.tsx : center items 2025-08-27 15:34:46 +02:00
Roland Schneider
587a4482db [yoga-24] our services component: make images rounded with css 2025-08-27 15:23:17 +02:00
6075457fcf [ci-skip] New Prod yoga-app deployment version: 202508270750.cde2315 2025-08-27 09:11:17 +00:00
Jenkins
3de55264c9 [ci-skip] Update version to 202508270750.cde2315 2025-08-27 08:29:44 +00:00
Jenkins
cde23153ba [ci-skip] Update version to 202508270921.622f2a7 2025-08-27 07:50:48 +00:00
Roland Schneider
622f2a7686 [yoga-20] subscribe.component.tsx: make image editable 2025-08-27 09:21:20 +02:00
Roland Schneider
917918d742 [yoga-24] our services component: make images rounded with css 2025-08-27 07:22:46 +02:00
Roland Schneider
f1069f3124 [yoga-21] footer.component.tsx add editable image 2025-08-26 22:07:19 +02:00
Roland Schneider
a3e57f295f [yoga-19] our.specialities.component.tsx make image editable 2025-08-26 21:50:12 +02:00
Roland Schneider
054cb48e4c [yoga-18] about.us.with.boxes.component.tsx fix aboutus_image image 2025-08-26 21:36:00 +02:00
Roland Schneider
6298bb7b8c [yoga-27] faq and prices page: remove blogs widget 2025-08-26 21:20:59 +02:00
f977877cd7 [ci-skip] New Prod yoga-app deployment version: 202508030723.11cbd10 2025-08-05 03:56:54 +00:00
Jenkins
4807edec8f [ci-skip] Update version to 202508030723.11cbd10 2025-08-03 15:09:06 +00:00
Jenkins
11cbd10db9 [ci-skip] Update version to 202507281131.6acf79e 2025-08-03 07:23:15 +00:00
Schneider Roland
6acf79e23d [yoga-15] add new service-list-page 2025-07-28 11:31:49 +02:00
Schneider Roland
e9aa0e795e menu modifications 2025-07-26 21:47:57 +02:00
cc1a4aade1 [ci-skip] New Prod yoga-app deployment version: 202507181622.8fdc595 2025-07-18 14:29:07 +00:00
Jenkins
fe4c4be6dd [ci-skip] Update version to 202507181423.cd2eded 2025-07-18 14:27:18 +00:00
Jenkins
cd2eded7aa [ci-skip] Update version to 202507181622.8fdc595 2025-07-18 14:23:15 +00:00
Roland Schneider
8fdc59552f [yoga-13] add listing component to text-with-image components 2025-07-18 16:22:07 +02:00
a6e7bb9dab [ci-skip] New Prod yoga-app deployment version: 202507091614.1a7c5c5 2025-07-09 14:40:01 +00:00
Jenkins
930dbe3354 [ci-skip] Update version to 202507091416.0f1bfcf 2025-07-09 14:20:44 +00:00
Jenkins
0f1bfcf774 [ci-skip] Update version to 202507091614.1a7c5c5 2025-07-09 14:16:58 +00:00
Roland Schneider
1a7c5c5247 [yoga-12] add common section to home API and update related components for logo image 2025-07-09 16:14:07 +02:00
7133e43464 [ci-skip] New Prod yoga-app deployment version: 202507091312.92b528c 2025-07-09 13:17:58 +00:00
Jenkins
2929ab6150 [ci-skip] Update version to 202507091312.92b528c 2025-07-09 13:14:37 +00:00
Jenkins
92b528c9e9 [ci-skip] Update version to 202507091509.8324294 2025-07-09 13:12:09 +00:00
Roland Schneider
8324294853 add debug logging for service slug and service page retrieval 2025-07-09 15:09:51 +02:00
Roland Schneider
3bbd9dcbf6 [yoga-11] add common type and add logo 2025-07-09 15:09:51 +02:00
Roland Schneider
ca60a9a2f4 [yoga-11] add common type and add logo 2025-07-09 15:09:51 +02:00
90a7dbf827 [ci-skip] New Prod yoga-app deployment version: 202507041949.cc6d814 2025-07-04 19:52:21 +00:00
Jenkins
fac8dd6f19 [ci-skip] Update version to 202507041949.cc6d814 2025-07-04 19:51:03 +00:00
Jenkins
cc6d8147de [ci-skip] Update version to 202505291116.217a26c 2025-07-04 19:49:41 +00:00
65 changed files with 794 additions and 114 deletions

View File

@@ -29,7 +29,7 @@ GET {{domain}}/api/yoga-single-services?filters[name][$eq]=service4
Accept: application/json
### GET service page
GET {{domain}}/api/contact-page?fields[0]=*&populate[contactUs][fields][0]=*&populate[google_maps][fields][0]=*&populate[subscribe][fields][0]=*&populate[footer][fields][0]=*&populate[footer][populate][links][fields][0]=*&populate[footer][populate][contactUsEmail][fields][0]=*&populate[footer][populate][contactUsLocation][fields][0]=*&populate[footer][populate][contactUsPhoneNumber][fields][0]=*
GET {{domain}}/api/service-list-page?fields[0]=*&populate[services][fields][0]=*&populate[services][populate][image][fields][0]=name&populate[services][populate][image][fields][1]=mime&populate[services][populate][image][fields][2]=url&populate[common][fields][0]=*&populate[common][populate][logoImage][fields][0]=name&populate[common][populate][logoImage][fields][1]=mime&populate[common][populate][logoImage][fields][2]=url&populate[subscribeNow][fields][0]=*&populate[subscribeNow][populate][image][fields][0]=name&populate[subscribeNow][populate][image][fields][1]=mime&populate[subscribeNow][populate][image][fields][2]=url&populate[footer][fields][0]=*&populate[footer][populate][links][fields][0]=*&populate[footer][populate][contactUsEmail][fields][0]=*&populate[footer][populate][contactUsLocation][fields][0]=*&populate[footer][populate][contactUsPhoneNumber][fields][0]=*&populate[footer][populate][logo][fields][0]=name&populate[footer][populate][logo][fields][1]=mime&populate[footer][populate][logo][fields][2]=url
Accept: application/json

View File

@@ -1 +1 @@
202505262234.f0f0a97
202508270921.622f2a7

View File

@@ -1 +1 @@
202505232026.6bb9365
202508270750.cde2315

View File

@@ -21,7 +21,7 @@ services:
networks:
- yogastic
app:
image: docker.rschneider.hu/infra/yoga-app:202505262234.f0f0a97
image: docker.rschneider.hu/infra/yoga-app:202508270921.622f2a7
platform: linux/amd64
ports:
- '4025:3000'
@@ -47,7 +47,7 @@ services:
- proxy_shared
- yogastic
cms:
image: docker.rschneider.hu/infra/yoga-cms:202505232026.6bb9365
image: docker.rschneider.hu/infra/yoga-cms:202508270750.cde2315
ports:
- '4026:1337'
environment:

View File

@@ -72,7 +72,16 @@
}
},
"subscribeNow": {
"fields": ["*"]
"fields": ["*"],
"populate": {
"image": {
"fields": [
"name",
"mime",
"url"
]
}
}
},
"footer": {
"fields": ["*"],
@@ -88,6 +97,9 @@
},
"contactUsPhoneNumber": {
"fields": ["*"]
},
"logo": {
"fields": ["name","mime","url"]
}
}
}

View File

@@ -16,8 +16,17 @@
"fields": ["*"]
},
"subscribe": {
"fields": ["*"]
},
"fields": ["*"],
"populate": {
"image": {
"fields": [
"name",
"mime",
"url"
]
}
}
},
"footer": {
"fields": ["*"],
"populate": {
@@ -32,6 +41,9 @@
},
"contactUsPhoneNumber": {
"fields": ["*"]
},
"logo": {
"fields": ["name","mime","url"]
}
}
}

View File

@@ -51,8 +51,17 @@
}
},
"subscribe": {
"fields": ["*"]
},
"fields": ["*"],
"populate": {
"image": {
"fields": [
"name",
"mime",
"url"
]
}
}
},
"footer": {
"fields": ["*"],
"populate": {
@@ -67,6 +76,9 @@
},
"contactUsPhoneNumber": {
"fields": ["*"]
},
"logo": {
"fields": ["name","mime","url"]
}
}
}

View File

@@ -1,5 +1,13 @@
{
"populate": {
"common": {
"fields": ["*"],
"populate": {
"logoImage": {
"fields": ["name","mime","url"]
}
}
},
"header": {
"fields": ["*"],
"populate": {
@@ -7,8 +15,12 @@
"fields": [
"*"
]
}
},
"image": {
"fields": ["name","mime","url"]
}
}
},
"footer": {
"fields": ["*"],
@@ -24,12 +36,24 @@
},
"contactUsPhoneNumber": {
"fields": ["*"]
},
"logo": {
"fields": ["name","mime","url"]
}
}
},
"subscribeNow": {
"fields": ["*"]
},
"fields": ["*"],
"populate": {
"image": {
"fields": [
"name",
"mime",
"url"
]
}
}
},
"blogs": {
"fields": ["*"],
"populate": {
@@ -128,6 +152,9 @@
},
"right4": {
"fields": ["*"]
},
"image": {
"fields": ["name","mime","url"]
}
}
}

View File

@@ -48,7 +48,16 @@
}
},
"subscribe": {
"fields": ["*"]
"fields": ["*"],
"populate": {
"image": {
"fields": [
"name",
"mime",
"url"
]
}
}
},
"footer": {
"fields": ["*"],
@@ -64,6 +73,9 @@
},
"contactUsPhoneNumber": {
"fields": ["*"]
},
"logo": {
"fields": ["name","mime","url"]
}
}
}

View File

@@ -0,0 +1,53 @@
{
"fields": ["*"],
"populate": {
"services": {
"fields": ["*"],
"populate": {
"image": {
"fields": ["name","mime","url" ]
}
}
},
"common": {
"fields": ["*"],
"populate": {
"logoImage": {
"fields": ["name","mime","url"]
}
}
},
"subscribeNow": {
"fields": ["*"],
"populate": {
"image": {
"fields": [
"name",
"mime",
"url"
]
}
}
},
"footer": {
"fields": ["*"],
"populate": {
"links": {
"fields": ["*"]
},
"contactUsEmail": {
"fields": ["*"]
},
"contactUsLocation": {
"fields": ["*"]
},
"contactUsPhoneNumber": {
"fields": ["*"]
},
"logo": {
"fields": ["name","mime","url"]
}
}
}
}
}

View File

@@ -10,8 +10,17 @@
}
},
"subscribeNow": {
"fields": ["*"]
},
"fields": ["*"],
"populate": {
"image": {
"fields": [
"name",
"mime",
"url"
]
}
}
},
"footer": {
"fields": ["*"],
"populate": {
@@ -26,6 +35,9 @@
},
"contactUsPhoneNumber": {
"fields": ["*"]
},
"logo": {
"fields": ["name","mime","url"]
}
}
}

View File

@@ -51,6 +51,9 @@
},
"right4": {
"fields": ["*"]
},
"image": {
"fields": ["name","mime","url"]
}
}
},
@@ -87,8 +90,17 @@
}
},
"subscribe": {
"fields": ["*"]
},
"fields": ["*"],
"populate": {
"image": {
"fields": [
"name",
"mime",
"url"
]
}
}
},
"footer": {
"fields": ["*"],
"populate": {
@@ -103,6 +115,9 @@
},
"contactUsPhoneNumber": {
"fields": ["*"]
},
"logo": {
"fields": ["name","mime","url"]
}
}
}

View File

@@ -4,6 +4,7 @@ import qs from "qs";
import aboutQuery from "@/api/strapi/query/about.json";
import homeQuery from "@/api/strapi/query/home.json";
import servicesQuery from "@/api/strapi/query/services.json";
import serviceListPageQuery from "@/api/strapi/query/service-list.json";
import serviceQuery from "@/api/strapi/query/service.json";
import pricesQuery from "@/api/strapi/query/prices.json";
import faqQuery from "@/api/strapi/query/faq.json";
@@ -11,6 +12,7 @@ import contactQuery from "@/api/strapi/query/contact.json";
import {YogaBlogPost_Plain} from "@/types/generated-strapi-interfaces/api/yoga-blog-post";
import {Home_Plain} from "@/types/generated-strapi-interfaces/api/home";
import {ServicesPage_Plain} from "@/types/generated-strapi-interfaces/api/services-page";
import {ServiceListPage_Plain} from "@/types/generated-strapi-interfaces/api/service-list-page";
import {PricesPage_Plain} from "@/types/generated-strapi-interfaces/api/prices-page";
import {FaqPage_Plain} from "@/types/generated-strapi-interfaces/api/faq-page";
import {ContactPage_Plain} from "@/types/generated-strapi-interfaces/api/contact-page";
@@ -49,6 +51,10 @@ class StrapiApi{
return this.getJson("/api/service-page?",serviceQuery);
}
public getServiceListPage(): Promise<ServiceListPage_Plain>{
return this.getJson("/api/service-list-page?",serviceListPageQuery);
}
public getService(name: string): Promise<YogaSingleService_Plain[]>{
return this.getJson("/api/yoga-single-services?", {
filters: {

View File

@@ -1,44 +1,58 @@
import httpClient from "@/api/http-client";
import {Payload} from "@/types/generated-strapi-interfaces/common/Payload";
const STRAPI_URL = process.env.STRAPI_URL;
const STRAPI_URL = process.env.STRAPI_URL;
class StrapiClient{
class StrapiClient {
constructor(private strapiUrl: string = "http://localhost:1337") {
}
public getImageUrl(imagePath: string){
if ( !imagePath ){
public getImageUrl(imagePath: string) {
if (!imagePath) {
return "dummy.png"
}
return '/image/'+ imagePath;
return '/image/' + imagePath;
}
public async httpGet(path: string){
console.info("httpGet", path);
return await httpClient.httpGet(this.strapiUrl + path);
public async httpGet(path: string) {
let result = undefined;
try {
const absoluteUrl = this.strapiUrl + path;
console.info("httpGet", {path,absoluteUrl});
result = await httpClient.httpGet(this.strapiUrl + path);
} catch (e) {
console.log("httpGet error", e);
throw e;
}
if (!result.ok) {
console.info("httpGet not ok", result);
throw new Error(result.statusText);
}
return result;
}
public async httpGetJson<T>(url: string): Promise<Payload<T>>{
const response = await this.httpGet(url);
public async httpGetJson<T>(url: string): Promise<Payload<T>> {
const response = await this.httpGet(url);
return await response.json();
}
public async findContentType<T>(contentType: string,options?: FindContentOptions): Promise<Payload<T>>{
public async findContentType<T>(contentType: string, options?: FindContentOptions): Promise<Payload<T>> {
const searchParams = new URLSearchParams();
if ( options?.populateAll ){
searchParams.append("populate","*");
if (options?.populateAll) {
searchParams.append("populate", "*");
}
if (options?.localeAll){
searchParams.append("_locale","all");
if (options?.localeAll) {
searchParams.append("_locale", "all");
}
const response = await this.httpGet("/api/"+contentType+"?"+searchParams.toString());
const response = await this.httpGet("/api/" + contentType + "?" + searchParams.toString());
return await response.json();
}
}
export interface FindContentOptions{
export interface FindContentOptions {
populateAll?: boolean;
localeAll?: boolean;
}

View File

@@ -1,6 +1,5 @@
import React from "react";
import AosComponent from "@/components/aos.component";
import BlogPostsComponent from "@/components/blog.posts.component";
import FooterComponent from "@/components/footer.component";
import SubscribeComponent from "@/components/subscribe.component";
import strapiApi from "@/api/strapi/strapi-api";
@@ -13,7 +12,6 @@ export default async function About() {
header,
description,
questionsAndAnswers,
blogs,
subscribe,
footer,
common
@@ -22,7 +20,6 @@ export default async function About() {
<>
{ <SubHeaderComponent header={{header1:header,description}} common={common}/> }
{ questionsAndAnswers && <FaqComponent config={questionsAndAnswers} /> }
{ blogs && <BlogPostsComponent config={blogs} /> }
{ subscribe && <SubscribeComponent config={subscribe} /> }
{ footer && <FooterComponent config={footer} /> }
<AosComponent />

View File

@@ -5,7 +5,6 @@ import AboutUsComponent from "@/components/about.us.component";
import OurSpecialitiesComponent from "@/components/our.specialities.component";
import ContactUsComponent from "@/components/contact.us.component";
import PricingComponent from "@/components/pricing.component";
import FeedbackComponent from "@/components/feedbackComponent";
import BlogPostsComponent from "@/components/blog.posts.component";
import FooterComponent from "@/components/footer.component";
import SubscribeComponent from "@/components/subscribe.component";
@@ -17,6 +16,7 @@ export default async function Home() {
const pageData = await webApi.getHomePage();
const {
common,
header,
ourServices,
aboutUs,
@@ -26,18 +26,18 @@ export default async function Home() {
blogs,
subscribeNow,
footer,
feedbacks
} = pageData;
return (
<>
{ header && <MainHeaderComponent config={header}/> }
{ header && <MainHeaderComponent config={header} common={common} /> }
{ aboutUs && <AboutUsComponent data={aboutUs} /> }
{ ourServices && <OurServicesComponent config={ourServices}/> }
{ ourSpecialities && <OurSpecialitiesComponent config={ourSpecialities} /> }
{ contactUs && <ContactUsComponent contactUs={contactUs} /> }
{ prices && <PricingComponent config={prices}/> }
{ feedbacks && <FeedbackComponent config={feedbacks} /> }
{ blogs && <BlogPostsComponent config={blogs} /> }
{/*{ feedbacks && <FeedbackComponent config={feedbacks} /> }*/}
{ blogs && blogs.posts?.length && <BlogPostsComponent config={blogs} /> }
{ subscribeNow && <SubscribeComponent config={subscribeNow} /> }
{ footer && <FooterComponent config={footer} /> }
<AosComponent />

View File

@@ -1,7 +1,6 @@
import React from "react";
import AosComponent from "@/components/aos.component";
import PricingComponent from "@/components/pricing.component";
import BlogPostsComponent from "@/components/blog.posts.component";
import SubscribeComponent from "@/components/subscribe.component";
import SubHeaderComponent from "@/components/subHeader.component";
import YogaDiscountComponent from "@/components/yogaDiscountComponent";
@@ -19,7 +18,6 @@ export default async function PricesPage( ) {
description,
price,
discount,
blogs,
subscribe,
footer,
common
@@ -29,7 +27,6 @@ export default async function PricesPage( ) {
<SubHeaderComponent header={{header1:header,description}} common={common}/>
{ price && <PricingComponent config={price}/> }
{ discount && <YogaDiscountComponent config={discount} /> }
{ blogs && <BlogPostsComponent config={blogs} /> }
{ subscribe && <SubscribeComponent config={subscribe} /> }
{ footer && <FooterComponent config={footer} /> }
<AosComponent />

View File

@@ -110,10 +110,8 @@ export async function GET() {
// 'Uncomment this file and remove this line. You can delete this file when you are finished.',
// });
try {
console.info("get request")
strapiApi.getHomePage();
console.info("begin")
await connectionPool.query(`BEGIN`);
await seedUsers();
await seedCustomers();

View File

@@ -0,0 +1,37 @@
import React from "react";
import AosComponent from "@/components/aos.component";
import FooterComponent from "@/components/footer.component";
import SubscribeComponent from "@/components/subscribe.component";
import strapiApi from "@/api/strapi/strapi-api";
import SubHeaderComponent from "@/components/subHeader.component";
import SingleServiceComponent from "@/components/single.service.component";
export default async function Services() {
const {
header,
description,
footer,
subscribeNow,
common,
services
} = await strapiApi.getServiceListPage();
console.info("ServiceListPage", services.length, services.map);
return (
<>
<SubHeaderComponent header={{header1:header,description}} common={common}/>
{
services && services.length > 0 && services.map( singleService => {
return (
<SingleServiceComponent key={singleService.id} config={singleService} />
)
})
}
{ subscribeNow && <SubscribeComponent config={subscribeNow} /> }
{ footer && <FooterComponent config={footer} /> }
<AosComponent />
</>
);
}
export const dynamic = 'force-dynamic'

View File

@@ -27,16 +27,21 @@ export default async function ServiceArticlePage({params}: {
}) {
const {slug} = await params
console.info("service slug",slug);
const servicePage = await strapiApi.getServicePage();
if (!servicePage) {
return notFound()
}
console.info("Servicepage found");
const {subscribeNow, footer, common} = servicePage;
const servicesByName = await strapiApi.getService(slug);
console.info("servicesByName",servicesByName);
if (!servicesByName || servicesByName.length === 0) {
return notFound();
}
const selectedService = servicesByName[0];
console.info("selected service",selectedService)
if ( !selectedService?.article?.length ) {
return notFound();
}

View File

@@ -12,7 +12,7 @@ import SubHeaderComponent from "@/components/subHeader.component";
export default async function Services() {
const {
header,
header = undefined,
description,
ourServices,
contactUs,
@@ -22,7 +22,7 @@ export default async function Services() {
footer,
subscribe,
common
} = await strapiApi.getServicesPage();
} = await strapiApi.getServicesPage()
return (
<>
<SubHeaderComponent header={{header1:header,description}} common={common}/>

View File

@@ -2,13 +2,17 @@ import YogaImageComponent from "@/components/yoga.image.component";
import {
YogaAboutUsWithBoxesComponent_Plain
} from "@/types/generated-strapi-interfaces/api/yoga-about-us-with-boxes-component";
import {StrapiFile} from "@/types/types";
import strapiApi from "@/api/strapi/strapi-api";
export interface Props{
config: YogaAboutUsWithBoxesComponent_Plain
}
export default function AboutUsWithBoxesComponent({ config: {title,header,description, box1,box2,box3,box4}}: Props){
export default function AboutUsWithBoxesComponent({ config: {title,header,description, image, box1,box2,box3,box4}}: Props){
const imageFile: StrapiFile = image as StrapiFile;
const imageUrl = strapiApi.getImageUrl(imageFile?.url)
return (
<section className="aboutpage_aboutus_section">
@@ -16,7 +20,7 @@ export default function AboutUsWithBoxesComponent({ config: {title,header,descri
<div className="row">
<div className="col-lg-7 col-md-6 col-sm-12 col-xs-12">
<div className="aboutpage_aboutus_image">
<figure className="mb-0"><YogaImageComponent src="./assets/images/about_page_aboutus_image.png" alt="" className="img-fluid" /></figure>
<figure className="mb-0"><YogaImageComponent src={imageUrl} alt="" className="img-fluid" /></figure>
</div>
<figure className="aboutus_top_shape left_shape mb-0">
<YogaImageComponent src="./assets/images/aboutus_top_shape.png" alt="" className="img-fluid" />

View File

@@ -10,7 +10,6 @@ export default function AchievementsComponent({
title,header,description
}
}: Props){
console.info("achievements",achievements)
return (
<section className="achievement_section">
<div className="container">

View File

@@ -0,0 +1,4 @@
.textCenter{
text-align: center;
}

View File

@@ -3,6 +3,10 @@ import {YogaAchivement_Plain} from "@/types/generated-strapi-interfaces/api/yoga
import {StrapiFile} from "@/types/types";
import strapiApi from "@/api/strapi/strapi-api";
import styles from './achievements.item.component.module.css';
import clsx from "clsx";
export interface Props{
achievement: YogaAchivement_Plain
@@ -15,7 +19,7 @@ const imageFile: StrapiFile = image as StrapiFile;
return (
<div className="col-lg-2 col-md-4 col-sm-6 col-xs-12">
<div className="logo_wrapper">
<figure className="mb-0"><YogaImageComponent src={strapiApi.getImageUrl(imageFile?.url)} alt="" className="img-fluid"/></figure>
<figure className="mb-0"><YogaImageComponent src={strapiApi.getImageUrl(imageFile?.url)} alt="" className={clsx(styles.textCenter, "img-fluid")}/></figure>
<div className="logo_content">
{description}
</div>

View File

@@ -12,6 +12,7 @@ const pathToBreadCrumbs = (path: string) => {
'services' : 'Szolgáltatásaim',
'prices' : 'Áraim',
'faq' : 'GYIK',
'serviceList' : 'Szolgáltatások',
}
if ( mapping.hasOwnProperty(path)){
return mapping[path];
@@ -24,9 +25,6 @@ const NextBreadcrumb = () => {
const paths = usePathname()
const pathNames = paths.split('/').filter( path => path )
return (
<div className="btn_wrapper">
<span className="sub_home_span">{pathToBreadCrumbs( "/" )} </span>

View File

@@ -1,6 +1,8 @@
import Link from "next/link";
import YogaImageComponent from "@/components/yoga.image.component";
import {YogaFooter_Plain} from "@/types/generated-strapi-interfaces/api/yoga-footer";
import {StrapiFile} from "@/types/types";
import strapiApi from "@/api/strapi/strapi-api";
export interface Props{
config: YogaFooter_Plain
@@ -14,10 +16,13 @@ const FooterComponent = ({ config: {
contactUsEmail,
contactUsLocation,
contactUsPhoneNumber,
copyRight
copyRight,
logo = undefined
} }: Props) => {
const imageFile: StrapiFile = logo as StrapiFile;
const imageUrl = strapiApi.getImageUrl(imageFile?.url)
console.info("imageUrl", imageUrl);
return (<section className="footer-section" id="footer_section">
<div className="container">
@@ -26,7 +31,7 @@ const FooterComponent = ({ config: {
<div className="col-lg-3 col-md-4 col-sm-6 col-xs-12 d-lg-block d-none">
<div className="footer_logo">
<Link href="/index.html" className="text-decoration-none">
<figure className="mb-0"><YogaImageComponent src="/assets/images/footer_logo.png" alt=""
<figure className="mb-0"><YogaImageComponent src={imageUrl} alt=""
className="img-fluid"/></figure>
</Link>
</div>

View File

@@ -0,0 +1,69 @@
import React from 'react';
interface ListingComponentProps {
text?: string;
}
const ListingComponent: React.FC<ListingComponentProps> = ({ text }) => {
if (!text) {
return null;
}
const lines = text.split('\n');
const elements: React.ReactNode[] = [];
let currentParagraph: string[] = [];
let currentList: React.ReactNode[] = [];
const flushParagraph = () => {
if (currentParagraph.length > 0) {
elements.push(<p key={elements.length}>{currentParagraph.join('\n')}</p>);
currentParagraph = [];
}
};
const flushList = () => {
if (currentList.length > 0) {
elements.push(<ul key={elements.length}>{currentList}</ul>);
currentList = [];
}
};
let currentListItemContent: string[] = [];
const flushListItem = () => {
if(currentListItemContent.length > 0) {
currentList.push(<li key={currentList.length}>{currentListItemContent.join('\n')}</li>);
currentListItemContent = [];
}
}
for (const line of lines) {
const trimmedLine = line.trim();
if (trimmedLine.startsWith('- ') || trimmedLine.startsWith('* ')) {
flushParagraph(); // End any ongoing paragraph
flushListItem(); // End previous list item
currentListItemContent.push(trimmedLine.substring(2));
} else if (trimmedLine === '') {
flushListItem();
flushList(); // An empty line ends the list
} else {
if (currentList.length > 0 || currentListItemContent.length > 0) {
// This line belongs to the current list item
currentListItemContent.push(line);
} else {
// This is a paragraph line
flushList();
currentParagraph.push(line);
}
}
}
flushListItem();
flushList();
flushParagraph();
return <>{elements}</>;
};
export default ListingComponent;

View File

@@ -4,8 +4,10 @@ import {MAIN_MENU} from "@/util/const";
import Nav from "@/components/nav.component";
import {StrapiFile} from "@/types/types";
import strapiApi from "@/api/strapi/strapi-api";
import { YogaCommon_Plain } from "@/types/generated-strapi-interfaces/api/yoga-common";
export interface Props{
config: YogaMainHeaderComponent_Plain
config: YogaMainHeaderComponent_Plain,
common?: YogaCommon_Plain
}
const MainHeaderComponent = ({ config: {
title,
@@ -15,15 +17,17 @@ const MainHeaderComponent = ({ config: {
headerIType,
image
}}: Props) => {
},common}: Props) => {
const imageFile: StrapiFile = image as StrapiFile;
const imageSrc = imageFile ? strapiApi.getImageUrl(imageFile?.url): undefined;
const logoImageFile: StrapiFile = (common?.logoImage) as StrapiFile;
const logoImageSrc = logoImageFile ? strapiApi.getImageUrl(logoImageFile.url) : undefined;
return (
<div className="banner-section-outer">
<header>
<Nav menuItems={MAIN_MENU} imageSrc={imageSrc} />
<Nav menuItems={MAIN_MENU} imageSrc={logoImageSrc} />
</header>
{/*<!-- SOCIAL ICONS -->*/}
<div className="social-icons left_icons float-left d-table" data-aos="fade-down">
@@ -60,7 +64,7 @@ const MainHeaderComponent = ({ config: {
<div className="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div className="banner-section-image">
<figure className="mb-0">
<YogaImageComponent src="/assets/images/banner_right_image.png" alt="" />
<YogaImageComponent src={imageSrc!} alt="" />
</figure>
</div>
</div>

View File

@@ -1,22 +1,22 @@
"use client"
import {FC} from "react";
import YogaImageComponent from "@/components/yoga.image.component";
import clsx from "clsx";
import Link from "next/link";
export interface MenuItem{
export interface MenuItem {
href?: string;
label: string;
children?: MenuItem[];
active?: boolean,
styleClass?: string;
}
export interface Props{
export interface Props {
menuItems: MenuItem[];
imageSrc?: string;
}
const Nav: FC<Props> = ({menuItems, imageSrc}:Props) => {
const Nav = ({menuItems, imageSrc}: Props) => {
return (
<header>
@@ -36,7 +36,8 @@ const Nav: FC<Props> = ({menuItems, imageSrc}:Props) => {
</button>
<div className="collapse navbar-collapse" id="navbarSupportedContent">
<ul className="navbar-nav">
{menuItems.map( (menuItem,index) => <MenuItemComponent key={"nav"+menuItem.href+"_"+index} menuItem={menuItem} />)}
{menuItems.map((menuItem, index) => <MenuItemComponent
key={"nav" + menuItem.href + "_" + index} menuItem={menuItem}/>)}
</ul>
</div>
</nav>
@@ -46,32 +47,35 @@ const Nav: FC<Props> = ({menuItems, imageSrc}:Props) => {
);
}
interface MenuItemProps{
interface MenuItemProps {
menuItem: MenuItem,
dropdownItem?: boolean,
}
const MenuItemComponent: FC<MenuItemProps> = ({menuItem, dropdownItem}: MenuItemProps) => {
if ( !menuItem ){
const MenuItemComponent = ({menuItem, dropdownItem}: MenuItemProps) => {
if (!menuItem) {
return (<></>);
}
if ( !menuItem.children || menuItem.children.length == 0 ){
if (!menuItem.children || menuItem.children.length == 0) {
return (
// <li className="nav-item active">
<li className={clsx("nav-item", {"active": menuItem.active})}>
<a className={clsx("nav-link", {"dropdown-item":dropdownItem},menuItem.styleClass)} href={menuItem.href}>{menuItem.label}</a>
<a className={clsx("nav-link", {"dropdown-item": dropdownItem}, menuItem.styleClass)}
href={menuItem.href!}>{menuItem.label}</a>
</li>
);
}
return (
<li className={clsx("nav-item", "dropdown",{"active": menuItem.active})}>
<li className={clsx("nav-item", "dropdown", {"active": menuItem.active})}>
<a className="nav-link dropdown-toggle dropdown-color navbar-text-color" href="#"
role="button" data-toggle="dropdown" aria-haspopup="true"
role="button" data-toggle="dropdown" aria-haspopup="true"
aria-expanded="false">{menuItem.label}</a>
<div className="dropdown-menu drop-down-content">
<ul className="list-unstyled drop-down-pages">
{
menuItem.children.map((item,index) => <MenuItemComponent key={"child_"+item.href+"_"+index} menuItem={item} dropdownItem={true}/>)
menuItem.children.map((item, index) => <MenuItemComponent
key={"child_" + item.href + "_" + index} menuItem={item} dropdownItem={true}/>)
}
</ul>
</div>

View File

@@ -67,7 +67,6 @@ const OurServiceComponent = ({config: {title,header,description,services}}: Prop
}
]
};
console.info(settings)
return (
<section className="services_section">
<div className="container">

View File

@@ -31,6 +31,11 @@
padding-right: 0;
}
.roundedImage{
border-top-left-radius: 60px;
border-bottom-right-radius: 60px;
}
/*:global(div.slick-active):nth-last-child(n!*){*/
/* padding-left: 6px;*/
/* padding-right: 0;*!*/

View File

@@ -4,6 +4,7 @@ import {StrapiFile} from "@/types/types";
import strapiApi from "@/api/strapi/strapi-api";
import styles from './our.services.item.component.module.css'
import Link from "next/link";
import classNames from "classnames";
export interface Props {
config: YogaSingleService_Plain
@@ -14,7 +15,7 @@ const OurServiceItemComponent = ({config: {header,description,image,name}}: Prop
if (!imageFile || !imageFile.url) {
return null
}
const path = '/services/' + name;
const path = '/serviceList#' + name;
return (
<div className={styles.serviceSlide}>
@@ -22,7 +23,7 @@ const OurServiceItemComponent = ({config: {header,description,image,name}}: Prop
<div className="services_box_content">
<div className="services_box_upper_portion">
<figure className="mb-0">
<YogaImageComponent src={strapiApi.getImageUrl(imageFile.url)} alt="" className="img-fluid"/>
<YogaImageComponent src={strapiApi.getImageUrl(imageFile.url)} alt="" className={classNames(styles.roundedImage,"img-fluid" )}/>
</figure>
</div>
<div className="services_box_lower_portion">

View File

@@ -1,6 +1,8 @@
import YogaImageComponent from "@/components/yoga.image.component";
import OurSpecialitiesItemComponent from "@/components/our.specialities.item.component";
import {YogaSpecialitiesComponent_Plain} from "@/types/generated-strapi-interfaces/api/yoga-specialities-component";
import {StrapiFile} from "@/types/types";
import strapiApi from "@/api/strapi/strapi-api";
export interface Props{
config: YogaSpecialitiesComponent_Plain
@@ -14,8 +16,14 @@ const OurSpecialitiesComponent = ({ config: { title,header,description,
right1,
right2,
right3,
right4
right4,
image
} }: Props) => {
const imageFile: StrapiFile = image as StrapiFile;
const imageUrl = strapiApi.getImageUrl(imageFile?.url)
return (
<section className="our_specialties_section">
@@ -43,7 +51,7 @@ const OurSpecialitiesComponent = ({ config: { title,header,description,
</div>
<div className="col-lg-6 col-md-4 col-sm-6 col-xs-12 d-md-block d-none">
<figure className="specialties_image mb-0">
<YogaImageComponent src="/assets/images/specialties_image.png" alt="" className="img-fluid" />
<YogaImageComponent src={imageUrl} alt="" className="img-fluid" />
</figure>
</div>
<div className="col-lg-3 col-md-4 col-sm-6 col-xs-12" data-aos="fade-right">

View File

@@ -11,7 +11,6 @@ export function PriceItemComponent({config: {header, description, option1,option
// there are some issues with the strapi generated types
const iconFile: StrapiFile = icon as StrapiFile;
const imageFile: StrapiFile = image as StrapiFile;
console.info("image:",strapiApi.getImageUrl(imageFile?.url));
return (
<div className="col-lg-4 col-md-4 col-sm-6 col-xs-12">
<div className="pricing_plans_box_content">

View File

@@ -0,0 +1,32 @@
import {YogaSingleService_Plain} from "@/types/generated-strapi-interfaces/api/yoga-single-service";
import clsx from "clsx";
import NextBlocksRenderer from "@/components/next.blocks.renderer";
import {BlocksContent} from "@strapi/blocks-react-renderer";
import React from "react";
export interface Props {
config: YogaSingleService_Plain
}
const SingleService = ({config}: Props) => {
if (!config || !config.article) {
return null; // or some fallback UI
}
return (
<section id={config.name+""} className={clsx('mb-3')}>
<div className="container">
<div className={"row"}>
<div className={"col-lg-12 col-md-12 col-sm-12 col-xs-12"}>
<NextBlocksRenderer
content={config.article as BlocksContent}
/>
</div>
</div>
</div>
</section>
);
}
export default SingleService;

View File

@@ -25,8 +25,6 @@ const SubHeaderComponent = ( {
logoImageSrc = strapiApi.getImageUrl(logoImageFile?.url) ;
}
console.info("image", logoImageSrc);
return (
<div className="sub-banner-section">
<Nav menuItems={MAIN_MENU} imageSrc={logoImageSrc} />

View File

@@ -0,0 +1,4 @@
.roundedImage img{
border-bottom-right-radius: 60px;
}

View File

@@ -3,14 +3,22 @@ import {
YogaSubscribeNowComponent_Plain
} from "@/types/generated-strapi-interfaces/api/yoga-subscribe-now-component";
import clsx from "clsx";
import {StrapiFile} from "@/types/types";
import strapiApi from "@/api/strapi/strapi-api";
import styles from './subscribe.component.module.css'
export interface Props{
config: YogaSubscribeNowComponent_Plain,
styleClass?: string
styleClass?: string,
}
const SubscribeComponent = ({
config: {title,header,placeHolderEmail,buttonSubscribeLabel},
config: {title,header,placeHolderEmail,buttonSubscribeLabel, image = undefined},
styleClass
}: Props) => {
const imageFile: StrapiFile = image as StrapiFile;
if (!imageFile || !imageFile.url) {
return null
}
return (
<section className={clsx("subscribe_section",styleClass)}>
<div className="container">
@@ -32,8 +40,8 @@ const SubscribeComponent = ({
</div>
</div>
<div className="col-lg-5 col-md-5 col-sm-6 col-xs-12">
<figure className="subscribe_image mb-0">
<YogaImageComponent src="/assets/images/subscribe_image.png" alt=""/>
<figure className={clsx(styles.roundedImage,"subscribe_image","mb-0",)}>
<YogaImageComponent src={strapiApi.getImageUrl(imageFile.url)} alt=""/>
</figure>
</div>
</div>

View File

@@ -1,5 +1,5 @@
import TextWithRightImage from "@/components/text.with.right.image.component";
import TextWithLeftImage from "@/components/text.with.right.left.component";
import TextWithLeftImage from "@/components/text.with.left.image.component";
import {YogaTextWithImageComponent_Plain} from "@/types/generated-strapi-interfaces/api/yoga-text-with-image-component";
export interface Props{

View File

@@ -2,6 +2,7 @@ import YogaImageComponent from "@/components/yoga.image.component";
import {YogaTextWithImageComponent_Plain} from "@/types/generated-strapi-interfaces/api/yoga-text-with-image-component";
import {StrapiFile} from "@/types/types";
import strapiApi from "@/api/strapi/strapi-api";
import ListingComponent from "@/components/listing.component";
export interface Props{
config: YogaTextWithImageComponent_Plain
@@ -29,7 +30,7 @@ export default function TextWithLeftImage ({config: {
<div className="vision_content">
<h5>{title}</h5>
<h2>{header}</h2>
<p>{description}</p>
<ListingComponent text={description} />
<div className="btn_wrapper">
{button && <a href={button.link} className="text-decoration-none read_more_btn">{button.label}</a>}
</div>

View File

@@ -2,6 +2,7 @@ import YogaImageComponent from "@/components/yoga.image.component";
import {YogaTextWithImageComponent_Plain} from "@/types/generated-strapi-interfaces/api/yoga-text-with-image-component";
import {StrapiFile} from "@/types/types";
import strapiApi from "@/api/strapi/strapi-api";
import ListingComponent from "./listing.component";
export interface Props{
config: YogaTextWithImageComponent_Plain
@@ -22,7 +23,7 @@ export default function TextWithRightImage ({config: {
<div className="mission_content">
<h5>{title}</h5>
<h2>{header}</h2>
<p>{description}</p>
<ListingComponent text={description} />
<div className="btn_wrapper">
{button && <a href={button.link} className="text-decoration-none read_more_btn">{button.label}</a>}
</div>

View File

@@ -10,6 +10,7 @@ import { YogaBlogPostsComponent } from './yoga-blog-posts-component';
import { YogaSubscribeNowComponent } from './yoga-subscribe-now-component';
import { YogaFooter } from './yoga-footer';
import { YogaMainHeaderComponent } from './yoga-main-header-component';
import { YogaCommon } from './yoga-common';
import { YogaOurServicesComponent_Plain } from './yoga-our-services-component';
import { YogaAboutUsComponent_Plain } from './yoga-about-us-component';
import { YogaSpecialitiesComponent_Plain } from './yoga-specialities-component';
@@ -20,6 +21,7 @@ import { YogaBlogPostsComponent_Plain } from './yoga-blog-posts-component';
import { YogaSubscribeNowComponent_Plain } from './yoga-subscribe-now-component';
import { YogaFooter_Plain } from './yoga-footer';
import { YogaMainHeaderComponent_Plain } from './yoga-main-header-component';
import { YogaCommon_Plain } from './yoga-common';
import { AdminPanelRelationPropertyModification } from '../common/AdminPanelRelationPropertyModification';
export interface Home {
@@ -35,6 +37,7 @@ export interface Home {
subscribeNow?: { data: YogaSubscribeNowComponent };
footer?: { data: YogaFooter };
header?: { data: YogaMainHeaderComponent };
common?: { data: YogaCommon };
locale: string;
localizations?: { data: Home[] };
};
@@ -51,6 +54,7 @@ export interface Home_Plain {
subscribeNow?: YogaSubscribeNowComponent_Plain;
footer?: YogaFooter_Plain;
header?: YogaMainHeaderComponent_Plain;
common?: YogaCommon_Plain;
locale: string;
localizations?: Home_Plain[];
}
@@ -67,6 +71,7 @@ export interface Home_NoRelations {
subscribeNow?: number;
footer?: number;
header?: number;
common?: number;
locale: string;
localizations?: Home[];
}
@@ -83,6 +88,7 @@ export interface Home_AdminPanelLifeCycle {
subscribeNow?: AdminPanelRelationPropertyModification<YogaSubscribeNowComponent_Plain>;
footer?: AdminPanelRelationPropertyModification<YogaFooter_Plain>;
header?: AdminPanelRelationPropertyModification<YogaMainHeaderComponent_Plain>;
common?: AdminPanelRelationPropertyModification<YogaCommon_Plain>;
locale: string;
localizations?: Home[];
}

View File

@@ -0,0 +1,52 @@
// Interface automatically generated by schemas-to-ts
import { YogaSubscribeNowComponent } from './yoga-subscribe-now-component';
import { YogaFooter } from './yoga-footer';
import { YogaCommon } from './yoga-common';
import { YogaSingleService } from './yoga-single-service';
import { YogaSubscribeNowComponent_Plain } from './yoga-subscribe-now-component';
import { YogaFooter_Plain } from './yoga-footer';
import { YogaCommon_Plain } from './yoga-common';
import { YogaSingleService_Plain } from './yoga-single-service';
import { AdminPanelRelationPropertyModification } from '../common/AdminPanelRelationPropertyModification';
export interface ServiceListPage {
id: number;
attributes: {
createdAt: Date; updatedAt: Date; publishedAt?: Date; header?: string;
description?: string;
subscribeNow?: { data: YogaSubscribeNowComponent };
footer?: { data: YogaFooter };
common?: { data: YogaCommon };
services: { data: YogaSingleService[] };
};
}
export interface ServiceListPage_Plain {
id: number;
createdAt: Date; updatedAt: Date; publishedAt?: Date; header?: string;
description?: string;
subscribeNow?: YogaSubscribeNowComponent_Plain;
footer?: YogaFooter_Plain;
common?: YogaCommon_Plain;
services: YogaSingleService_Plain[];
}
export interface ServiceListPage_NoRelations {
id: number;
createdAt: Date; updatedAt: Date; publishedAt?: Date; header?: string;
description?: string;
subscribeNow?: number;
footer?: number;
common?: number;
services: number[];
}
export interface ServiceListPage_AdminPanelLifeCycle {
id: number;
createdAt: Date; updatedAt: Date; publishedAt?: Date; header?: string;
description?: string;
subscribeNow?: AdminPanelRelationPropertyModification<YogaSubscribeNowComponent_Plain>;
footer?: AdminPanelRelationPropertyModification<YogaFooter_Plain>;
common?: AdminPanelRelationPropertyModification<YogaCommon_Plain>;
services: AdminPanelRelationPropertyModification<YogaSingleService_Plain>;
}

View File

@@ -8,19 +8,23 @@ export interface YogaCommon {
id: number;
attributes: {
createdAt: Date; updatedAt: Date; publishedAt?: Date; logoImage?: { data: Media };
name: string;
};
}
export interface YogaCommon_Plain {
id: number;
createdAt: Date; updatedAt: Date; publishedAt?: Date; logoImage?: Media_Plain;
name: string;
}
export interface YogaCommon_NoRelations {
id: number;
createdAt: Date; updatedAt: Date; publishedAt?: Date; logoImage?: number;
name: string;
}
export interface YogaCommon_AdminPanelLifeCycle {
id: number;
createdAt: Date; updatedAt: Date; publishedAt?: Date; logoImage?: AdminPanelRelationPropertyModification<Media_Plain>;
name: string;
}

View File

@@ -1,8 +1,11 @@
// Interface automatically generated by schemas-to-ts
import { Link } from '../components/yoga-site/Link';
import { Media } from '../components/shared/Media';
import { Link_Plain } from '../components/yoga-site/Link';
import { Media_Plain } from '../components/shared/Media';
import { Link_NoRelations } from '../components/yoga-site/Link';
import { AdminPanelRelationPropertyModification } from '../common/AdminPanelRelationPropertyModification';
export interface YogaFooter {
id: number;
@@ -17,6 +20,7 @@ export interface YogaFooter {
contactUsLocation?: Link;
copyRight?: string;
name?: string;
logo?: { data: Media };
};
}
export interface YogaFooter_Plain {
@@ -31,6 +35,7 @@ export interface YogaFooter_Plain {
contactUsLocation?: Link_Plain;
copyRight?: string;
name?: string;
logo?: Media_Plain;
}
export interface YogaFooter_NoRelations {
@@ -45,6 +50,7 @@ export interface YogaFooter_NoRelations {
contactUsLocation?: Link_NoRelations;
copyRight?: string;
name?: string;
logo?: number;
}
export interface YogaFooter_AdminPanelLifeCycle {
@@ -59,4 +65,5 @@ export interface YogaFooter_AdminPanelLifeCycle {
contactUsLocation?: Link_Plain;
copyRight?: string;
name?: string;
logo?: AdminPanelRelationPropertyModification<Media_Plain>;
}

View File

@@ -1,7 +1,9 @@
// Interface automatically generated by schemas-to-ts
import { YogaSingleSpeciality } from './yoga-single-speciality';
import { Media } from '../components/shared/Media';
import { YogaSingleSpeciality_Plain } from './yoga-single-speciality';
import { Media_Plain } from '../components/shared/Media';
import { AdminPanelRelationPropertyModification } from '../common/AdminPanelRelationPropertyModification';
export interface YogaSpecialitiesComponent {
@@ -19,6 +21,7 @@ export interface YogaSpecialitiesComponent {
right2?: { data: YogaSingleSpeciality };
right3?: { data: YogaSingleSpeciality };
right4?: { data: YogaSingleSpeciality };
image?: { data: Media };
locale: string;
localizations?: { data: YogaSpecialitiesComponent[] };
};
@@ -37,6 +40,7 @@ export interface YogaSpecialitiesComponent_Plain {
right2?: YogaSingleSpeciality_Plain;
right3?: YogaSingleSpeciality_Plain;
right4?: YogaSingleSpeciality_Plain;
image?: Media_Plain;
locale: string;
localizations?: YogaSpecialitiesComponent_Plain[];
}
@@ -55,6 +59,7 @@ export interface YogaSpecialitiesComponent_NoRelations {
right2?: number;
right3?: number;
right4?: number;
image?: number;
locale: string;
localizations?: YogaSpecialitiesComponent[];
}
@@ -73,6 +78,7 @@ export interface YogaSpecialitiesComponent_AdminPanelLifeCycle {
right2?: AdminPanelRelationPropertyModification<YogaSingleSpeciality_Plain>;
right3?: AdminPanelRelationPropertyModification<YogaSingleSpeciality_Plain>;
right4?: AdminPanelRelationPropertyModification<YogaSingleSpeciality_Plain>;
image?: AdminPanelRelationPropertyModification<Media_Plain>;
locale: string;
localizations?: YogaSpecialitiesComponent[];
}

View File

@@ -1,5 +1,9 @@
// Interface automatically generated by schemas-to-ts
import { Media } from '../components/shared/Media';
import { Media_Plain } from '../components/shared/Media';
import { AdminPanelRelationPropertyModification } from '../common/AdminPanelRelationPropertyModification';
export interface YogaSubscribeNowComponent {
id: number;
attributes: {
@@ -7,6 +11,7 @@ export interface YogaSubscribeNowComponent {
header?: string;
placeHolderEmail?: string;
buttonSubscribeLabel?: string;
image?: { data: Media };
};
}
export interface YogaSubscribeNowComponent_Plain {
@@ -15,6 +20,7 @@ export interface YogaSubscribeNowComponent_Plain {
header?: string;
placeHolderEmail?: string;
buttonSubscribeLabel?: string;
image?: Media_Plain;
}
export interface YogaSubscribeNowComponent_NoRelations {
@@ -23,6 +29,7 @@ export interface YogaSubscribeNowComponent_NoRelations {
header?: string;
placeHolderEmail?: string;
buttonSubscribeLabel?: string;
image?: number;
}
export interface YogaSubscribeNowComponent_AdminPanelLifeCycle {
@@ -31,4 +38,5 @@ export interface YogaSubscribeNowComponent_AdminPanelLifeCycle {
header?: string;
placeHolderEmail?: string;
buttonSubscribeLabel?: string;
image?: AdminPanelRelationPropertyModification<Media_Plain>;
}

View File

@@ -11,29 +11,42 @@ export const MAIN_MENU:MenuItem[] = [
},
{
label: 'Szolgáltatásaink',
href: '/services'
href: '/serviceList'
},
// {
// label: 'Oldalak',
// children: [
// {
// label: 'Áraink',
// href: '/prices'
// },
// {
// label: 'FAQ',
// href: '/faq'
// },
// ]
// },
{
label: 'Áraink',
href: '/prices'
},
{
label: 'Oldalak',
children: [
{
label: 'Áraink',
href: '/prices'
},
{
label: 'FAQ',
href: '/faq'
},
]
label: 'GY.I.K',
href: '/faq'
},
{
label: 'Rólam',
href: '/team'
label: 'Szolgáltatásaink',
href: '/serviceList'
},
// {
// label: 'Rólam',
// href: '/team'
// },
// {
// label: 'Blog',
// href: '/blog'
// },
{
label: 'Blog',
href: '/blog'
}, {
label: 'Kapcsolat',
href: '/contact',
styleClass: "contact_us"

View File

@@ -39,6 +39,9 @@
specialityRight4: {
fields: ['*'] ,
},
"image": {
"fields": ["name","mime","url"]
}
}
}
},

View File

@@ -10,6 +10,7 @@ import { YogaBlogPostsComponent } from './yoga-blog-posts-component';
import { YogaSubscribeNowComponent } from './yoga-subscribe-now-component';
import { YogaFooter } from './yoga-footer';
import { YogaMainHeaderComponent } from './yoga-main-header-component';
import { YogaCommon } from './yoga-common';
import { YogaOurServicesComponent_Plain } from './yoga-our-services-component';
import { YogaAboutUsComponent_Plain } from './yoga-about-us-component';
import { YogaSpecialitiesComponent_Plain } from './yoga-specialities-component';
@@ -20,6 +21,7 @@ import { YogaBlogPostsComponent_Plain } from './yoga-blog-posts-component';
import { YogaSubscribeNowComponent_Plain } from './yoga-subscribe-now-component';
import { YogaFooter_Plain } from './yoga-footer';
import { YogaMainHeaderComponent_Plain } from './yoga-main-header-component';
import { YogaCommon_Plain } from './yoga-common';
import { AdminPanelRelationPropertyModification } from '../common/AdminPanelRelationPropertyModification';
export interface Home {
@@ -35,6 +37,7 @@ export interface Home {
subscribeNow?: { data: YogaSubscribeNowComponent };
footer?: { data: YogaFooter };
header?: { data: YogaMainHeaderComponent };
common?: { data: YogaCommon };
locale: string;
localizations?: { data: Home[] };
};
@@ -51,6 +54,7 @@ export interface Home_Plain {
subscribeNow?: YogaSubscribeNowComponent_Plain;
footer?: YogaFooter_Plain;
header?: YogaMainHeaderComponent_Plain;
common?: YogaCommon_Plain;
locale: string;
localizations?: Home_Plain[];
}
@@ -67,6 +71,7 @@ export interface Home_NoRelations {
subscribeNow?: number;
footer?: number;
header?: number;
common?: number;
locale: string;
localizations?: Home[];
}
@@ -83,6 +88,7 @@ export interface Home_AdminPanelLifeCycle {
subscribeNow?: AdminPanelRelationPropertyModification<YogaSubscribeNowComponent_Plain>;
footer?: AdminPanelRelationPropertyModification<YogaFooter_Plain>;
header?: AdminPanelRelationPropertyModification<YogaMainHeaderComponent_Plain>;
common?: AdminPanelRelationPropertyModification<YogaCommon_Plain>;
locale: string;
localizations?: Home[];
}

View File

@@ -0,0 +1,52 @@
// Interface automatically generated by schemas-to-ts
import { YogaSubscribeNowComponent } from './yoga-subscribe-now-component';
import { YogaFooter } from './yoga-footer';
import { YogaCommon } from './yoga-common';
import { YogaSingleService } from './yoga-single-service';
import { YogaSubscribeNowComponent_Plain } from './yoga-subscribe-now-component';
import { YogaFooter_Plain } from './yoga-footer';
import { YogaCommon_Plain } from './yoga-common';
import { YogaSingleService_Plain } from './yoga-single-service';
import { AdminPanelRelationPropertyModification } from '../common/AdminPanelRelationPropertyModification';
export interface ServiceListPage {
id: number;
attributes: {
createdAt: Date; updatedAt: Date; publishedAt?: Date; header?: string;
description?: string;
subscribeNow?: { data: YogaSubscribeNowComponent };
footer?: { data: YogaFooter };
common?: { data: YogaCommon };
services: { data: YogaSingleService[] };
};
}
export interface ServiceListPage_Plain {
id: number;
createdAt: Date; updatedAt: Date; publishedAt?: Date; header?: string;
description?: string;
subscribeNow?: YogaSubscribeNowComponent_Plain;
footer?: YogaFooter_Plain;
common?: YogaCommon_Plain;
services: YogaSingleService_Plain[];
}
export interface ServiceListPage_NoRelations {
id: number;
createdAt: Date; updatedAt: Date; publishedAt?: Date; header?: string;
description?: string;
subscribeNow?: number;
footer?: number;
common?: number;
services: number[];
}
export interface ServiceListPage_AdminPanelLifeCycle {
id: number;
createdAt: Date; updatedAt: Date; publishedAt?: Date; header?: string;
description?: string;
subscribeNow?: AdminPanelRelationPropertyModification<YogaSubscribeNowComponent_Plain>;
footer?: AdminPanelRelationPropertyModification<YogaFooter_Plain>;
common?: AdminPanelRelationPropertyModification<YogaCommon_Plain>;
services: AdminPanelRelationPropertyModification<YogaSingleService_Plain>;
}

View File

@@ -1,8 +1,11 @@
// Interface automatically generated by schemas-to-ts
import { Link } from '../components/yoga-site/Link';
import { Media } from '../components/shared/Media';
import { Link_Plain } from '../components/yoga-site/Link';
import { Media_Plain } from '../components/shared/Media';
import { Link_NoRelations } from '../components/yoga-site/Link';
import { AdminPanelRelationPropertyModification } from '../common/AdminPanelRelationPropertyModification';
export interface YogaFooter {
id: number;
@@ -17,6 +20,7 @@ export interface YogaFooter {
contactUsLocation?: Link;
copyRight?: string;
name?: string;
logo?: { data: Media };
};
}
export interface YogaFooter_Plain {
@@ -31,6 +35,7 @@ export interface YogaFooter_Plain {
contactUsLocation?: Link_Plain;
copyRight?: string;
name?: string;
logo?: Media_Plain;
}
export interface YogaFooter_NoRelations {
@@ -45,6 +50,7 @@ export interface YogaFooter_NoRelations {
contactUsLocation?: Link_NoRelations;
copyRight?: string;
name?: string;
logo?: number;
}
export interface YogaFooter_AdminPanelLifeCycle {
@@ -59,4 +65,5 @@ export interface YogaFooter_AdminPanelLifeCycle {
contactUsLocation?: Link_Plain;
copyRight?: string;
name?: string;
logo?: AdminPanelRelationPropertyModification<Media_Plain>;
}

View File

@@ -1,7 +1,9 @@
// Interface automatically generated by schemas-to-ts
import { YogaSingleSpeciality } from './yoga-single-speciality';
import { Media } from '../components/shared/Media';
import { YogaSingleSpeciality_Plain } from './yoga-single-speciality';
import { Media_Plain } from '../components/shared/Media';
import { AdminPanelRelationPropertyModification } from '../common/AdminPanelRelationPropertyModification';
export interface YogaSpecialitiesComponent {
@@ -19,6 +21,7 @@ export interface YogaSpecialitiesComponent {
right2?: { data: YogaSingleSpeciality };
right3?: { data: YogaSingleSpeciality };
right4?: { data: YogaSingleSpeciality };
image?: { data: Media };
locale: string;
localizations?: { data: YogaSpecialitiesComponent[] };
};
@@ -37,6 +40,7 @@ export interface YogaSpecialitiesComponent_Plain {
right2?: YogaSingleSpeciality_Plain;
right3?: YogaSingleSpeciality_Plain;
right4?: YogaSingleSpeciality_Plain;
image?: Media_Plain;
locale: string;
localizations?: YogaSpecialitiesComponent_Plain[];
}
@@ -55,6 +59,7 @@ export interface YogaSpecialitiesComponent_NoRelations {
right2?: number;
right3?: number;
right4?: number;
image?: number;
locale: string;
localizations?: YogaSpecialitiesComponent[];
}
@@ -73,6 +78,7 @@ export interface YogaSpecialitiesComponent_AdminPanelLifeCycle {
right2?: AdminPanelRelationPropertyModification<YogaSingleSpeciality_Plain>;
right3?: AdminPanelRelationPropertyModification<YogaSingleSpeciality_Plain>;
right4?: AdminPanelRelationPropertyModification<YogaSingleSpeciality_Plain>;
image?: AdminPanelRelationPropertyModification<Media_Plain>;
locale: string;
localizations?: YogaSpecialitiesComponent[];
}

View File

@@ -1,5 +1,9 @@
// Interface automatically generated by schemas-to-ts
import { Media } from '../components/shared/Media';
import { Media_Plain } from '../components/shared/Media';
import { AdminPanelRelationPropertyModification } from '../common/AdminPanelRelationPropertyModification';
export interface YogaSubscribeNowComponent {
id: number;
attributes: {
@@ -7,6 +11,7 @@ export interface YogaSubscribeNowComponent {
header?: string;
placeHolderEmail?: string;
buttonSubscribeLabel?: string;
image?: { data: Media };
};
}
export interface YogaSubscribeNowComponent_Plain {
@@ -15,6 +20,7 @@ export interface YogaSubscribeNowComponent_Plain {
header?: string;
placeHolderEmail?: string;
buttonSubscribeLabel?: string;
image?: Media_Plain;
}
export interface YogaSubscribeNowComponent_NoRelations {
@@ -23,6 +29,7 @@ export interface YogaSubscribeNowComponent_NoRelations {
header?: string;
placeHolderEmail?: string;
buttonSubscribeLabel?: string;
image?: number;
}
export interface YogaSubscribeNowComponent_AdminPanelLifeCycle {
@@ -31,4 +38,5 @@ export interface YogaSubscribeNowComponent_AdminPanelLifeCycle {
header?: string;
placeHolderEmail?: string;
buttonSubscribeLabel?: string;
image?: AdminPanelRelationPropertyModification<Media_Plain>;
}

View File

@@ -65,6 +65,11 @@
"type": "relation",
"relation": "oneToOne",
"target": "api::yoga-main-header-component.yoga-main-header-component"
},
"common": {
"type": "relation",
"relation": "oneToOne",
"target": "api::yoga-common.yoga-common"
}
}
}

View File

@@ -0,0 +1,40 @@
{
"kind": "singleType",
"collectionName": "service_list_pages",
"info": {
"singularName": "service-list-page",
"pluralName": "service-list-pages",
"displayName": "ServiceListPage"
},
"options": {
"draftAndPublish": true
},
"attributes": {
"header": {
"type": "string"
},
"description": {
"type": "text"
},
"subscribeNow": {
"type": "relation",
"relation": "oneToOne",
"target": "api::yoga-subscribe-now-component.yoga-subscribe-now-component"
},
"footer": {
"type": "relation",
"relation": "oneToOne",
"target": "api::yoga-footer.yoga-footer"
},
"common": {
"type": "relation",
"relation": "oneToOne",
"target": "api::yoga-common.yoga-common"
},
"services": {
"type": "relation",
"relation": "oneToMany",
"target": "api::yoga-single-service.yoga-single-service"
}
}
}

View File

@@ -0,0 +1,7 @@
/**
* service-list-page controller
*/
import { factories } from '@strapi/strapi'
export default factories.createCoreController('api::service-list-page.service-list-page');

View File

@@ -0,0 +1,7 @@
/**
* service-list-page router
*/
import { factories } from '@strapi/strapi';
export default factories.createCoreRouter('api::service-list-page.service-list-page');

View File

@@ -0,0 +1,7 @@
/**
* service-list-page service
*/
import { factories } from '@strapi/strapi';
export default factories.createCoreService('api::service-list-page.service-list-page');

View File

@@ -4,7 +4,7 @@
"info": {
"singularName": "services-page",
"pluralName": "services-pages",
"displayName": "Services",
"displayName": "ServicesPage",
"description": ""
},
"options": {

View File

@@ -50,6 +50,14 @@
},
"name": {
"type": "string"
},
"logo": {
"allowedTypes": [
"images",
"files"
],
"type": "media",
"multiple": false
}
}
}

View File

@@ -87,6 +87,14 @@
"type": "relation",
"relation": "oneToOne",
"target": "api::yoga-single-speciality.yoga-single-speciality"
},
"image": {
"allowedTypes": [
"images",
"files"
],
"type": "media",
"multiple": false
}
}
}

View File

@@ -4,7 +4,8 @@
"info": {
"singularName": "yoga-subscribe-now-component",
"pluralName": "yoga-subscribe-now-components",
"displayName": "YogaSubscribeNowComponent"
"displayName": "YogaSubscribeNowComponent",
"description": ""
},
"options": {
"draftAndPublish": true
@@ -22,6 +23,14 @@
},
"buttonSubscribeLabel": {
"type": "string"
},
"image": {
"allowedTypes": [
"images",
"files"
],
"type": "media",
"multiple": false
}
}
}

View File

@@ -710,6 +710,10 @@ export interface ApiHomeHome extends Struct.SingleTypeSchema {
'oneToOne',
'api::yoga-blog-posts-component.yoga-blog-posts-component'
>;
common: Schema.Attribute.Relation<
'oneToOne',
'api::yoga-common.yoga-common'
>;
contactUs: Schema.Attribute.Relation<
'oneToOne',
'api::yoga-contact-us.yoga-contact-us'
@@ -867,6 +871,52 @@ export interface ApiPricesPagePricesPage extends Struct.SingleTypeSchema {
};
}
export interface ApiServiceListPageServiceListPage
extends Struct.SingleTypeSchema {
collectionName: 'service_list_pages';
info: {
displayName: 'ServiceListPage';
pluralName: 'service-list-pages';
singularName: 'service-list-page';
};
options: {
draftAndPublish: true;
};
attributes: {
common: Schema.Attribute.Relation<
'oneToOne',
'api::yoga-common.yoga-common'
>;
createdAt: Schema.Attribute.DateTime;
createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> &
Schema.Attribute.Private;
description: Schema.Attribute.Text;
footer: Schema.Attribute.Relation<
'oneToOne',
'api::yoga-footer.yoga-footer'
>;
header: Schema.Attribute.String;
locale: Schema.Attribute.String & Schema.Attribute.Private;
localizations: Schema.Attribute.Relation<
'oneToMany',
'api::service-list-page.service-list-page'
> &
Schema.Attribute.Private;
publishedAt: Schema.Attribute.DateTime;
services: Schema.Attribute.Relation<
'oneToMany',
'api::yoga-single-service.yoga-single-service'
>;
subscribeNow: Schema.Attribute.Relation<
'oneToOne',
'api::yoga-subscribe-now-component.yoga-subscribe-now-component'
>;
updatedAt: Schema.Attribute.DateTime;
updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> &
Schema.Attribute.Private;
};
}
export interface ApiServicePageServicePage extends Struct.SingleTypeSchema {
collectionName: 'service_pages';
info: {
@@ -913,7 +963,7 @@ export interface ApiServicesPageServicesPage extends Struct.SingleTypeSchema {
collectionName: 'services_pages';
info: {
description: '';
displayName: 'Services';
displayName: 'ServicesPage';
pluralName: 'services-pages';
singularName: 'services-page';
};
@@ -1543,6 +1593,7 @@ export interface ApiYogaFooterYogaFooter extends Struct.CollectionTypeSchema {
'api::yoga-footer.yoga-footer'
> &
Schema.Attribute.Private;
logo: Schema.Attribute.Media<'images' | 'files'>;
name: Schema.Attribute.String;
publishedAt: Schema.Attribute.DateTime;
quickLinksHeader: Schema.Attribute.String;
@@ -1926,6 +1977,7 @@ export interface ApiYogaSpecialitiesComponentYogaSpecialitiesComponent
localized: true;
};
}>;
image: Schema.Attribute.Media<'images' | 'files'>;
left1: Schema.Attribute.Relation<
'oneToOne',
'api::yoga-single-speciality.yoga-single-speciality'
@@ -1986,6 +2038,7 @@ export interface ApiYogaSubscribeNowComponentYogaSubscribeNowComponent
extends Struct.CollectionTypeSchema {
collectionName: 'yoga_subscribe_now_components';
info: {
description: '';
displayName: 'YogaSubscribeNowComponent';
pluralName: 'yoga-subscribe-now-components';
singularName: 'yoga-subscribe-now-component';
@@ -1999,6 +2052,7 @@ export interface ApiYogaSubscribeNowComponentYogaSubscribeNowComponent
createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> &
Schema.Attribute.Private;
header: Schema.Attribute.String;
image: Schema.Attribute.Media<'images' | 'files'>;
locale: Schema.Attribute.String & Schema.Attribute.Private;
localizations: Schema.Attribute.Relation<
'oneToMany',
@@ -2600,6 +2654,7 @@ declare module '@strapi/strapi' {
'api::page.page': ApiPagePage;
'api::person.person': ApiPersonPerson;
'api::prices-page.prices-page': ApiPricesPagePricesPage;
'api::service-list-page.service-list-page': ApiServiceListPageServiceListPage;
'api::service-page.service-page': ApiServicePageServicePage;
'api::services-page.services-page': ApiServicesPageServicesPage;
'api::yoga-about-us-component.yoga-about-us-component': ApiYogaAboutUsComponentYogaAboutUsComponent;