Compare commits
35 Commits
e5bafff815
...
service-ar
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
551f545935 | ||
|
|
958007ed2f | ||
| 217a26ca83 | |||
|
|
d50eac40c3 | ||
|
|
f0f0a975a9 | ||
|
|
97feef9395 | ||
| 6866c0e41c | |||
|
|
dd6f21c57b | ||
|
|
6bb9365a6c | ||
|
|
434de73554 | ||
|
|
d248ccd985 | ||
|
|
0f3056af01 | ||
|
|
0be0070568 | ||
| 7a3cf063ed | |||
|
|
f33e97666e | ||
|
|
67839dbfb9 | ||
|
|
35f172702a | ||
|
|
22272e0a17 | ||
| 4a0cf5762f | |||
|
|
16b6107206 | ||
|
|
9dc426bf64 | ||
|
|
2c71984d96 | ||
|
|
2d4487263d | ||
|
|
f1daf34751 | ||
| e106863c75 | |||
|
|
30128ea7c0 | ||
|
|
57552b3cf3 | ||
|
|
5db6974d16 | ||
|
|
77363d0f45 | ||
|
|
dbb1bc3073 | ||
| 7aab555cd2 | |||
| af1ad3227a | |||
|
|
07365df5eb | ||
|
|
8826edfcb6 | ||
|
|
c2095b6d8b |
13
api.http
13
api.http
@@ -22,3 +22,16 @@ x
|
||||
GET {{domain}}/api/yoga-blog-posts/wmhqy1n8japcfpy0of4hauwm
|
||||
Accept: application/json
|
||||
#Authorization: Bearer {{token}}
|
||||
|
||||
|
||||
### GET request with a header
|
||||
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]=*
|
||||
Accept: application/json
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
5
dev.sh
Executable file
5
dev.sh
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
cd environment/dev/docker-compose/yogastic
|
||||
docker compose up -d
|
||||
|
||||
1
environment/common/.gitignore
vendored
Normal file
1
environment/common/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.env
|
||||
255
environment/common/package-lock.json
generated
Normal file
255
environment/common/package-lock.json
generated
Normal file
@@ -0,0 +1,255 @@
|
||||
{
|
||||
"name": "common",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "common",
|
||||
"version": "1.0.0",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@types/js-yaml": "^4.0.9",
|
||||
"@types/node": "^22.15.18",
|
||||
"dotenv": "^16.5.0",
|
||||
"js-yaml": "^4.1.0",
|
||||
"ts-node": "^10.9.2",
|
||||
"typescript": "^5.8.3"
|
||||
}
|
||||
},
|
||||
"node_modules/@cspotcode/source-map-support": {
|
||||
"version": "0.8.1",
|
||||
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
|
||||
"integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jridgewell/trace-mapping": "0.3.9"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/resolve-uri": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
|
||||
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/sourcemap-codec": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
|
||||
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@jridgewell/trace-mapping": {
|
||||
"version": "0.3.9",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
|
||||
"integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jridgewell/resolve-uri": "^3.0.3",
|
||||
"@jridgewell/sourcemap-codec": "^1.4.10"
|
||||
}
|
||||
},
|
||||
"node_modules/@tsconfig/node10": {
|
||||
"version": "1.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
|
||||
"integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@tsconfig/node12": {
|
||||
"version": "1.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
|
||||
"integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@tsconfig/node14": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
|
||||
"integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@tsconfig/node16": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
|
||||
"integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/js-yaml": {
|
||||
"version": "4.0.9",
|
||||
"resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz",
|
||||
"integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "22.15.18",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.18.tgz",
|
||||
"integrity": "sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"undici-types": "~6.21.0"
|
||||
}
|
||||
},
|
||||
"node_modules/acorn": {
|
||||
"version": "8.14.1",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
|
||||
"integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"acorn": "bin/acorn"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/acorn-walk": {
|
||||
"version": "8.3.4",
|
||||
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
|
||||
"integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"acorn": "^8.11.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/arg": {
|
||||
"version": "4.1.3",
|
||||
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
|
||||
"integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/argparse": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
|
||||
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
|
||||
"license": "Python-2.0"
|
||||
},
|
||||
"node_modules/create-require": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
|
||||
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/diff": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
|
||||
"integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
|
||||
"license": "BSD-3-Clause",
|
||||
"engines": {
|
||||
"node": ">=0.3.1"
|
||||
}
|
||||
},
|
||||
"node_modules/dotenv": {
|
||||
"version": "16.5.0",
|
||||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz",
|
||||
"integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==",
|
||||
"license": "BSD-2-Clause",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://dotenvx.com"
|
||||
}
|
||||
},
|
||||
"node_modules/js-yaml": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
|
||||
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"argparse": "^2.0.1"
|
||||
},
|
||||
"bin": {
|
||||
"js-yaml": "bin/js-yaml.js"
|
||||
}
|
||||
},
|
||||
"node_modules/make-error": {
|
||||
"version": "1.3.6",
|
||||
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
|
||||
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/ts-node": {
|
||||
"version": "10.9.2",
|
||||
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
|
||||
"integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@cspotcode/source-map-support": "^0.8.0",
|
||||
"@tsconfig/node10": "^1.0.7",
|
||||
"@tsconfig/node12": "^1.0.7",
|
||||
"@tsconfig/node14": "^1.0.0",
|
||||
"@tsconfig/node16": "^1.0.2",
|
||||
"acorn": "^8.4.1",
|
||||
"acorn-walk": "^8.1.1",
|
||||
"arg": "^4.1.0",
|
||||
"create-require": "^1.1.0",
|
||||
"diff": "^4.0.1",
|
||||
"make-error": "^1.1.1",
|
||||
"v8-compile-cache-lib": "^3.0.1",
|
||||
"yn": "3.1.1"
|
||||
},
|
||||
"bin": {
|
||||
"ts-node": "dist/bin.js",
|
||||
"ts-node-cwd": "dist/bin-cwd.js",
|
||||
"ts-node-esm": "dist/bin-esm.js",
|
||||
"ts-node-script": "dist/bin-script.js",
|
||||
"ts-node-transpile-only": "dist/bin-transpile.js",
|
||||
"ts-script": "dist/bin-script-deprecated.js"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@swc/core": ">=1.2.50",
|
||||
"@swc/wasm": ">=1.2.50",
|
||||
"@types/node": "*",
|
||||
"typescript": ">=2.7"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@swc/core": {
|
||||
"optional": true
|
||||
},
|
||||
"@swc/wasm": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/typescript": {
|
||||
"version": "5.8.3",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
|
||||
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
"tsserver": "bin/tsserver"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.17"
|
||||
}
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "6.21.0",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
|
||||
"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/v8-compile-cache-lib": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
|
||||
"integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/yn": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
|
||||
"integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
19
environment/common/package.json
Normal file
19
environment/common/package.json
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"name": "common",
|
||||
"version": "1.0.0",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"description": "",
|
||||
"dependencies": {
|
||||
"@types/js-yaml": "^4.0.9",
|
||||
"@types/node": "^22.15.18",
|
||||
"dotenv": "^16.5.0",
|
||||
"js-yaml": "^4.1.0",
|
||||
"ts-node": "^10.9.2",
|
||||
"typescript": "^5.8.3"
|
||||
}
|
||||
}
|
||||
28
environment/common/src/update.service.version.ts
Normal file
28
environment/common/src/update.service.version.ts
Normal file
@@ -0,0 +1,28 @@
|
||||
|
||||
import yaml from 'js-yaml'
|
||||
import fs from 'fs';
|
||||
import dotenv from "dotenv"
|
||||
|
||||
dotenv.config()
|
||||
if ( !process.env.TARGET_FILE
|
||||
|| !process.env.TARGET_SERVICE
|
||||
|| !process.env.TARGET_IMAGE ) {
|
||||
console.log("environment variables: TARGET_FILE, TARGET_SERVICE, TARGET_IMAGE are required")
|
||||
process.exit(1)
|
||||
}
|
||||
console.log("Working directory",process.cwd());
|
||||
console.log("TARGET_FILE",process.env.TARGET_FILE);
|
||||
console.log("TARGET_SERVICE",process.env.TARGET_SERVICE);
|
||||
console.log("TARGET_IMAGE",process.env.TARGET_IMAGE);
|
||||
try {
|
||||
console.log("updating service version");
|
||||
const composeFile: any = yaml.load(fs.readFileSync(process.env.TARGET_FILE as string, 'utf8'));
|
||||
console.log("updating image");
|
||||
composeFile.services[process.env.TARGET_SERVICE as string].image = process.env.TARGET_IMAGE;
|
||||
const result = yaml.dump(composeFile);
|
||||
fs.writeFileSync(process.env.TARGET_FILE as string, result)
|
||||
console.log("image updated",process.env.TARGET_FILE,process.env.TARGET_SERVICE,process.env.TARGET_IMAGE);
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
|
||||
113
environment/common/tsconfig.json
Normal file
113
environment/common/tsconfig.json
Normal file
@@ -0,0 +1,113 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
/* Visit https://aka.ms/tsconfig to read more about this file */
|
||||
|
||||
/* Projects */
|
||||
// "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
|
||||
// "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
|
||||
// "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
|
||||
// "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
|
||||
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
|
||||
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
|
||||
|
||||
/* Language and Environment */
|
||||
"target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
|
||||
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
|
||||
// "jsx": "preserve", /* Specify what JSX code is generated. */
|
||||
// "libReplacement": true, /* Enable lib replacement. */
|
||||
// "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
|
||||
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
|
||||
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
|
||||
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
|
||||
// "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
|
||||
// "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
|
||||
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
|
||||
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
|
||||
// "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
|
||||
|
||||
/* Modules */
|
||||
"module": "commonjs", /* Specify what module code is generated. */
|
||||
// "rootDir": "./", /* Specify the root folder within your source files. */
|
||||
// "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */
|
||||
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
|
||||
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
|
||||
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
|
||||
// "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
|
||||
// "types": [], /* Specify type package names to be included without being referenced in a source file. */
|
||||
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
|
||||
// "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
|
||||
// "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
|
||||
// "rewriteRelativeImportExtensions": true, /* Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files. */
|
||||
// "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
|
||||
// "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
|
||||
// "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
|
||||
// "noUncheckedSideEffectImports": true, /* Check side effect imports. */
|
||||
// "resolveJsonModule": true, /* Enable importing .json files. */
|
||||
// "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
|
||||
// "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */
|
||||
|
||||
/* JavaScript Support */
|
||||
// "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
|
||||
// "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
|
||||
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
|
||||
|
||||
/* Emit */
|
||||
// "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
|
||||
// "declarationMap": true, /* Create sourcemaps for d.ts files. */
|
||||
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
|
||||
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
|
||||
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
|
||||
// "noEmit": true, /* Disable emitting files from a compilation. */
|
||||
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
|
||||
// "outDir": "./", /* Specify an output folder for all emitted files. */
|
||||
// "removeComments": true, /* Disable emitting comments. */
|
||||
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
|
||||
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
|
||||
// "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
|
||||
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
|
||||
// "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
|
||||
// "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
|
||||
// "newLine": "crlf", /* Set the newline character for emitting files. */
|
||||
// "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
|
||||
// "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
|
||||
// "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
|
||||
// "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
|
||||
// "declarationDir": "./", /* Specify the output directory for generated declaration files. */
|
||||
|
||||
/* Interop Constraints */
|
||||
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
|
||||
// "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
|
||||
// "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */
|
||||
// "erasableSyntaxOnly": true, /* Do not allow runtime constructs that are not part of ECMAScript. */
|
||||
// "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
|
||||
"esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
|
||||
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
|
||||
"forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
|
||||
|
||||
/* Type Checking */
|
||||
"strict": true, /* Enable all strict type-checking options. */
|
||||
// "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
|
||||
// "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
|
||||
// "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
|
||||
// "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
|
||||
// "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
|
||||
// "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */
|
||||
// "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
|
||||
// "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
|
||||
// "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
|
||||
// "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
|
||||
// "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
|
||||
// "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
|
||||
// "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
|
||||
// "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
|
||||
// "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
|
||||
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
|
||||
// "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
|
||||
// "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
|
||||
// "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
|
||||
|
||||
/* Completeness */
|
||||
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
|
||||
"skipLibCheck": true /* Skip type checking all .d.ts files. */
|
||||
}
|
||||
}
|
||||
@@ -1 +1 @@
|
||||
202505132211.cb2b88c
|
||||
202505262234.f0f0a97
|
||||
|
||||
@@ -9,4 +9,4 @@ echo "build image ${TAG} from folder ${PROJECT_ROOT}"
|
||||
|
||||
cd $PROJECT_ROOT
|
||||
|
||||
docker build --build-arg NODE_ENV=production -t $TAG .
|
||||
docker build --build-arg NODE_ENV=production -t $TAG_INTERNAL -t $TAG_PUBLIC .
|
||||
|
||||
@@ -6,4 +6,5 @@ echo "Reading version file: ${VERSION_FILE}"
|
||||
|
||||
export VERSION=$(cat "${VERSION_FILE}")
|
||||
|
||||
export TAG=docker.rschneider.hu/infra/yoga-cms:$VERSION
|
||||
export TAG_PUBLIC=docker.rschneider.hu/infra/yoga-cms:$VERSION
|
||||
export TAG_INTERNAL=internal-docker.rschneider.hu/infra/yoga-cms:$VERSION
|
||||
|
||||
@@ -3,5 +3,7 @@
|
||||
CURRENT_DIR=$(dirname "$0")
|
||||
# push docker image
|
||||
source "${CURRENT_DIR}/build.docker.env.sh"
|
||||
echo "push image ${TAG}"
|
||||
docker push $TAG
|
||||
echo "push image ${TAG_INTERNAL}"
|
||||
docker push $TAG_INTERNAL
|
||||
echo "push image ${TAG_PUBLIC}"
|
||||
docker push $TAG_PUBLIC
|
||||
|
||||
@@ -1 +1 @@
|
||||
202504242104.73ece65
|
||||
202505232026.6bb9365
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
services:
|
||||
|
||||
strapi-db:
|
||||
image: mariadb:11.6.2
|
||||
environment:
|
||||
@@ -10,9 +9,7 @@ services:
|
||||
volumes:
|
||||
- strapi-db:/var/lib/mysql
|
||||
networks:
|
||||
- yogastic
|
||||
|
||||
|
||||
- yogastic
|
||||
nextjs-db:
|
||||
image: postgres:17
|
||||
environment:
|
||||
@@ -22,13 +19,12 @@ services:
|
||||
volumes:
|
||||
- next-db:/var/lib/postgresql/data
|
||||
networks:
|
||||
- yogastic
|
||||
|
||||
- yogastic
|
||||
app:
|
||||
image: docker.rschneider.hu/infra/yoga-app:202504252327.477286f
|
||||
image: docker.rschneider.hu/infra/yoga-app:202505262234.f0f0a97
|
||||
platform: linux/amd64
|
||||
ports:
|
||||
- "4025:3000"
|
||||
- '4025:3000'
|
||||
environment:
|
||||
POSTGRES_URL: ${APP_POSTGRES_URL}
|
||||
POSTGRES_URL_NON_POOLING: ${APP_POSTGRES_URL_NON_POOLING}
|
||||
@@ -50,11 +46,10 @@ services:
|
||||
networks:
|
||||
- proxy_shared
|
||||
- yogastic
|
||||
|
||||
cms:
|
||||
image: docker.rschneider.hu/infra/yoga-cms:202504242104.73ece65
|
||||
image: docker.rschneider.hu/infra/yoga-cms:202505232026.6bb9365
|
||||
ports:
|
||||
- "4026:1337"
|
||||
- '4026:1337'
|
||||
environment:
|
||||
DATABASE_CLIENT: mysql
|
||||
DATABASE_HOST: strapi-db
|
||||
@@ -64,20 +59,23 @@ services:
|
||||
DATABASE_PASSWORD: strapi
|
||||
HOST: 0.0.0.0
|
||||
PORT: 1337
|
||||
APP_KEYS: "yoga1,yoga2"
|
||||
APP_KEYS: yoga1,yoga2
|
||||
API_TOKEN_SALT: diana
|
||||
ADMIN_JWT_SECRET: 6d49a635a298dfff1457002ab1ea26d51f94f6c67c03f7299e8adc19aafe02a2aadb2258aa1be90b836898e0b1ce6970d7584dda32129fb0e4aa09db9ba2076909a44491bbf1c0e1840b8a78843388851ed80407a71fabc3674faca3b4c4fd147c86347a390e86051b1530cac454063bb351632c75852110a5dc198f96a4f4b709d34d240d3e82206f29756a703d7b873b387d7a20e87df71f31a2f934d2a32a3795898c8d43d7f088ebfc8c430b81f4112b811c2aac6be8af551afd8cc29c4875037fd5c7fdacfcd5740b89bab0e1ada51b23f99fb0d181a8ad4758447331edd339ce988e02a6eae170ff57b6650f91dfb2988f7d91be6ea330c0e8fd647799
|
||||
ADMIN_JWT_SECRET: >-
|
||||
6d49a635a298dfff1457002ab1ea26d51f94f6c67c03f7299e8adc19aafe02a2aadb2258aa1be90b836898e0b1ce6970d7584dda32129fb0e4aa09db9ba2076909a44491bbf1c0e1840b8a78843388851ed80407a71fabc3674faca3b4c4fd147c86347a390e86051b1530cac454063bb351632c75852110a5dc198f96a4f4b709d34d240d3e82206f29756a703d7b873b387d7a20e87df71f31a2f934d2a32a3795898c8d43d7f088ebfc8c430b81f4112b811c2aac6be8af551afd8cc29c4875037fd5c7fdacfcd5740b89bab0e1ada51b23f99fb0d181a8ad4758447331edd339ce988e02a6eae170ff57b6650f91dfb2988f7d91be6ea330c0e8fd647799
|
||||
TRANSFER_TOKEN_SALT: 2209851913
|
||||
JWT_SECRET: fc2be7f56eefe9790bd80a3713974620f42a66313f71bb581ac15328b886ccd42c51eb54f6e897b5d3f6d12bec069dfd116eb63f09d709346ab8c5c328ff42cef1f1cd7e39448186c9c96af3d838e25a3e82dfe72578d775f322bfb3b280ee7db103ae768dcebfc3fa0a9fffeb4d4773cd70e818f6cd8e98f360faa926a8388d18a1c9abcb616600c2c450820a29328df5592dea4a76edf3e9f8147cf92fc88a8a9e3f3698e038c9f7ccbfd7fc04fada3583f2ad8d1ff087a6f23cd33cfc8edf82e6489f1470da5dc52bc1ab1ac025bc9f77a6098f5efecff451498e2d936d005284e149971df15ed81d92ddddd0f71b5ffa3584d853aa3cecc37652430e7d27
|
||||
JWT_SECRET: >-
|
||||
fc2be7f56eefe9790bd80a3713974620f42a66313f71bb581ac15328b886ccd42c51eb54f6e897b5d3f6d12bec069dfd116eb63f09d709346ab8c5c328ff42cef1f1cd7e39448186c9c96af3d838e25a3e82dfe72578d775f322bfb3b280ee7db103ae768dcebfc3fa0a9fffeb4d4773cd70e818f6cd8e98f360faa926a8388d18a1c9abcb616600c2c450820a29328df5592dea4a76edf3e9f8147cf92fc88a8a9e3f3698e038c9f7ccbfd7fc04fada3583f2ad8d1ff087a6f23cd33cfc8edf82e6489f1470da5dc52bc1ab1ac025bc9f77a6098f5efecff451498e2d936d005284e149971df15ed81d92ddddd0f71b5ffa3584d853aa3cecc37652430e7d27
|
||||
networks:
|
||||
- proxy_shared
|
||||
- yogastic
|
||||
|
||||
volumes:
|
||||
- strapi-uploads:/opt/app/public/uploads
|
||||
volumes:
|
||||
next-db: {}
|
||||
strapi-db: {}
|
||||
|
||||
next-db: {}
|
||||
strapi-db: {}
|
||||
strapi-uploads: {}
|
||||
networks:
|
||||
yogastic:
|
||||
yogastic: null
|
||||
proxy_shared:
|
||||
external: true
|
||||
|
||||
2
environment/prod/jenkins/Jenkinsfile
vendored
2
environment/prod/jenkins/Jenkinsfile
vendored
@@ -10,6 +10,8 @@ pipeline {
|
||||
cd /home/rocho/projects/yogastic/environment/prod/docker-compose/yogastic
|
||||
docker compose down
|
||||
docker compose up -d
|
||||
cd /home/rocho/docker/proxy/proxy
|
||||
bash ./restart.sh
|
||||
''', execTimeout: 120000,
|
||||
flatten: false,
|
||||
makeEmptyDirs: false,
|
||||
|
||||
221
environment/prod/jenkins/update.versions.Jenkinsfile
Normal file
221
environment/prod/jenkins/update.versions.Jenkinsfile
Normal file
@@ -0,0 +1,221 @@
|
||||
pipeline {
|
||||
agent any
|
||||
|
||||
environment {
|
||||
|
||||
DOCKER_CREDS = 'rschneider@docker.rschneider.hu'
|
||||
GIT_USER = "Roland Schneider"
|
||||
GIT_EMAIL = "rocho02@gmail.com"
|
||||
GIT_REPO = "gitea.rschneider.hu/rschneider/yogastic.git"
|
||||
GIT_BRANCH = "main"
|
||||
GIT_CREDS_ID = "rschneider_gitea.rschneider.hu"
|
||||
CMS_IMAGE= "docker.rschneider.hu/infra/yoga-cms"
|
||||
APP_IMAGE= "docker.rschneider.hu/infra/yoga-app"
|
||||
|
||||
}
|
||||
|
||||
stages {
|
||||
stage('Checkout') {
|
||||
steps {
|
||||
|
||||
git branch: 'main', credentialsId: "${GIT_CREDS_ID}", url: "https://${GIT_REPO}"
|
||||
sh '''
|
||||
ls -lah
|
||||
'''
|
||||
}
|
||||
}
|
||||
stage('Collect project info - cms') {
|
||||
agent{
|
||||
docker {
|
||||
reuseNode true
|
||||
image 'linuxserver/yq'
|
||||
}
|
||||
}
|
||||
steps {
|
||||
withCredentials([usernamePassword(credentialsId: "${GIT_CREDS_ID}", passwordVariable: 'DOCKER_PASSWORD', usernameVariable: 'DOCKER_USERNAME')]) {
|
||||
|
||||
script {
|
||||
def block = ""
|
||||
|
||||
block = sh returnStdout:true, script:'''
|
||||
yq -y '.services.cms.image' environment/prod/docker-compose/yogastic/docker-compose.yaml
|
||||
|
||||
'''
|
||||
block = block.readLines();
|
||||
env.CMS_CURRENT = block[0];
|
||||
|
||||
block = sh returnStdout:true, script:'''
|
||||
cat environment/dev/docker/cms/scripts/version.txt
|
||||
'''
|
||||
block = block.readLines();
|
||||
env.CMS_LATEST = block[0];
|
||||
|
||||
def apiUrl = "https://docker.rschneider.hu/v2/infra/yoga-cms/tags/list"
|
||||
def tagsResponse = sh(script: """
|
||||
curl -s -u "${DOCKER_USERNAME}:${DOCKER_PASSWORD}" ${apiUrl}
|
||||
""", returnStdout: true).trim()
|
||||
// Step 3: Use JsonSlurper to parse the JSON response
|
||||
def jsonSlurper = new groovy.json.JsonSlurper()
|
||||
def tags = jsonSlurper.parseText(tagsResponse)
|
||||
// Extract the tag names
|
||||
def availableTags = tags.tags.collect { it }
|
||||
availableTags = availableTags.reverse()
|
||||
println availableTags
|
||||
env.CMS_TAGS = availableTags.join("\n")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Collect project info - app') {
|
||||
agent{
|
||||
docker {
|
||||
reuseNode true
|
||||
image 'linuxserver/yq'
|
||||
}
|
||||
}
|
||||
steps {
|
||||
withCredentials([usernamePassword(credentialsId: 'rschneider@docker.rschneider.hu', passwordVariable: 'DOCKER_PASSWORD', usernameVariable: 'DOCKER_USERNAME')]) {
|
||||
|
||||
script {
|
||||
def block = ""
|
||||
|
||||
block = sh returnStdout:true, script:'''
|
||||
yq -y '.services.app.image' environment/prod/docker-compose/yogastic/docker-compose.yaml
|
||||
|
||||
'''
|
||||
block = block.readLines();
|
||||
env.APP_CURRENT = block[0];
|
||||
|
||||
block = sh returnStdout:true, script:'''
|
||||
cat environment/dev/docker/app/scripts/version.txt
|
||||
'''
|
||||
block = block.readLines();
|
||||
env.APP_LATEST = block[0];
|
||||
|
||||
def apiUrl = "https://docker.rschneider.hu/v2/infra/yoga-app/tags/list"
|
||||
def tagsResponse = sh(script: """
|
||||
curl -s -u "${DOCKER_USERNAME}:${DOCKER_PASSWORD}" ${apiUrl}
|
||||
""", returnStdout: true).trim()
|
||||
// Step 3: Use JsonSlurper to parse the JSON response
|
||||
def jsonSlurper = new groovy.json.JsonSlurper()
|
||||
def tags = jsonSlurper.parseText(tagsResponse)
|
||||
// Extract the tag names
|
||||
def availableTags = tags.tags.collect { it }
|
||||
availableTags = availableTags.reverse()
|
||||
|
||||
env.APP_TAGS = availableTags.join("\n")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
stage('Select version CMS') {
|
||||
steps {
|
||||
echo "new tags"
|
||||
println env.CMS_TAGS
|
||||
script{
|
||||
env.CMS_VERSION = input message: 'Select version for PROD', ok: 'Update',
|
||||
parameters: [choice(name: 'Select version', choices: env.CMS_TAGS, description: """
|
||||
Latest: ${env.CMS_LATEST}
|
||||
Current: ${env.CMS_CURRENT}
|
||||
""" )]
|
||||
echo "You have selected Docker Tag: ${env.CMS_VERSION}"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Select version APP') {
|
||||
steps {
|
||||
echo "new APP tags"
|
||||
println env.APP_TAGS
|
||||
script{
|
||||
env.APP_VERSION = input message: 'Select version for PROD', ok: 'Update',
|
||||
parameters: [choice(name: 'Select version', choices: env.APP_TAGS, description: """
|
||||
Latest: ${env.APP_LATEST}
|
||||
Current: ${env.APP_CURRENT}
|
||||
""")]
|
||||
echo "You have selected Docker Tag: ${env.APP_VERSION}"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Update version CMS') {
|
||||
agent{
|
||||
docker {
|
||||
reuseNode true
|
||||
image 'node:22'
|
||||
}
|
||||
}
|
||||
steps {
|
||||
script{
|
||||
|
||||
env.TARGET_FILE='../prod/docker-compose/yogastic/docker-compose.yaml'
|
||||
env.TARGET_SERVICE='cms'
|
||||
env.TARGET_IMAGE= "${CMS_IMAGE}:${CMS_VERSION}"
|
||||
|
||||
sh '''
|
||||
cd environment/common
|
||||
npm i -c
|
||||
npx ts-node src/update.service.version.ts
|
||||
'''
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
stage('Update version APP') {
|
||||
agent{
|
||||
docker {
|
||||
reuseNode true
|
||||
image 'node:22'
|
||||
}
|
||||
}
|
||||
steps {
|
||||
script{
|
||||
|
||||
env.TARGET_FILE='../prod/docker-compose/yogastic/docker-compose.yaml'
|
||||
env.TARGET_SERVICE='app'
|
||||
env.TARGET_IMAGE= "${APP_IMAGE}:${APP_VERSION}"
|
||||
|
||||
sh '''
|
||||
cd environment/common
|
||||
npm i -c
|
||||
npx ts-node src/update.service.version.ts
|
||||
'''
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
stage('Update git ') {
|
||||
/*
|
||||
agent{
|
||||
docker {
|
||||
reuseNode true
|
||||
image 'alpine/git'
|
||||
args '--entrypoint /bin/sh'
|
||||
}
|
||||
}
|
||||
*/
|
||||
environment{
|
||||
GIT_CREDS = credentials("${GIT_CREDS_ID}")
|
||||
ENV_NAME = "Prod yoga-app"
|
||||
IMAGE_VERSION = "${CMS_VERSION}"
|
||||
}
|
||||
steps {
|
||||
sh '''
|
||||
git status
|
||||
git config user.email "${GIT_EMAIL}"
|
||||
git config user.name "${GIT_USER}"
|
||||
git commit -a -m "[ci-skip] New ${ENV_NAME} deployment version: ${IMAGE_VERSION}"
|
||||
git push --tags https://$GIT_CREDS@$GIT_REPO $GIT_BRANCH
|
||||
|
||||
'''
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -16,9 +16,9 @@ const eslintConfig = [
|
||||
"next/core-web-vitals",
|
||||
"next/typescript",
|
||||
],
|
||||
// rules: {
|
||||
// "@typescript-eslint/no-explicit-any": "off"
|
||||
// },
|
||||
rules: {
|
||||
"@typescript-eslint/no-explicit-any": "off"
|
||||
},
|
||||
}
|
||||
|
||||
),
|
||||
@@ -32,6 +32,6 @@ const eslintConfig = [
|
||||
// }
|
||||
];
|
||||
|
||||
console.info("eslint config",eslintConfig)
|
||||
// console.info("eslint config",eslintConfig)
|
||||
|
||||
export default eslintConfig;
|
||||
|
||||
11
yoga-app/package-lock.json
generated
11
yoga-app/package-lock.json
generated
@@ -9,6 +9,7 @@
|
||||
"version": "0.1.0",
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-free": "^6.7.2",
|
||||
"@strapi/blocks-react-renderer": "^1.0.2",
|
||||
"@strapi/database": "^5.10.3",
|
||||
"@types/aos": "^3.0.7",
|
||||
"@types/bcrypt": "^5.0.2",
|
||||
@@ -1393,6 +1394,16 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/@strapi/blocks-react-renderer": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@strapi/blocks-react-renderer/-/blocks-react-renderer-1.0.2.tgz",
|
||||
"integrity": "sha512-pRV/WMreo5wyrLg7J0pw1DM9lg8U8m+QA7Bd8CPN3beUBTdDhYrFTTNZh3XveEdnURZNJu1X0aWXAg4SzVg7QA==",
|
||||
"hasInstallScript": true,
|
||||
"peerDependencies": {
|
||||
"react": "^18.0.0 || ^19.0.0",
|
||||
"react-dom": "^18.0.0 || ^19.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@strapi/database": {
|
||||
"version": "5.10.3",
|
||||
"resolved": "https://registry.npmjs.org/@strapi/database/-/database-5.10.3.tgz",
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-free": "^6.7.2",
|
||||
"@strapi/blocks-react-renderer": "^1.0.2",
|
||||
"@strapi/database": "^5.10.3",
|
||||
"@types/aos": "^3.0.7",
|
||||
"@types/bcrypt": "^5.0.2",
|
||||
|
||||
@@ -1,8 +1,17 @@
|
||||
{
|
||||
|
||||
"populate": {
|
||||
"header": {
|
||||
"fields": ["header1","description"]
|
||||
},
|
||||
"common": {
|
||||
"fields": ["*"],
|
||||
"populate": {
|
||||
"logoImage": {
|
||||
"fields": ["name","mime","url"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"aboutUs": {
|
||||
"fields": ["*"],
|
||||
"populate": {
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
{
|
||||
"fields": ["*"],
|
||||
"populate": {
|
||||
"common": {
|
||||
"fields": ["*"],
|
||||
"populate": {
|
||||
"logoImage": {
|
||||
"fields": ["name","mime","url"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"contactUs": {
|
||||
"fields": ["*"]
|
||||
},
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
{
|
||||
"fields": ["*"],
|
||||
"populate": {
|
||||
"common": {
|
||||
"fields": ["*"],
|
||||
"populate": {
|
||||
"logoImage": {
|
||||
"fields": ["name","mime","url"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"questionsAndAnswers": {
|
||||
"fields": ["*"],
|
||||
"populate": {
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
{
|
||||
"fields": ["*"],
|
||||
"populate": {
|
||||
"common": {
|
||||
"fields": ["*"],
|
||||
"populate": {
|
||||
"logoImage": {
|
||||
"fields": ["name","mime","url"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"price": {
|
||||
"fields": ["*"],
|
||||
"populate": {
|
||||
|
||||
33
yoga-app/src/api/strapi/query/service.json
Normal file
33
yoga-app/src/api/strapi/query/service.json
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"fields": ["*"],
|
||||
"populate": {
|
||||
"common": {
|
||||
"fields": ["*"],
|
||||
"populate": {
|
||||
"logoImage": {
|
||||
"fields": ["name","mime","url"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"subscribeNow": {
|
||||
"fields": ["*"]
|
||||
},
|
||||
"footer": {
|
||||
"fields": ["*"],
|
||||
"populate": {
|
||||
"links": {
|
||||
"fields": ["*"]
|
||||
},
|
||||
"contactUsEmail": {
|
||||
"fields": ["*"]
|
||||
},
|
||||
"contactUsLocation": {
|
||||
"fields": ["*"]
|
||||
},
|
||||
"contactUsPhoneNumber": {
|
||||
"fields": ["*"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,14 @@
|
||||
{
|
||||
"fields": ["*"],
|
||||
"populate": {
|
||||
"common": {
|
||||
"fields": ["*"],
|
||||
"populate": {
|
||||
"logoImage": {
|
||||
"fields": ["name","mime","url"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"ourServices": {
|
||||
"fields": ["*"],
|
||||
"populate": {
|
||||
|
||||
@@ -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 serviceQuery from "@/api/strapi/query/service.json";
|
||||
import pricesQuery from "@/api/strapi/query/prices.json";
|
||||
import faqQuery from "@/api/strapi/query/faq.json";
|
||||
import contactQuery from "@/api/strapi/query/contact.json";
|
||||
@@ -13,6 +14,8 @@ import {ServicesPage_Plain} from "@/types/generated-strapi-interfaces/api/servic
|
||||
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";
|
||||
import {YogaSingleService_Plain} from "@/types/generated-strapi-interfaces/api/yoga-single-service";
|
||||
import {ServicePage_Plain} from "@/types/generated-strapi-interfaces/api/service-page";
|
||||
|
||||
|
||||
class StrapiApi{
|
||||
@@ -42,6 +45,20 @@ class StrapiApi{
|
||||
return this.getJson("/api/services-page?",servicesQuery);
|
||||
}
|
||||
|
||||
public getServicePage(): Promise<ServicePage_Plain>{
|
||||
return this.getJson("/api/service-page?",serviceQuery);
|
||||
}
|
||||
|
||||
public getService(name: string): Promise<YogaSingleService_Plain[]>{
|
||||
return this.getJson("/api/yoga-single-services?", {
|
||||
filters: {
|
||||
name: {
|
||||
$eq: name,
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
public getPricesPage(): Promise<PricesPage_Plain>{
|
||||
return this.getJson("/api/prices-page?",pricesQuery);
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ class StrapiClient{
|
||||
return '/image/'+ imagePath;
|
||||
}
|
||||
public async httpGet(path: string){
|
||||
console.info("httpGet", path);
|
||||
return await httpClient.httpGet(this.strapiUrl + path);
|
||||
}
|
||||
public async httpGetJson<T>(url: string): Promise<Payload<T>>{
|
||||
|
||||
@@ -24,13 +24,16 @@ export default async function About() {
|
||||
blogs,
|
||||
subscribeNow,
|
||||
footer,
|
||||
common
|
||||
} = pageData;
|
||||
|
||||
|
||||
console.info("about us", JSON.stringify(aboutUs))
|
||||
|
||||
|
||||
|
||||
return (
|
||||
<>
|
||||
{ header && <SubHeaderComponent header1={header?.header1} header2={header?.header2} description={header?.description}/> }
|
||||
{ header && <SubHeaderComponent header={header} common={common}/> }
|
||||
|
||||
{ aboutUs && <AboutUsWithBoxesComponent config={aboutUs}/>}
|
||||
{ discount && <YogaDiscountComponent config={discount}/>}
|
||||
|
||||
@@ -16,11 +16,12 @@ export default async function ContactPage(){
|
||||
contactUs,
|
||||
google_maps,
|
||||
subscribe,
|
||||
footer
|
||||
footer,
|
||||
common
|
||||
} = await strapiApi.getContactPage();
|
||||
return (
|
||||
<>
|
||||
{ <SubHeaderComponent header1={header} description={description} /> }
|
||||
{ <SubHeaderComponent header={{header1:header,description}} common={common}/> }
|
||||
{ contactUs && <ContactUsComponent contactUs={contactUs} /> }
|
||||
{ google_maps && <GoogleMapsComponent config={google_maps} /> }
|
||||
{ subscribe && <SubscribeComponent config={subscribe} styleClass={"contact_subscribe_section"} /> }
|
||||
|
||||
@@ -15,11 +15,12 @@ export default async function About() {
|
||||
questionsAndAnswers,
|
||||
blogs,
|
||||
subscribe,
|
||||
footer
|
||||
footer,
|
||||
common
|
||||
} = await strapiApi.getFaqPage();
|
||||
return (
|
||||
<>xxxxx
|
||||
{ <SubHeaderComponent header1={header} description={description} /> }
|
||||
<>
|
||||
{ <SubHeaderComponent header={{header1:header,description}} common={common}/> }
|
||||
{ questionsAndAnswers && <FaqComponent config={questionsAndAnswers} /> }
|
||||
{ blogs && <BlogPostsComponent config={blogs} /> }
|
||||
{ subscribe && <SubscribeComponent config={subscribe} /> }
|
||||
|
||||
@@ -16,8 +16,6 @@ import webApi from "@/api/web-client/web-api";
|
||||
export default async function Home() {
|
||||
const pageData = await webApi.getHomePage();
|
||||
|
||||
console.info(JSON.stringify(pageData))
|
||||
|
||||
const {
|
||||
header,
|
||||
ourServices,
|
||||
|
||||
@@ -21,11 +21,12 @@ export default async function PricesPage( ) {
|
||||
discount,
|
||||
blogs,
|
||||
subscribe,
|
||||
footer
|
||||
footer,
|
||||
common
|
||||
} = await strapiApi.getPricesPage();
|
||||
return (
|
||||
<>
|
||||
<SubHeaderComponent header1={header} description={description}/>
|
||||
<SubHeaderComponent header={{header1:header,description}} common={common}/>
|
||||
{ price && <PricingComponent config={price}/> }
|
||||
{ discount && <YogaDiscountComponent config={discount} /> }
|
||||
{ blogs && <BlogPostsComponent config={blogs} /> }
|
||||
|
||||
11
yoga-app/src/app/services/[slug]/not-found.tsx
Normal file
11
yoga-app/src/app/services/[slug]/not-found.tsx
Normal file
@@ -0,0 +1,11 @@
|
||||
import Link from 'next/link'
|
||||
|
||||
export default function NotFound() {
|
||||
return (
|
||||
<div>
|
||||
<h2>Nem található</h2>
|
||||
<p>Could not find requested resource</p>
|
||||
<Link href="/">Vissza a kezdőoldalra</Link>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
3
yoga-app/src/app/services/[slug]/page.module.css
Normal file
3
yoga-app/src/app/services/[slug]/page.module.css
Normal file
@@ -0,0 +1,3 @@
|
||||
.article h1{
|
||||
color: black;
|
||||
}
|
||||
69
yoga-app/src/app/services/[slug]/page.tsx
Normal file
69
yoga-app/src/app/services/[slug]/page.tsx
Normal file
@@ -0,0 +1,69 @@
|
||||
import React from "react";
|
||||
import strapiApi from "@/api/strapi/strapi-api";
|
||||
import {BlocksContent} from "@strapi/blocks-react-renderer";
|
||||
import SubscribeComponent from "@/components/subscribe.component";
|
||||
import FooterComponent from "@/components/footer.component";
|
||||
import SubHeaderComponent from "@/components/subHeader.component";
|
||||
import AosComponent from "@/components/aos.component";
|
||||
import styles from './page.module.css'
|
||||
import NextBlocksRenderer from "@/components/next.blocks.renderer";
|
||||
import clsx from "clsx";
|
||||
import {notFound} from "next/navigation";
|
||||
|
||||
const rewriteStrapiImageUrlToNextImageUrl = (content: BlocksContent) =>{
|
||||
console.info("content", content);
|
||||
for(const item of content){
|
||||
if ( item.type == 'image'){
|
||||
const imageData = item.image;
|
||||
const url = new URL(imageData.url);
|
||||
imageData.url = strapiApi.getImageUrl(url.pathname);
|
||||
}
|
||||
}
|
||||
return content;
|
||||
}
|
||||
|
||||
export default async function ServiceArticlePage({params}: {
|
||||
params: Promise<{ slug: string }>
|
||||
}) {
|
||||
const {slug} = await params
|
||||
|
||||
const servicePage = await strapiApi.getServicePage();
|
||||
if (!servicePage) {
|
||||
return notFound()
|
||||
}
|
||||
const {subscribeNow, footer, common} = servicePage;
|
||||
const servicesByName = await strapiApi.getService(slug);
|
||||
if (!servicesByName || servicesByName.length === 0) {
|
||||
return notFound();
|
||||
}
|
||||
const selectedService = servicesByName[0];
|
||||
if ( !selectedService?.article?.length ) {
|
||||
return notFound();
|
||||
}
|
||||
const article: BlocksContent = rewriteStrapiImageUrlToNextImageUrl( selectedService.article);
|
||||
|
||||
return (
|
||||
<>
|
||||
{selectedService && selectedService.header && selectedService.description &&
|
||||
<SubHeaderComponent header={{header1:selectedService.header, description: selectedService.description}} common={common}/>}
|
||||
|
||||
<section className={clsx( styles.article, 'mb-3')}>
|
||||
<div className="container">
|
||||
<div className={"row"}>
|
||||
<div className={"col-lg-12 col-md-12 col-sm-12 col-xs-12"}>
|
||||
<NextBlocksRenderer
|
||||
content={article as BlocksContent}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
{subscribeNow && <SubscribeComponent config={subscribeNow}/>}
|
||||
{footer && <FooterComponent config={footer}/>}
|
||||
<AosComponent/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export const dynamic = 'force-dynamic'
|
||||
@@ -20,11 +20,12 @@ export default async function Services() {
|
||||
feedbacks,
|
||||
blogs,
|
||||
footer,
|
||||
subscribe
|
||||
subscribe,
|
||||
common
|
||||
} = await strapiApi.getServicesPage();
|
||||
return (
|
||||
<>
|
||||
{header && description && <SubHeaderComponent header1={header} description={description} />}
|
||||
<SubHeaderComponent header={{header1:header,description}} common={common}/>
|
||||
{ ourServices && <OurServicesComponent config={ourServices} /> }
|
||||
{ contactUs && <ContactUsComponent contactUs={contactUs} />}
|
||||
{ ourSpecialities && <OurSpecialitiesComponent config={ourSpecialities} /> }
|
||||
|
||||
@@ -2,6 +2,8 @@ import YogaImageComponent from "@/components/yoga.image.component";
|
||||
import {YogaMainHeaderComponent_Plain} from "@/types/generated-strapi-interfaces/api/yoga-main-header-component";
|
||||
import {MAIN_MENU} from "@/util/const";
|
||||
import Nav from "@/components/nav.component";
|
||||
import {StrapiFile} from "@/types/types";
|
||||
import strapiApi from "@/api/strapi/strapi-api";
|
||||
export interface Props{
|
||||
config: YogaMainHeaderComponent_Plain
|
||||
}
|
||||
@@ -10,14 +12,18 @@ const MainHeaderComponent = ({ config: {
|
||||
header,
|
||||
description,
|
||||
button,
|
||||
headerIType
|
||||
headerIType,
|
||||
image
|
||||
|
||||
}}: Props) => {
|
||||
|
||||
const imageFile: StrapiFile = image as StrapiFile;
|
||||
const imageSrc = imageFile ? strapiApi.getImageUrl(imageFile?.url): undefined;
|
||||
|
||||
return (
|
||||
<div className="banner-section-outer">
|
||||
<header>
|
||||
<Nav menuItems={MAIN_MENU} />
|
||||
<Nav menuItems={MAIN_MENU} imageSrc={imageSrc} />
|
||||
</header>
|
||||
{/*<!-- SOCIAL ICONS -->*/}
|
||||
<div className="social-icons left_icons float-left d-table" data-aos="fade-down">
|
||||
|
||||
@@ -13,11 +13,10 @@ export interface MenuItem{
|
||||
}
|
||||
export interface Props{
|
||||
menuItems: MenuItem[];
|
||||
imageSrc?: string;
|
||||
}
|
||||
|
||||
const Nav: FC<Props> = ({menuItems}:Props) => {
|
||||
|
||||
|
||||
const Nav: FC<Props> = ({menuItems, imageSrc}:Props) => {
|
||||
|
||||
return (
|
||||
<header>
|
||||
@@ -25,7 +24,7 @@ const Nav: FC<Props> = ({menuItems}:Props) => {
|
||||
<div className="container-fluid">
|
||||
<nav className="navbar navbar-expand-lg navbar-light p-0">
|
||||
<Link className="navbar-brand" href="/">
|
||||
<figure className="mb-0"><YogaImageComponent src="/assets/images/yogastic_logo.png" alt=""/>
|
||||
<figure className="mb-0"> {imageSrc && <YogaImageComponent src={imageSrc} alt=""/>}
|
||||
</figure>
|
||||
</Link>
|
||||
<button className="navbar-toggler collapsed" type="button" data-toggle="collapse"
|
||||
|
||||
28
yoga-app/src/components/next.blocks.renderer.tsx
Normal file
28
yoga-app/src/components/next.blocks.renderer.tsx
Normal file
@@ -0,0 +1,28 @@
|
||||
'use client';
|
||||
import {BlocksContent, BlocksRenderer} from "@strapi/blocks-react-renderer";
|
||||
import React from "react";
|
||||
import YogaImageComponent from "@/components/yoga.image.component";
|
||||
|
||||
export interface Props{
|
||||
content: BlocksContent;
|
||||
}
|
||||
const NextBlocksRenderer = ({ content }: Props) => {
|
||||
return (
|
||||
<BlocksRenderer
|
||||
content={content}
|
||||
blocks={{
|
||||
image: ({image}) => {
|
||||
return (
|
||||
<YogaImageComponent
|
||||
src={image.url}
|
||||
// width={image.width}
|
||||
// height={image.height}
|
||||
alt={image.alternativeText || ""}
|
||||
/>
|
||||
);
|
||||
}
|
||||
}}
|
||||
/>);
|
||||
}
|
||||
|
||||
export default NextBlocksRenderer;
|
||||
@@ -1,32 +1,32 @@
|
||||
.serviceSlide{
|
||||
/*.serviceSlide{*/
|
||||
|
||||
}
|
||||
/*}*/
|
||||
|
||||
button:first-of-type{
|
||||
left: 6px;
|
||||
z-index: 1;
|
||||
}
|
||||
/*button.slick-arrow:first-of-type{*/
|
||||
/* left: 6px;*/
|
||||
/* z-index: 1;*/
|
||||
/*}*/
|
||||
|
||||
button:last-of-type{
|
||||
right: 6px;
|
||||
}
|
||||
/*button.slick-arrow:last-of-type{*/
|
||||
/* right: 6px;*/
|
||||
/*}*/
|
||||
|
||||
.serviceSlide{
|
||||
margin: 0 6px;
|
||||
|
||||
}
|
||||
|
||||
:global(.slick-active){
|
||||
.slick-track :global(.slick-active){
|
||||
padding-left: 3px;
|
||||
padding-right: 3px;
|
||||
}
|
||||
|
||||
:global(div:nth-child(1 of .slick-active)){
|
||||
.slick-track :global(div:nth-child(1 of .slick-active)){
|
||||
padding-left: 0;
|
||||
padding-right: 3px;
|
||||
}
|
||||
|
||||
:global(div:nth-last-child(1 of .slick-active)){
|
||||
.slick-track :global(div:nth-last-child(1 of .slick-active)){
|
||||
padding-left: 3px;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
@@ -3,13 +3,18 @@ import {YogaSingleService_Plain} from "@/types/generated-strapi-interfaces/api/y
|
||||
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";
|
||||
|
||||
export interface Props {
|
||||
config: YogaSingleService_Plain
|
||||
}
|
||||
|
||||
const OurServiceItemComponent = ({config: {header,description,image}}: Props) => {
|
||||
const OurServiceItemComponent = ({config: {header,description,image,name}}: Props) => {
|
||||
const imageFile: StrapiFile = image as StrapiFile;
|
||||
if (!imageFile || !imageFile.url) {
|
||||
return null
|
||||
}
|
||||
const path = '/services/' + name;
|
||||
return (
|
||||
|
||||
<div className={styles.serviceSlide}>
|
||||
@@ -17,15 +22,15 @@ const OurServiceItemComponent = ({config: {header,description,image}}: Props) =>
|
||||
<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="img-fluid"/>
|
||||
</figure>
|
||||
</div>
|
||||
<div className="services_box_lower_portion">
|
||||
<h3>{header}</h3>
|
||||
<p>{description}</p>
|
||||
<div className="btn_wrapper">
|
||||
<a href="/services" className="text-decoration-none"><i
|
||||
className="fa-solid fa-arrow-right" aria-hidden="true"></i></a>
|
||||
<Link href={path} className="text-decoration-none"><i
|
||||
className="fa-solid fa-arrow-right" aria-hidden="true"></i></Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -7,7 +7,7 @@ export interface Props{
|
||||
config: YogaPrice_Plain
|
||||
}
|
||||
|
||||
export function PriceItemComponent({config: {header,option1,option2,price,icon, image,buttonText}} : Props){
|
||||
export function PriceItemComponent({config: {header, description, option1,option2,price,pricePostfix, icon, image,buttonText}} : Props){
|
||||
// there are some issues with the strapi generated types
|
||||
const iconFile: StrapiFile = icon as StrapiFile;
|
||||
const imageFile: StrapiFile = image as StrapiFile;
|
||||
@@ -28,6 +28,7 @@ export function PriceItemComponent({config: {header,option1,option2,price,icon,
|
||||
</div>
|
||||
<div className="pricing_plans_box_lower_portion">
|
||||
<h3>{header}</h3>
|
||||
<p className={'text-center'}>{description}</p>
|
||||
<ul className="list-unstyled">
|
||||
<li>
|
||||
<i className="fa-solid fa-check" aria-hidden="true"></i>{option1}
|
||||
@@ -38,7 +39,7 @@ export function PriceItemComponent({config: {header,option1,option2,price,icon,
|
||||
</ul>
|
||||
<div className="pricing_plans_span_wrapper">
|
||||
<span className="price">{price} FT</span>
|
||||
<span className="per_month">/per month</span>
|
||||
{ pricePostfix && <span className="per_month">{pricePostfix}</span> }
|
||||
</div>
|
||||
<div className="btn_wrapper">
|
||||
<a className="enroll_now_btn text-decoration-none" href="/pricing.html">{buttonText}</a>
|
||||
|
||||
@@ -3,14 +3,33 @@ import Nav from "@/components/nav.component";
|
||||
import {MAIN_MENU} from "@/util/const";
|
||||
import {HeaderB} from "@/types/generated-strapi-interfaces/components/yoga-site/HeaderB";
|
||||
import NextBreadcrumb from "@/components/breadcrumbs.component";
|
||||
import {YogaCommon_Plain} from "@/types/generated-strapi-interfaces/api/yoga-common";
|
||||
import strapiApi from "@/api/strapi/strapi-api";
|
||||
import {StrapiFile} from "@/types/types";
|
||||
|
||||
|
||||
export type Props = HeaderB ;
|
||||
export type Props = {
|
||||
header: HeaderB,
|
||||
common?: YogaCommon_Plain
|
||||
} ;
|
||||
|
||||
const SubHeaderComponent = ( {
|
||||
header:{ header1,description},common }: Props) =>{
|
||||
|
||||
|
||||
let logoImageSrc: string|undefined = undefined;
|
||||
|
||||
const logoImage = common && common.logoImage;
|
||||
if ( logoImage ){
|
||||
const logoImageFile: StrapiFile = logoImage as StrapiFile;
|
||||
logoImageSrc = strapiApi.getImageUrl(logoImageFile?.url) ;
|
||||
}
|
||||
|
||||
console.info("image", logoImageSrc);
|
||||
|
||||
const SubHeaderComponent = ({header1,description}: Props) =>{
|
||||
return (
|
||||
<div className="sub-banner-section">
|
||||
<Nav menuItems={MAIN_MENU} />
|
||||
<Nav menuItems={MAIN_MENU} imageSrc={logoImageSrc} />
|
||||
<section className="banner-section">
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
@@ -42,3 +61,6 @@ const SubHeaderComponent = ({header1,description}: Props) =>{
|
||||
}
|
||||
|
||||
export default SubHeaderComponent;
|
||||
|
||||
|
||||
export const dynamic = 'force-dynamic'
|
||||
|
||||
@@ -8,6 +8,7 @@ import { YogaAboutUsWithBoxesComponent } from './yoga-about-us-with-boxes-compon
|
||||
import { YogaDiscountComponent } from './yoga-discount-component';
|
||||
import { YogaTextWithImageComponent } from './yoga-text-with-image-component';
|
||||
import { YogaAchivementsComponent } from './yoga-achivements-component';
|
||||
import { YogaCommon } from './yoga-common';
|
||||
import { HeaderB_Plain } from '../components/yoga-site/HeaderB';
|
||||
import { YogaBlogPostsComponent_Plain } from './yoga-blog-posts-component';
|
||||
import { YogaSubscribeNowComponent_Plain } from './yoga-subscribe-now-component';
|
||||
@@ -16,6 +17,7 @@ import { YogaAboutUsWithBoxesComponent_Plain } from './yoga-about-us-with-boxes-
|
||||
import { YogaDiscountComponent_Plain } from './yoga-discount-component';
|
||||
import { YogaTextWithImageComponent_Plain } from './yoga-text-with-image-component';
|
||||
import { YogaAchivementsComponent_Plain } from './yoga-achivements-component';
|
||||
import { YogaCommon_Plain } from './yoga-common';
|
||||
import { HeaderB_NoRelations } from '../components/yoga-site/HeaderB';
|
||||
import { AdminPanelRelationPropertyModification } from '../common/AdminPanelRelationPropertyModification';
|
||||
|
||||
@@ -31,6 +33,7 @@ export interface About {
|
||||
ourMission?: { data: YogaTextWithImageComponent };
|
||||
ourVision?: { data: YogaTextWithImageComponent };
|
||||
achievements?: { data: YogaAchivementsComponent };
|
||||
common?: { data: YogaCommon };
|
||||
locale: string;
|
||||
localizations?: { data: About[] };
|
||||
};
|
||||
@@ -46,6 +49,7 @@ export interface About_Plain {
|
||||
ourMission?: YogaTextWithImageComponent_Plain;
|
||||
ourVision?: YogaTextWithImageComponent_Plain;
|
||||
achievements?: YogaAchivementsComponent_Plain;
|
||||
common?: YogaCommon_Plain;
|
||||
locale: string;
|
||||
localizations?: About_Plain[];
|
||||
}
|
||||
@@ -61,6 +65,7 @@ export interface About_NoRelations {
|
||||
ourMission?: number;
|
||||
ourVision?: number;
|
||||
achievements?: number;
|
||||
common?: number;
|
||||
locale: string;
|
||||
localizations?: About[];
|
||||
}
|
||||
@@ -76,6 +81,7 @@ export interface About_AdminPanelLifeCycle {
|
||||
ourMission?: AdminPanelRelationPropertyModification<YogaTextWithImageComponent_Plain>;
|
||||
ourVision?: AdminPanelRelationPropertyModification<YogaTextWithImageComponent_Plain>;
|
||||
achievements?: AdminPanelRelationPropertyModification<YogaAchivementsComponent_Plain>;
|
||||
common?: AdminPanelRelationPropertyModification<YogaCommon_Plain>;
|
||||
locale: string;
|
||||
localizations?: About[];
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ export interface Article {
|
||||
cover?: { data: Media };
|
||||
author?: { data: Author };
|
||||
category?: { data: Category };
|
||||
blocks?: object;
|
||||
blocks?: any;
|
||||
};
|
||||
}
|
||||
export interface Article_Plain {
|
||||
@@ -28,7 +28,7 @@ export interface Article_Plain {
|
||||
cover?: Media_Plain;
|
||||
author?: Author_Plain;
|
||||
category?: Category_Plain;
|
||||
blocks?: object;
|
||||
blocks?: any;
|
||||
}
|
||||
|
||||
export interface Article_NoRelations {
|
||||
@@ -39,7 +39,7 @@ export interface Article_NoRelations {
|
||||
cover?: number;
|
||||
author?: number;
|
||||
category?: number;
|
||||
blocks?: object;
|
||||
blocks?: any;
|
||||
}
|
||||
|
||||
export interface Article_AdminPanelLifeCycle {
|
||||
@@ -50,5 +50,5 @@ export interface Article_AdminPanelLifeCycle {
|
||||
cover?: AdminPanelRelationPropertyModification<Media_Plain>;
|
||||
author?: AdminPanelRelationPropertyModification<Author_Plain>;
|
||||
category?: AdminPanelRelationPropertyModification<Category_Plain>;
|
||||
blocks?: object;
|
||||
blocks?: any;
|
||||
}
|
||||
|
||||
@@ -4,10 +4,12 @@ import { YogaContactUs } from './yoga-contact-us';
|
||||
import { YogaGoogleMapsComponent } from './yoga-google-maps-component';
|
||||
import { YogaSubscribeNowComponent } from './yoga-subscribe-now-component';
|
||||
import { YogaFooter } from './yoga-footer';
|
||||
import { YogaCommon } from './yoga-common';
|
||||
import { YogaContactUs_Plain } from './yoga-contact-us';
|
||||
import { YogaGoogleMapsComponent_Plain } from './yoga-google-maps-component';
|
||||
import { YogaSubscribeNowComponent_Plain } from './yoga-subscribe-now-component';
|
||||
import { YogaFooter_Plain } from './yoga-footer';
|
||||
import { YogaCommon_Plain } from './yoga-common';
|
||||
import { AdminPanelRelationPropertyModification } from '../common/AdminPanelRelationPropertyModification';
|
||||
|
||||
export interface ContactPage {
|
||||
@@ -19,6 +21,7 @@ export interface ContactPage {
|
||||
google_maps?: { data: YogaGoogleMapsComponent };
|
||||
subscribe?: { data: YogaSubscribeNowComponent };
|
||||
footer?: { data: YogaFooter };
|
||||
common?: { data: YogaCommon };
|
||||
};
|
||||
}
|
||||
export interface ContactPage_Plain {
|
||||
@@ -29,6 +32,7 @@ export interface ContactPage_Plain {
|
||||
google_maps?: YogaGoogleMapsComponent_Plain;
|
||||
subscribe?: YogaSubscribeNowComponent_Plain;
|
||||
footer?: YogaFooter_Plain;
|
||||
common?: YogaCommon_Plain;
|
||||
}
|
||||
|
||||
export interface ContactPage_NoRelations {
|
||||
@@ -39,6 +43,7 @@ export interface ContactPage_NoRelations {
|
||||
google_maps?: number;
|
||||
subscribe?: number;
|
||||
footer?: number;
|
||||
common?: number;
|
||||
}
|
||||
|
||||
export interface ContactPage_AdminPanelLifeCycle {
|
||||
@@ -49,4 +54,5 @@ export interface ContactPage_AdminPanelLifeCycle {
|
||||
google_maps?: AdminPanelRelationPropertyModification<YogaGoogleMapsComponent_Plain>;
|
||||
subscribe?: AdminPanelRelationPropertyModification<YogaSubscribeNowComponent_Plain>;
|
||||
footer?: AdminPanelRelationPropertyModification<YogaFooter_Plain>;
|
||||
common?: AdminPanelRelationPropertyModification<YogaCommon_Plain>;
|
||||
}
|
||||
|
||||
@@ -5,11 +5,13 @@ import { YogaAchivementsComponent } from './yoga-achivements-component';
|
||||
import { YogaBlogPostsComponent } from './yoga-blog-posts-component';
|
||||
import { YogaSubscribeNowComponent } from './yoga-subscribe-now-component';
|
||||
import { YogaFooter } from './yoga-footer';
|
||||
import { YogaCommon } from './yoga-common';
|
||||
import { YogaFaqComponent_Plain } from './yoga-faq-component';
|
||||
import { YogaAchivementsComponent_Plain } from './yoga-achivements-component';
|
||||
import { YogaBlogPostsComponent_Plain } from './yoga-blog-posts-component';
|
||||
import { YogaSubscribeNowComponent_Plain } from './yoga-subscribe-now-component';
|
||||
import { YogaFooter_Plain } from './yoga-footer';
|
||||
import { YogaCommon_Plain } from './yoga-common';
|
||||
import { AdminPanelRelationPropertyModification } from '../common/AdminPanelRelationPropertyModification';
|
||||
|
||||
export interface FaqPage {
|
||||
@@ -22,6 +24,7 @@ export interface FaqPage {
|
||||
blogs?: { data: YogaBlogPostsComponent };
|
||||
subscribe?: { data: YogaSubscribeNowComponent };
|
||||
footer?: { data: YogaFooter };
|
||||
common?: { data: YogaCommon };
|
||||
};
|
||||
}
|
||||
export interface FaqPage_Plain {
|
||||
@@ -33,6 +36,7 @@ export interface FaqPage_Plain {
|
||||
blogs?: YogaBlogPostsComponent_Plain;
|
||||
subscribe?: YogaSubscribeNowComponent_Plain;
|
||||
footer?: YogaFooter_Plain;
|
||||
common?: YogaCommon_Plain;
|
||||
}
|
||||
|
||||
export interface FaqPage_NoRelations {
|
||||
@@ -44,6 +48,7 @@ export interface FaqPage_NoRelations {
|
||||
blogs?: number;
|
||||
subscribe?: number;
|
||||
footer?: number;
|
||||
common?: number;
|
||||
}
|
||||
|
||||
export interface FaqPage_AdminPanelLifeCycle {
|
||||
@@ -55,4 +60,5 @@ export interface FaqPage_AdminPanelLifeCycle {
|
||||
blogs?: AdminPanelRelationPropertyModification<YogaBlogPostsComponent_Plain>;
|
||||
subscribe?: AdminPanelRelationPropertyModification<YogaSubscribeNowComponent_Plain>;
|
||||
footer?: AdminPanelRelationPropertyModification<YogaFooter_Plain>;
|
||||
common?: AdminPanelRelationPropertyModification<YogaCommon_Plain>;
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ export interface Global {
|
||||
favicon?: { data: Media };
|
||||
siteDescription: string;
|
||||
defaultSeo?: Seo;
|
||||
logoImage?: { data: Media };
|
||||
};
|
||||
}
|
||||
export interface Global_Plain {
|
||||
@@ -22,6 +23,7 @@ export interface Global_Plain {
|
||||
favicon?: Media_Plain;
|
||||
siteDescription: string;
|
||||
defaultSeo?: Seo_Plain;
|
||||
logoImage?: Media_Plain;
|
||||
}
|
||||
|
||||
export interface Global_NoRelations {
|
||||
@@ -30,6 +32,7 @@ export interface Global_NoRelations {
|
||||
favicon?: number;
|
||||
siteDescription: string;
|
||||
defaultSeo?: Seo_NoRelations;
|
||||
logoImage?: number;
|
||||
}
|
||||
|
||||
export interface Global_AdminPanelLifeCycle {
|
||||
@@ -38,4 +41,5 @@ export interface Global_AdminPanelLifeCycle {
|
||||
favicon?: AdminPanelRelationPropertyModification<Media_Plain>;
|
||||
siteDescription: string;
|
||||
defaultSeo?: Seo_Plain;
|
||||
logoImage?: AdminPanelRelationPropertyModification<Media_Plain>;
|
||||
}
|
||||
|
||||
@@ -5,11 +5,13 @@ import { YogaDiscountComponent } from './yoga-discount-component';
|
||||
import { YogaBlogPostsComponent } from './yoga-blog-posts-component';
|
||||
import { YogaSubscribeNowComponent } from './yoga-subscribe-now-component';
|
||||
import { YogaFooter } from './yoga-footer';
|
||||
import { YogaCommon } from './yoga-common';
|
||||
import { YogaPriceComponent_Plain } from './yoga-price-component';
|
||||
import { YogaDiscountComponent_Plain } from './yoga-discount-component';
|
||||
import { YogaBlogPostsComponent_Plain } from './yoga-blog-posts-component';
|
||||
import { YogaSubscribeNowComponent_Plain } from './yoga-subscribe-now-component';
|
||||
import { YogaFooter_Plain } from './yoga-footer';
|
||||
import { YogaCommon_Plain } from './yoga-common';
|
||||
import { AdminPanelRelationPropertyModification } from '../common/AdminPanelRelationPropertyModification';
|
||||
|
||||
export interface PricesPage {
|
||||
@@ -22,6 +24,7 @@ export interface PricesPage {
|
||||
blogs?: { data: YogaBlogPostsComponent };
|
||||
subscribe?: { data: YogaSubscribeNowComponent };
|
||||
footer?: { data: YogaFooter };
|
||||
common?: { data: YogaCommon };
|
||||
};
|
||||
}
|
||||
export interface PricesPage_Plain {
|
||||
@@ -33,6 +36,7 @@ export interface PricesPage_Plain {
|
||||
blogs?: YogaBlogPostsComponent_Plain;
|
||||
subscribe?: YogaSubscribeNowComponent_Plain;
|
||||
footer?: YogaFooter_Plain;
|
||||
common?: YogaCommon_Plain;
|
||||
}
|
||||
|
||||
export interface PricesPage_NoRelations {
|
||||
@@ -44,6 +48,7 @@ export interface PricesPage_NoRelations {
|
||||
blogs?: number;
|
||||
subscribe?: number;
|
||||
footer?: number;
|
||||
common?: number;
|
||||
}
|
||||
|
||||
export interface PricesPage_AdminPanelLifeCycle {
|
||||
@@ -55,4 +60,5 @@ export interface PricesPage_AdminPanelLifeCycle {
|
||||
blogs?: AdminPanelRelationPropertyModification<YogaBlogPostsComponent_Plain>;
|
||||
subscribe?: AdminPanelRelationPropertyModification<YogaSubscribeNowComponent_Plain>;
|
||||
footer?: AdminPanelRelationPropertyModification<YogaFooter_Plain>;
|
||||
common?: AdminPanelRelationPropertyModification<YogaCommon_Plain>;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
// 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 { YogaSubscribeNowComponent_Plain } from './yoga-subscribe-now-component';
|
||||
import { YogaFooter_Plain } from './yoga-footer';
|
||||
import { YogaCommon_Plain } from './yoga-common';
|
||||
import { AdminPanelRelationPropertyModification } from '../common/AdminPanelRelationPropertyModification';
|
||||
|
||||
export interface ServicePage {
|
||||
id: number;
|
||||
attributes: {
|
||||
createdAt: Date; updatedAt: Date; publishedAt?: Date; header?: string;
|
||||
description?: string;
|
||||
subscribeNow?: { data: YogaSubscribeNowComponent };
|
||||
footer?: { data: YogaFooter };
|
||||
common?: { data: YogaCommon };
|
||||
};
|
||||
}
|
||||
export interface ServicePage_Plain {
|
||||
id: number;
|
||||
createdAt: Date; updatedAt: Date; publishedAt?: Date; header?: string;
|
||||
description?: string;
|
||||
subscribeNow?: YogaSubscribeNowComponent_Plain;
|
||||
footer?: YogaFooter_Plain;
|
||||
common?: YogaCommon_Plain;
|
||||
}
|
||||
|
||||
export interface ServicePage_NoRelations {
|
||||
id: number;
|
||||
createdAt: Date; updatedAt: Date; publishedAt?: Date; header?: string;
|
||||
description?: string;
|
||||
subscribeNow?: number;
|
||||
footer?: number;
|
||||
common?: number;
|
||||
}
|
||||
|
||||
export interface ServicePage_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>;
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import { YogaCustomerFeedbackComponent } from './yoga-customer-feedback-componen
|
||||
import { YogaBlogPostsComponent } from './yoga-blog-posts-component';
|
||||
import { YogaSubscribeNowComponent } from './yoga-subscribe-now-component';
|
||||
import { YogaFooter } from './yoga-footer';
|
||||
import { YogaCommon } from './yoga-common';
|
||||
import { YogaOurServicesComponent_Plain } from './yoga-our-services-component';
|
||||
import { YogaContactUs_Plain } from './yoga-contact-us';
|
||||
import { YogaSpecialitiesComponent_Plain } from './yoga-specialities-component';
|
||||
@@ -14,6 +15,7 @@ import { YogaCustomerFeedbackComponent_Plain } from './yoga-customer-feedback-co
|
||||
import { YogaBlogPostsComponent_Plain } from './yoga-blog-posts-component';
|
||||
import { YogaSubscribeNowComponent_Plain } from './yoga-subscribe-now-component';
|
||||
import { YogaFooter_Plain } from './yoga-footer';
|
||||
import { YogaCommon_Plain } from './yoga-common';
|
||||
import { AdminPanelRelationPropertyModification } from '../common/AdminPanelRelationPropertyModification';
|
||||
|
||||
export interface ServicesPage {
|
||||
@@ -29,6 +31,7 @@ export interface ServicesPage {
|
||||
subscribe?: { data: YogaSubscribeNowComponent };
|
||||
footer?: { data: YogaFooter };
|
||||
title?: string;
|
||||
common?: { data: YogaCommon };
|
||||
};
|
||||
}
|
||||
export interface ServicesPage_Plain {
|
||||
@@ -43,6 +46,7 @@ export interface ServicesPage_Plain {
|
||||
subscribe?: YogaSubscribeNowComponent_Plain;
|
||||
footer?: YogaFooter_Plain;
|
||||
title?: string;
|
||||
common?: YogaCommon_Plain;
|
||||
}
|
||||
|
||||
export interface ServicesPage_NoRelations {
|
||||
@@ -57,6 +61,7 @@ export interface ServicesPage_NoRelations {
|
||||
subscribe?: number;
|
||||
footer?: number;
|
||||
title?: string;
|
||||
common?: number;
|
||||
}
|
||||
|
||||
export interface ServicesPage_AdminPanelLifeCycle {
|
||||
@@ -71,4 +76,5 @@ export interface ServicesPage_AdminPanelLifeCycle {
|
||||
subscribe?: AdminPanelRelationPropertyModification<YogaSubscribeNowComponent_Plain>;
|
||||
footer?: AdminPanelRelationPropertyModification<YogaFooter_Plain>;
|
||||
title?: string;
|
||||
common?: AdminPanelRelationPropertyModification<YogaCommon_Plain>;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
// 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 YogaCommon {
|
||||
id: number;
|
||||
attributes: {
|
||||
createdAt: Date; updatedAt: Date; publishedAt?: Date; logoImage?: { data: Media };
|
||||
};
|
||||
}
|
||||
export interface YogaCommon_Plain {
|
||||
id: number;
|
||||
createdAt: Date; updatedAt: Date; publishedAt?: Date; logoImage?: Media_Plain;
|
||||
}
|
||||
|
||||
export interface YogaCommon_NoRelations {
|
||||
id: number;
|
||||
createdAt: Date; updatedAt: Date; publishedAt?: Date; logoImage?: number;
|
||||
}
|
||||
|
||||
export interface YogaCommon_AdminPanelLifeCycle {
|
||||
id: number;
|
||||
createdAt: Date; updatedAt: Date; publishedAt?: Date; logoImage?: AdminPanelRelationPropertyModification<Media_Plain>;
|
||||
}
|
||||
@@ -14,6 +14,8 @@ export interface YogaPrice {
|
||||
price?: number;
|
||||
icon?: { data: Media };
|
||||
image?: { data: Media };
|
||||
pricePostfix?: string;
|
||||
description?: string;
|
||||
};
|
||||
}
|
||||
export interface YogaPrice_Plain {
|
||||
@@ -25,6 +27,8 @@ export interface YogaPrice_Plain {
|
||||
price?: number;
|
||||
icon?: Media_Plain;
|
||||
image?: Media_Plain;
|
||||
pricePostfix?: string;
|
||||
description?: string;
|
||||
}
|
||||
|
||||
export interface YogaPrice_NoRelations {
|
||||
@@ -36,6 +40,8 @@ export interface YogaPrice_NoRelations {
|
||||
price?: number;
|
||||
icon?: number;
|
||||
image?: number;
|
||||
pricePostfix?: string;
|
||||
description?: string;
|
||||
}
|
||||
|
||||
export interface YogaPrice_AdminPanelLifeCycle {
|
||||
@@ -47,4 +53,6 @@ export interface YogaPrice_AdminPanelLifeCycle {
|
||||
price?: number;
|
||||
icon?: AdminPanelRelationPropertyModification<Media_Plain>;
|
||||
image?: AdminPanelRelationPropertyModification<Media_Plain>;
|
||||
pricePostfix?: string;
|
||||
description?: string;
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ export interface YogaSingleService {
|
||||
image?: { data: Media };
|
||||
imageAlt?: string;
|
||||
name?: string;
|
||||
article?: any;
|
||||
locale: string;
|
||||
localizations?: { data: YogaSingleService[] };
|
||||
};
|
||||
@@ -25,6 +26,7 @@ export interface YogaSingleService_Plain {
|
||||
image?: Media_Plain;
|
||||
imageAlt?: string;
|
||||
name?: string;
|
||||
article?: any;
|
||||
locale: string;
|
||||
localizations?: YogaSingleService_Plain[];
|
||||
}
|
||||
@@ -37,6 +39,7 @@ export interface YogaSingleService_NoRelations {
|
||||
image?: number;
|
||||
imageAlt?: string;
|
||||
name?: string;
|
||||
article?: any;
|
||||
locale: string;
|
||||
localizations?: YogaSingleService[];
|
||||
}
|
||||
@@ -49,6 +52,7 @@ export interface YogaSingleService_AdminPanelLifeCycle {
|
||||
image?: AdminPanelRelationPropertyModification<Media_Plain>;
|
||||
imageAlt?: string;
|
||||
name?: string;
|
||||
article?: any;
|
||||
locale: string;
|
||||
localizations?: YogaSingleService[];
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import { YogaAboutUsWithBoxesComponent } from './yoga-about-us-with-boxes-compon
|
||||
import { YogaDiscountComponent } from './yoga-discount-component';
|
||||
import { YogaTextWithImageComponent } from './yoga-text-with-image-component';
|
||||
import { YogaAchivementsComponent } from './yoga-achivements-component';
|
||||
import { YogaCommon } from './yoga-common';
|
||||
import { HeaderB_Plain } from '../components/yoga-site/HeaderB';
|
||||
import { YogaBlogPostsComponent_Plain } from './yoga-blog-posts-component';
|
||||
import { YogaSubscribeNowComponent_Plain } from './yoga-subscribe-now-component';
|
||||
@@ -16,6 +17,7 @@ import { YogaAboutUsWithBoxesComponent_Plain } from './yoga-about-us-with-boxes-
|
||||
import { YogaDiscountComponent_Plain } from './yoga-discount-component';
|
||||
import { YogaTextWithImageComponent_Plain } from './yoga-text-with-image-component';
|
||||
import { YogaAchivementsComponent_Plain } from './yoga-achivements-component';
|
||||
import { YogaCommon_Plain } from './yoga-common';
|
||||
import { HeaderB_NoRelations } from '../components/yoga-site/HeaderB';
|
||||
import { AdminPanelRelationPropertyModification } from '../common/AdminPanelRelationPropertyModification';
|
||||
|
||||
@@ -31,6 +33,7 @@ export interface About {
|
||||
ourMission?: { data: YogaTextWithImageComponent };
|
||||
ourVision?: { data: YogaTextWithImageComponent };
|
||||
achievements?: { data: YogaAchivementsComponent };
|
||||
common?: { data: YogaCommon };
|
||||
locale: string;
|
||||
localizations?: { data: About[] };
|
||||
};
|
||||
@@ -46,6 +49,7 @@ export interface About_Plain {
|
||||
ourMission?: YogaTextWithImageComponent_Plain;
|
||||
ourVision?: YogaTextWithImageComponent_Plain;
|
||||
achievements?: YogaAchivementsComponent_Plain;
|
||||
common?: YogaCommon_Plain;
|
||||
locale: string;
|
||||
localizations?: About_Plain[];
|
||||
}
|
||||
@@ -61,6 +65,7 @@ export interface About_NoRelations {
|
||||
ourMission?: number;
|
||||
ourVision?: number;
|
||||
achievements?: number;
|
||||
common?: number;
|
||||
locale: string;
|
||||
localizations?: About[];
|
||||
}
|
||||
@@ -76,6 +81,7 @@ export interface About_AdminPanelLifeCycle {
|
||||
ourMission?: AdminPanelRelationPropertyModification<YogaTextWithImageComponent_Plain>;
|
||||
ourVision?: AdminPanelRelationPropertyModification<YogaTextWithImageComponent_Plain>;
|
||||
achievements?: AdminPanelRelationPropertyModification<YogaAchivementsComponent_Plain>;
|
||||
common?: AdminPanelRelationPropertyModification<YogaCommon_Plain>;
|
||||
locale: string;
|
||||
localizations?: About[];
|
||||
}
|
||||
|
||||
@@ -4,10 +4,12 @@ import { YogaContactUs } from './yoga-contact-us';
|
||||
import { YogaGoogleMapsComponent } from './yoga-google-maps-component';
|
||||
import { YogaSubscribeNowComponent } from './yoga-subscribe-now-component';
|
||||
import { YogaFooter } from './yoga-footer';
|
||||
import { YogaCommon } from './yoga-common';
|
||||
import { YogaContactUs_Plain } from './yoga-contact-us';
|
||||
import { YogaGoogleMapsComponent_Plain } from './yoga-google-maps-component';
|
||||
import { YogaSubscribeNowComponent_Plain } from './yoga-subscribe-now-component';
|
||||
import { YogaFooter_Plain } from './yoga-footer';
|
||||
import { YogaCommon_Plain } from './yoga-common';
|
||||
import { AdminPanelRelationPropertyModification } from '../common/AdminPanelRelationPropertyModification';
|
||||
|
||||
export interface ContactPage {
|
||||
@@ -19,6 +21,7 @@ export interface ContactPage {
|
||||
google_maps?: { data: YogaGoogleMapsComponent };
|
||||
subscribe?: { data: YogaSubscribeNowComponent };
|
||||
footer?: { data: YogaFooter };
|
||||
common?: { data: YogaCommon };
|
||||
};
|
||||
}
|
||||
export interface ContactPage_Plain {
|
||||
@@ -29,6 +32,7 @@ export interface ContactPage_Plain {
|
||||
google_maps?: YogaGoogleMapsComponent_Plain;
|
||||
subscribe?: YogaSubscribeNowComponent_Plain;
|
||||
footer?: YogaFooter_Plain;
|
||||
common?: YogaCommon_Plain;
|
||||
}
|
||||
|
||||
export interface ContactPage_NoRelations {
|
||||
@@ -39,6 +43,7 @@ export interface ContactPage_NoRelations {
|
||||
google_maps?: number;
|
||||
subscribe?: number;
|
||||
footer?: number;
|
||||
common?: number;
|
||||
}
|
||||
|
||||
export interface ContactPage_AdminPanelLifeCycle {
|
||||
@@ -49,4 +54,5 @@ export interface ContactPage_AdminPanelLifeCycle {
|
||||
google_maps?: AdminPanelRelationPropertyModification<YogaGoogleMapsComponent_Plain>;
|
||||
subscribe?: AdminPanelRelationPropertyModification<YogaSubscribeNowComponent_Plain>;
|
||||
footer?: AdminPanelRelationPropertyModification<YogaFooter_Plain>;
|
||||
common?: AdminPanelRelationPropertyModification<YogaCommon_Plain>;
|
||||
}
|
||||
|
||||
@@ -5,11 +5,13 @@ import { YogaAchivementsComponent } from './yoga-achivements-component';
|
||||
import { YogaBlogPostsComponent } from './yoga-blog-posts-component';
|
||||
import { YogaSubscribeNowComponent } from './yoga-subscribe-now-component';
|
||||
import { YogaFooter } from './yoga-footer';
|
||||
import { YogaCommon } from './yoga-common';
|
||||
import { YogaFaqComponent_Plain } from './yoga-faq-component';
|
||||
import { YogaAchivementsComponent_Plain } from './yoga-achivements-component';
|
||||
import { YogaBlogPostsComponent_Plain } from './yoga-blog-posts-component';
|
||||
import { YogaSubscribeNowComponent_Plain } from './yoga-subscribe-now-component';
|
||||
import { YogaFooter_Plain } from './yoga-footer';
|
||||
import { YogaCommon_Plain } from './yoga-common';
|
||||
import { AdminPanelRelationPropertyModification } from '../common/AdminPanelRelationPropertyModification';
|
||||
|
||||
export interface FaqPage {
|
||||
@@ -22,6 +24,7 @@ export interface FaqPage {
|
||||
blogs?: { data: YogaBlogPostsComponent };
|
||||
subscribe?: { data: YogaSubscribeNowComponent };
|
||||
footer?: { data: YogaFooter };
|
||||
common?: { data: YogaCommon };
|
||||
};
|
||||
}
|
||||
export interface FaqPage_Plain {
|
||||
@@ -33,6 +36,7 @@ export interface FaqPage_Plain {
|
||||
blogs?: YogaBlogPostsComponent_Plain;
|
||||
subscribe?: YogaSubscribeNowComponent_Plain;
|
||||
footer?: YogaFooter_Plain;
|
||||
common?: YogaCommon_Plain;
|
||||
}
|
||||
|
||||
export interface FaqPage_NoRelations {
|
||||
@@ -44,6 +48,7 @@ export interface FaqPage_NoRelations {
|
||||
blogs?: number;
|
||||
subscribe?: number;
|
||||
footer?: number;
|
||||
common?: number;
|
||||
}
|
||||
|
||||
export interface FaqPage_AdminPanelLifeCycle {
|
||||
@@ -55,4 +60,5 @@ export interface FaqPage_AdminPanelLifeCycle {
|
||||
blogs?: AdminPanelRelationPropertyModification<YogaBlogPostsComponent_Plain>;
|
||||
subscribe?: AdminPanelRelationPropertyModification<YogaSubscribeNowComponent_Plain>;
|
||||
footer?: AdminPanelRelationPropertyModification<YogaFooter_Plain>;
|
||||
common?: AdminPanelRelationPropertyModification<YogaCommon_Plain>;
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ export interface Global {
|
||||
favicon?: { data: Media };
|
||||
siteDescription: string;
|
||||
defaultSeo?: Seo;
|
||||
logoImage?: { data: Media };
|
||||
};
|
||||
}
|
||||
export interface Global_Plain {
|
||||
@@ -22,6 +23,7 @@ export interface Global_Plain {
|
||||
favicon?: Media_Plain;
|
||||
siteDescription: string;
|
||||
defaultSeo?: Seo_Plain;
|
||||
logoImage?: Media_Plain;
|
||||
}
|
||||
|
||||
export interface Global_NoRelations {
|
||||
@@ -30,6 +32,7 @@ export interface Global_NoRelations {
|
||||
favicon?: number;
|
||||
siteDescription: string;
|
||||
defaultSeo?: Seo_NoRelations;
|
||||
logoImage?: number;
|
||||
}
|
||||
|
||||
export interface Global_AdminPanelLifeCycle {
|
||||
@@ -38,4 +41,5 @@ export interface Global_AdminPanelLifeCycle {
|
||||
favicon?: AdminPanelRelationPropertyModification<Media_Plain>;
|
||||
siteDescription: string;
|
||||
defaultSeo?: Seo_Plain;
|
||||
logoImage?: AdminPanelRelationPropertyModification<Media_Plain>;
|
||||
}
|
||||
|
||||
@@ -5,11 +5,13 @@ import { YogaDiscountComponent } from './yoga-discount-component';
|
||||
import { YogaBlogPostsComponent } from './yoga-blog-posts-component';
|
||||
import { YogaSubscribeNowComponent } from './yoga-subscribe-now-component';
|
||||
import { YogaFooter } from './yoga-footer';
|
||||
import { YogaCommon } from './yoga-common';
|
||||
import { YogaPriceComponent_Plain } from './yoga-price-component';
|
||||
import { YogaDiscountComponent_Plain } from './yoga-discount-component';
|
||||
import { YogaBlogPostsComponent_Plain } from './yoga-blog-posts-component';
|
||||
import { YogaSubscribeNowComponent_Plain } from './yoga-subscribe-now-component';
|
||||
import { YogaFooter_Plain } from './yoga-footer';
|
||||
import { YogaCommon_Plain } from './yoga-common';
|
||||
import { AdminPanelRelationPropertyModification } from '../common/AdminPanelRelationPropertyModification';
|
||||
|
||||
export interface PricesPage {
|
||||
@@ -22,6 +24,7 @@ export interface PricesPage {
|
||||
blogs?: { data: YogaBlogPostsComponent };
|
||||
subscribe?: { data: YogaSubscribeNowComponent };
|
||||
footer?: { data: YogaFooter };
|
||||
common?: { data: YogaCommon };
|
||||
};
|
||||
}
|
||||
export interface PricesPage_Plain {
|
||||
@@ -33,6 +36,7 @@ export interface PricesPage_Plain {
|
||||
blogs?: YogaBlogPostsComponent_Plain;
|
||||
subscribe?: YogaSubscribeNowComponent_Plain;
|
||||
footer?: YogaFooter_Plain;
|
||||
common?: YogaCommon_Plain;
|
||||
}
|
||||
|
||||
export interface PricesPage_NoRelations {
|
||||
@@ -44,6 +48,7 @@ export interface PricesPage_NoRelations {
|
||||
blogs?: number;
|
||||
subscribe?: number;
|
||||
footer?: number;
|
||||
common?: number;
|
||||
}
|
||||
|
||||
export interface PricesPage_AdminPanelLifeCycle {
|
||||
@@ -55,4 +60,5 @@ export interface PricesPage_AdminPanelLifeCycle {
|
||||
blogs?: AdminPanelRelationPropertyModification<YogaBlogPostsComponent_Plain>;
|
||||
subscribe?: AdminPanelRelationPropertyModification<YogaSubscribeNowComponent_Plain>;
|
||||
footer?: AdminPanelRelationPropertyModification<YogaFooter_Plain>;
|
||||
common?: AdminPanelRelationPropertyModification<YogaCommon_Plain>;
|
||||
}
|
||||
|
||||
46
yoga-cms/generated-strapi-interfaces/api/service-page.ts
Normal file
46
yoga-cms/generated-strapi-interfaces/api/service-page.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
// 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 { YogaSubscribeNowComponent_Plain } from './yoga-subscribe-now-component';
|
||||
import { YogaFooter_Plain } from './yoga-footer';
|
||||
import { YogaCommon_Plain } from './yoga-common';
|
||||
import { AdminPanelRelationPropertyModification } from '../common/AdminPanelRelationPropertyModification';
|
||||
|
||||
export interface ServicePage {
|
||||
id: number;
|
||||
attributes: {
|
||||
createdAt: Date; updatedAt: Date; publishedAt?: Date; header?: string;
|
||||
description?: string;
|
||||
subscribeNow?: { data: YogaSubscribeNowComponent };
|
||||
footer?: { data: YogaFooter };
|
||||
common?: { data: YogaCommon };
|
||||
};
|
||||
}
|
||||
export interface ServicePage_Plain {
|
||||
id: number;
|
||||
createdAt: Date; updatedAt: Date; publishedAt?: Date; header?: string;
|
||||
description?: string;
|
||||
subscribeNow?: YogaSubscribeNowComponent_Plain;
|
||||
footer?: YogaFooter_Plain;
|
||||
common?: YogaCommon_Plain;
|
||||
}
|
||||
|
||||
export interface ServicePage_NoRelations {
|
||||
id: number;
|
||||
createdAt: Date; updatedAt: Date; publishedAt?: Date; header?: string;
|
||||
description?: string;
|
||||
subscribeNow?: number;
|
||||
footer?: number;
|
||||
common?: number;
|
||||
}
|
||||
|
||||
export interface ServicePage_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>;
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import { YogaCustomerFeedbackComponent } from './yoga-customer-feedback-componen
|
||||
import { YogaBlogPostsComponent } from './yoga-blog-posts-component';
|
||||
import { YogaSubscribeNowComponent } from './yoga-subscribe-now-component';
|
||||
import { YogaFooter } from './yoga-footer';
|
||||
import { YogaCommon } from './yoga-common';
|
||||
import { YogaOurServicesComponent_Plain } from './yoga-our-services-component';
|
||||
import { YogaContactUs_Plain } from './yoga-contact-us';
|
||||
import { YogaSpecialitiesComponent_Plain } from './yoga-specialities-component';
|
||||
@@ -14,6 +15,7 @@ import { YogaCustomerFeedbackComponent_Plain } from './yoga-customer-feedback-co
|
||||
import { YogaBlogPostsComponent_Plain } from './yoga-blog-posts-component';
|
||||
import { YogaSubscribeNowComponent_Plain } from './yoga-subscribe-now-component';
|
||||
import { YogaFooter_Plain } from './yoga-footer';
|
||||
import { YogaCommon_Plain } from './yoga-common';
|
||||
import { AdminPanelRelationPropertyModification } from '../common/AdminPanelRelationPropertyModification';
|
||||
|
||||
export interface ServicesPage {
|
||||
@@ -29,6 +31,7 @@ export interface ServicesPage {
|
||||
subscribe?: { data: YogaSubscribeNowComponent };
|
||||
footer?: { data: YogaFooter };
|
||||
title?: string;
|
||||
common?: { data: YogaCommon };
|
||||
};
|
||||
}
|
||||
export interface ServicesPage_Plain {
|
||||
@@ -43,6 +46,7 @@ export interface ServicesPage_Plain {
|
||||
subscribe?: YogaSubscribeNowComponent_Plain;
|
||||
footer?: YogaFooter_Plain;
|
||||
title?: string;
|
||||
common?: YogaCommon_Plain;
|
||||
}
|
||||
|
||||
export interface ServicesPage_NoRelations {
|
||||
@@ -57,6 +61,7 @@ export interface ServicesPage_NoRelations {
|
||||
subscribe?: number;
|
||||
footer?: number;
|
||||
title?: string;
|
||||
common?: number;
|
||||
}
|
||||
|
||||
export interface ServicesPage_AdminPanelLifeCycle {
|
||||
@@ -71,4 +76,5 @@ export interface ServicesPage_AdminPanelLifeCycle {
|
||||
subscribe?: AdminPanelRelationPropertyModification<YogaSubscribeNowComponent_Plain>;
|
||||
footer?: AdminPanelRelationPropertyModification<YogaFooter_Plain>;
|
||||
title?: string;
|
||||
common?: AdminPanelRelationPropertyModification<YogaCommon_Plain>;
|
||||
}
|
||||
|
||||
30
yoga-cms/generated-strapi-interfaces/api/yoga-common.ts
Normal file
30
yoga-cms/generated-strapi-interfaces/api/yoga-common.ts
Normal file
@@ -0,0 +1,30 @@
|
||||
// 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 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;
|
||||
}
|
||||
@@ -14,6 +14,8 @@ export interface YogaPrice {
|
||||
price?: number;
|
||||
icon?: { data: Media };
|
||||
image?: { data: Media };
|
||||
pricePostfix?: string;
|
||||
description?: string;
|
||||
};
|
||||
}
|
||||
export interface YogaPrice_Plain {
|
||||
@@ -25,6 +27,8 @@ export interface YogaPrice_Plain {
|
||||
price?: number;
|
||||
icon?: Media_Plain;
|
||||
image?: Media_Plain;
|
||||
pricePostfix?: string;
|
||||
description?: string;
|
||||
}
|
||||
|
||||
export interface YogaPrice_NoRelations {
|
||||
@@ -36,6 +40,8 @@ export interface YogaPrice_NoRelations {
|
||||
price?: number;
|
||||
icon?: number;
|
||||
image?: number;
|
||||
pricePostfix?: string;
|
||||
description?: string;
|
||||
}
|
||||
|
||||
export interface YogaPrice_AdminPanelLifeCycle {
|
||||
@@ -47,4 +53,6 @@ export interface YogaPrice_AdminPanelLifeCycle {
|
||||
price?: number;
|
||||
icon?: AdminPanelRelationPropertyModification<Media_Plain>;
|
||||
image?: AdminPanelRelationPropertyModification<Media_Plain>;
|
||||
pricePostfix?: string;
|
||||
description?: string;
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ export interface YogaSingleService {
|
||||
image?: { data: Media };
|
||||
imageAlt?: string;
|
||||
name?: string;
|
||||
article?: any;
|
||||
locale: string;
|
||||
localizations?: { data: YogaSingleService[] };
|
||||
};
|
||||
@@ -25,6 +26,7 @@ export interface YogaSingleService_Plain {
|
||||
image?: Media_Plain;
|
||||
imageAlt?: string;
|
||||
name?: string;
|
||||
article?: any;
|
||||
locale: string;
|
||||
localizations?: YogaSingleService_Plain[];
|
||||
}
|
||||
@@ -37,6 +39,7 @@ export interface YogaSingleService_NoRelations {
|
||||
image?: number;
|
||||
imageAlt?: string;
|
||||
name?: string;
|
||||
article?: any;
|
||||
locale: string;
|
||||
localizations?: YogaSingleService[];
|
||||
}
|
||||
@@ -49,6 +52,7 @@ export interface YogaSingleService_AdminPanelLifeCycle {
|
||||
image?: AdminPanelRelationPropertyModification<Media_Plain>;
|
||||
imageAlt?: string;
|
||||
name?: string;
|
||||
article?: any;
|
||||
locale: string;
|
||||
localizations?: YogaSingleService[];
|
||||
}
|
||||
|
||||
@@ -65,6 +65,11 @@
|
||||
"type": "relation",
|
||||
"relation": "oneToOne",
|
||||
"target": "api::yoga-achivements-component.yoga-achivements-component"
|
||||
},
|
||||
"common": {
|
||||
"type": "relation",
|
||||
"relation": "oneToOne",
|
||||
"target": "api::yoga-common.yoga-common"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,6 +37,11 @@
|
||||
"type": "relation",
|
||||
"relation": "oneToOne",
|
||||
"target": "api::yoga-footer.yoga-footer"
|
||||
},
|
||||
"common": {
|
||||
"type": "relation",
|
||||
"relation": "oneToOne",
|
||||
"target": "api::yoga-common.yoga-common"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,6 +42,11 @@
|
||||
"type": "relation",
|
||||
"relation": "oneToOne",
|
||||
"target": "api::yoga-footer.yoga-footer"
|
||||
},
|
||||
"common": {
|
||||
"type": "relation",
|
||||
"relation": "oneToOne",
|
||||
"target": "api::yoga-common.yoga-common"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,11 @@
|
||||
"type": "media",
|
||||
"multiple": false,
|
||||
"required": false,
|
||||
"allowedTypes": ["images", "files", "videos"]
|
||||
"allowedTypes": [
|
||||
"images",
|
||||
"files",
|
||||
"videos"
|
||||
]
|
||||
},
|
||||
"siteDescription": {
|
||||
"type": "text",
|
||||
@@ -30,6 +34,17 @@
|
||||
"type": "component",
|
||||
"repeatable": false,
|
||||
"component": "shared.seo"
|
||||
},
|
||||
"logoImage": {
|
||||
"type": "media",
|
||||
"multiple": false,
|
||||
"required": false,
|
||||
"allowedTypes": [
|
||||
"images",
|
||||
"files",
|
||||
"videos",
|
||||
"audios"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
"info": {
|
||||
"singularName": "prices-page",
|
||||
"pluralName": "prices-pages",
|
||||
"displayName": "PricesPage"
|
||||
"displayName": "PricesPage",
|
||||
"description": ""
|
||||
},
|
||||
"options": {
|
||||
"draftAndPublish": true
|
||||
@@ -41,6 +42,11 @@
|
||||
"type": "relation",
|
||||
"relation": "oneToOne",
|
||||
"target": "api::yoga-footer.yoga-footer"
|
||||
},
|
||||
"common": {
|
||||
"type": "relation",
|
||||
"relation": "oneToOne",
|
||||
"target": "api::yoga-common.yoga-common"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"kind": "singleType",
|
||||
"collectionName": "service_pages",
|
||||
"info": {
|
||||
"singularName": "service-page",
|
||||
"pluralName": "service-pages",
|
||||
"displayName": "ServicePage",
|
||||
"description": ""
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
/**
|
||||
* service-page controller
|
||||
*/
|
||||
|
||||
import { factories } from '@strapi/strapi'
|
||||
|
||||
export default factories.createCoreController('api::service-page.service-page');
|
||||
7
yoga-cms/src/api/service-page/routes/service-page.ts
Normal file
7
yoga-cms/src/api/service-page/routes/service-page.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
/**
|
||||
* service-page router
|
||||
*/
|
||||
|
||||
import { factories } from '@strapi/strapi';
|
||||
|
||||
export default factories.createCoreRouter('api::service-page.service-page');
|
||||
7
yoga-cms/src/api/service-page/services/service-page.ts
Normal file
7
yoga-cms/src/api/service-page/services/service-page.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
/**
|
||||
* service-page service
|
||||
*/
|
||||
|
||||
import { factories } from '@strapi/strapi';
|
||||
|
||||
export default factories.createCoreService('api::service-page.service-page');
|
||||
@@ -55,6 +55,11 @@
|
||||
},
|
||||
"title": {
|
||||
"type": "string"
|
||||
},
|
||||
"common": {
|
||||
"type": "relation",
|
||||
"relation": "oneToOne",
|
||||
"target": "api::yoga-common.yoga-common"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"kind": "collectionType",
|
||||
"collectionName": "yoga_commons",
|
||||
"info": {
|
||||
"singularName": "yoga-common",
|
||||
"pluralName": "yoga-commons",
|
||||
"displayName": "YogaCommon",
|
||||
"description": ""
|
||||
},
|
||||
"options": {
|
||||
"draftAndPublish": true
|
||||
},
|
||||
"attributes": {
|
||||
"logoImage": {
|
||||
"type": "media",
|
||||
"multiple": false,
|
||||
"required": false,
|
||||
"allowedTypes": [
|
||||
"images",
|
||||
"files",
|
||||
"videos",
|
||||
"audios"
|
||||
]
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"required": true
|
||||
}
|
||||
}
|
||||
}
|
||||
7
yoga-cms/src/api/yoga-common/controllers/yoga-common.ts
Normal file
7
yoga-cms/src/api/yoga-common/controllers/yoga-common.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
/**
|
||||
* yoga-common controller
|
||||
*/
|
||||
|
||||
import { factories } from '@strapi/strapi'
|
||||
|
||||
export default factories.createCoreController('api::yoga-common.yoga-common');
|
||||
7
yoga-cms/src/api/yoga-common/routes/yoga-common.ts
Normal file
7
yoga-cms/src/api/yoga-common/routes/yoga-common.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
/**
|
||||
* yoga-common router
|
||||
*/
|
||||
|
||||
import { factories } from '@strapi/strapi';
|
||||
|
||||
export default factories.createCoreRouter('api::yoga-common.yoga-common');
|
||||
7
yoga-cms/src/api/yoga-common/services/yoga-common.ts
Normal file
7
yoga-cms/src/api/yoga-common/services/yoga-common.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
/**
|
||||
* yoga-common service
|
||||
*/
|
||||
|
||||
import { factories } from '@strapi/strapi';
|
||||
|
||||
export default factories.createCoreService('api::yoga-common.yoga-common');
|
||||
@@ -4,7 +4,8 @@
|
||||
"info": {
|
||||
"singularName": "yoga-price",
|
||||
"pluralName": "yoga-prices",
|
||||
"displayName": "YogaPrice"
|
||||
"displayName": "YogaPrice",
|
||||
"description": ""
|
||||
},
|
||||
"options": {
|
||||
"draftAndPublish": true
|
||||
@@ -27,24 +28,32 @@
|
||||
"type": "integer"
|
||||
},
|
||||
"icon": {
|
||||
"type": "media",
|
||||
"multiple": false,
|
||||
"required": false,
|
||||
"allowedTypes": [
|
||||
"images",
|
||||
"files",
|
||||
"videos",
|
||||
"audios"
|
||||
],
|
||||
"type": "media",
|
||||
"multiple": false
|
||||
]
|
||||
},
|
||||
"image": {
|
||||
"type": "media",
|
||||
"multiple": false,
|
||||
"required": false,
|
||||
"allowedTypes": [
|
||||
"images",
|
||||
"files",
|
||||
"videos",
|
||||
"audios"
|
||||
],
|
||||
"type": "media",
|
||||
"multiple": false
|
||||
]
|
||||
},
|
||||
"pricePostfix": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": {
|
||||
"type": "text"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
"info": {
|
||||
"singularName": "yoga-single-service",
|
||||
"pluralName": "yoga-single-services",
|
||||
"displayName": "YogaSingleService"
|
||||
"displayName": "YogaSingleService",
|
||||
"description": ""
|
||||
},
|
||||
"options": {
|
||||
"draftAndPublish": true
|
||||
@@ -40,14 +41,15 @@
|
||||
"type": "string"
|
||||
},
|
||||
"image": {
|
||||
"type": "media",
|
||||
"multiple": false,
|
||||
"required": false,
|
||||
"allowedTypes": [
|
||||
"images",
|
||||
"files",
|
||||
"videos",
|
||||
"audios"
|
||||
],
|
||||
"type": "media",
|
||||
"multiple": false,
|
||||
"pluginOptions": {
|
||||
"i18n": {
|
||||
"localized": true
|
||||
@@ -69,6 +71,9 @@
|
||||
}
|
||||
},
|
||||
"type": "string"
|
||||
},
|
||||
"article": {
|
||||
"type": "blocks"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
101
yoga-cms/types/generated/contentTypes.d.ts
vendored
101
yoga-cms/types/generated/contentTypes.d.ts
vendored
@@ -402,6 +402,10 @@ export interface ApiAboutAbout extends Struct.SingleTypeSchema {
|
||||
'oneToOne',
|
||||
'api::yoga-blog-posts-component.yoga-blog-posts-component'
|
||||
>;
|
||||
common: Schema.Attribute.Relation<
|
||||
'oneToOne',
|
||||
'api::yoga-common.yoga-common'
|
||||
>;
|
||||
createdAt: Schema.Attribute.DateTime;
|
||||
createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> &
|
||||
Schema.Attribute.Private;
|
||||
@@ -556,6 +560,10 @@ export interface ApiContactPageContactPage extends Struct.SingleTypeSchema {
|
||||
draftAndPublish: true;
|
||||
};
|
||||
attributes: {
|
||||
common: Schema.Attribute.Relation<
|
||||
'oneToOne',
|
||||
'api::yoga-common.yoga-common'
|
||||
>;
|
||||
contactUs: Schema.Attribute.Relation<
|
||||
'oneToOne',
|
||||
'api::yoga-contact-us.yoga-contact-us'
|
||||
@@ -610,6 +618,10 @@ export interface ApiFaqPageFaqPage extends Struct.SingleTypeSchema {
|
||||
'oneToOne',
|
||||
'api::yoga-blog-posts-component.yoga-blog-posts-component'
|
||||
>;
|
||||
common: Schema.Attribute.Relation<
|
||||
'oneToOne',
|
||||
'api::yoga-common.yoga-common'
|
||||
>;
|
||||
createdAt: Schema.Attribute.DateTime;
|
||||
createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> &
|
||||
Schema.Attribute.Private;
|
||||
@@ -663,6 +675,7 @@ export interface ApiGlobalGlobal extends Struct.SingleTypeSchema {
|
||||
'api::global.global'
|
||||
> &
|
||||
Schema.Attribute.Private;
|
||||
logoImage: Schema.Attribute.Media<'images' | 'files' | 'videos' | 'audios'>;
|
||||
publishedAt: Schema.Attribute.DateTime;
|
||||
siteDescription: Schema.Attribute.Text & Schema.Attribute.Required;
|
||||
siteName: Schema.Attribute.String & Schema.Attribute.Required;
|
||||
@@ -803,6 +816,7 @@ export interface ApiPersonPerson extends Struct.SingleTypeSchema {
|
||||
export interface ApiPricesPagePricesPage extends Struct.SingleTypeSchema {
|
||||
collectionName: 'prices_pages';
|
||||
info: {
|
||||
description: '';
|
||||
displayName: 'PricesPage';
|
||||
pluralName: 'prices-pages';
|
||||
singularName: 'prices-page';
|
||||
@@ -815,6 +829,10 @@ export interface ApiPricesPagePricesPage extends Struct.SingleTypeSchema {
|
||||
'oneToOne',
|
||||
'api::yoga-blog-posts-component.yoga-blog-posts-component'
|
||||
>;
|
||||
common: Schema.Attribute.Relation<
|
||||
'oneToOne',
|
||||
'api::yoga-common.yoga-common'
|
||||
>;
|
||||
createdAt: Schema.Attribute.DateTime;
|
||||
createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> &
|
||||
Schema.Attribute.Private;
|
||||
@@ -849,6 +867,48 @@ export interface ApiPricesPagePricesPage extends Struct.SingleTypeSchema {
|
||||
};
|
||||
}
|
||||
|
||||
export interface ApiServicePageServicePage extends Struct.SingleTypeSchema {
|
||||
collectionName: 'service_pages';
|
||||
info: {
|
||||
description: '';
|
||||
displayName: 'ServicePage';
|
||||
pluralName: 'service-pages';
|
||||
singularName: 'service-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-page.service-page'
|
||||
> &
|
||||
Schema.Attribute.Private;
|
||||
publishedAt: Schema.Attribute.DateTime;
|
||||
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 ApiServicesPageServicesPage extends Struct.SingleTypeSchema {
|
||||
collectionName: 'services_pages';
|
||||
info: {
|
||||
@@ -865,6 +925,10 @@ export interface ApiServicesPageServicesPage 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'
|
||||
@@ -1170,6 +1234,36 @@ export interface ApiYogaBlogPostsComponentYogaBlogPostsComponent
|
||||
};
|
||||
}
|
||||
|
||||
export interface ApiYogaCommonYogaCommon extends Struct.CollectionTypeSchema {
|
||||
collectionName: 'yoga_commons';
|
||||
info: {
|
||||
description: '';
|
||||
displayName: 'YogaCommon';
|
||||
pluralName: 'yoga-commons';
|
||||
singularName: 'yoga-common';
|
||||
};
|
||||
options: {
|
||||
draftAndPublish: true;
|
||||
};
|
||||
attributes: {
|
||||
createdAt: Schema.Attribute.DateTime;
|
||||
createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> &
|
||||
Schema.Attribute.Private;
|
||||
locale: Schema.Attribute.String & Schema.Attribute.Private;
|
||||
localizations: Schema.Attribute.Relation<
|
||||
'oneToMany',
|
||||
'api::yoga-common.yoga-common'
|
||||
> &
|
||||
Schema.Attribute.Private;
|
||||
logoImage: Schema.Attribute.Media<'images' | 'files' | 'videos' | 'audios'>;
|
||||
name: Schema.Attribute.String & Schema.Attribute.Required;
|
||||
publishedAt: Schema.Attribute.DateTime;
|
||||
updatedAt: Schema.Attribute.DateTime;
|
||||
updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> &
|
||||
Schema.Attribute.Private;
|
||||
};
|
||||
}
|
||||
|
||||
export interface ApiYogaContactUsYogaContactUs
|
||||
extends Struct.CollectionTypeSchema {
|
||||
collectionName: 'yoga_contact_uses';
|
||||
@@ -1642,6 +1736,7 @@ export interface ApiYogaPriceComponentYogaPriceComponent
|
||||
export interface ApiYogaPriceYogaPrice extends Struct.CollectionTypeSchema {
|
||||
collectionName: 'yoga_prices';
|
||||
info: {
|
||||
description: '';
|
||||
displayName: 'YogaPrice';
|
||||
pluralName: 'yoga-prices';
|
||||
singularName: 'yoga-price';
|
||||
@@ -1654,6 +1749,7 @@ export interface ApiYogaPriceYogaPrice extends Struct.CollectionTypeSchema {
|
||||
createdAt: Schema.Attribute.DateTime;
|
||||
createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> &
|
||||
Schema.Attribute.Private;
|
||||
description: Schema.Attribute.Text;
|
||||
header: Schema.Attribute.String;
|
||||
icon: Schema.Attribute.Media<'images' | 'files' | 'videos' | 'audios'>;
|
||||
image: Schema.Attribute.Media<'images' | 'files' | 'videos' | 'audios'>;
|
||||
@@ -1666,6 +1762,7 @@ export interface ApiYogaPriceYogaPrice extends Struct.CollectionTypeSchema {
|
||||
option1: Schema.Attribute.String;
|
||||
option2: Schema.Attribute.String;
|
||||
price: Schema.Attribute.Integer;
|
||||
pricePostfix: Schema.Attribute.String;
|
||||
publishedAt: Schema.Attribute.DateTime;
|
||||
updatedAt: Schema.Attribute.DateTime;
|
||||
updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> &
|
||||
@@ -1677,6 +1774,7 @@ export interface ApiYogaSingleServiceYogaSingleService
|
||||
extends Struct.CollectionTypeSchema {
|
||||
collectionName: 'yoga_single_services';
|
||||
info: {
|
||||
description: '';
|
||||
displayName: 'YogaSingleService';
|
||||
pluralName: 'yoga-single-services';
|
||||
singularName: 'yoga-single-service';
|
||||
@@ -1690,6 +1788,7 @@ export interface ApiYogaSingleServiceYogaSingleService
|
||||
};
|
||||
};
|
||||
attributes: {
|
||||
article: Schema.Attribute.Blocks;
|
||||
buttonLink: Schema.Attribute.String &
|
||||
Schema.Attribute.SetPluginOptions<{
|
||||
i18n: {
|
||||
@@ -2501,6 +2600,7 @@ declare module '@strapi/strapi' {
|
||||
'api::page.page': ApiPagePage;
|
||||
'api::person.person': ApiPersonPerson;
|
||||
'api::prices-page.prices-page': ApiPricesPagePricesPage;
|
||||
'api::service-page.service-page': ApiServicePageServicePage;
|
||||
'api::services-page.services-page': ApiServicesPageServicesPage;
|
||||
'api::yoga-about-us-component.yoga-about-us-component': ApiYogaAboutUsComponentYogaAboutUsComponent;
|
||||
'api::yoga-about-us-with-boxes-component.yoga-about-us-with-boxes-component': ApiYogaAboutUsWithBoxesComponentYogaAboutUsWithBoxesComponent;
|
||||
@@ -2508,6 +2608,7 @@ declare module '@strapi/strapi' {
|
||||
'api::yoga-achivements-component.yoga-achivements-component': ApiYogaAchivementsComponentYogaAchivementsComponent;
|
||||
'api::yoga-blog-post.yoga-blog-post': ApiYogaBlogPostYogaBlogPost;
|
||||
'api::yoga-blog-posts-component.yoga-blog-posts-component': ApiYogaBlogPostsComponentYogaBlogPostsComponent;
|
||||
'api::yoga-common.yoga-common': ApiYogaCommonYogaCommon;
|
||||
'api::yoga-contact-us.yoga-contact-us': ApiYogaContactUsYogaContactUs;
|
||||
'api::yoga-customer-feedback-component.yoga-customer-feedback-component': ApiYogaCustomerFeedbackComponentYogaCustomerFeedbackComponent;
|
||||
'api::yoga-customer-feedback.yoga-customer-feedback': ApiYogaCustomerFeedbackYogaCustomerFeedback;
|
||||
|
||||
Reference in New Issue
Block a user