diff --git a/.gitignore b/.gitignore index 835004e..79f35f1 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,4 @@ yarn.lock* .npmrc apps/backend/src/plugins/metajob-backend/ .npmrc +tsconfig.tsbuildinfo diff --git a/.npmrc b/.npmrc index e70ab32..5e2fa4b 100644 --- a/.npmrc +++ b/.npmrc @@ -1,3 +1,3 @@ -package-manager=pnpm@7 +package-manager=pnpm@9 @padma:registry=https://api.keygen.sh/v1/accounts/88de7a21-b541-48e5-8727-f992ebeb43fa/artifacts/ //api.keygen.sh/v1/accounts/88de7a21-b541-48e5-8727-f992ebeb43fa/artifacts/:_authToken=$LICENSE_TOKEN \ No newline at end of file diff --git a/README.md b/README.md index 307f42e..5c338e6 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,6 @@ # Padma- The Next.js Framework for Strapi -> # 📢 Project Release Notice -> -> This project is currently released as a **Job Board Solution** under an [EULA License](./EULA.md). -> -> For now, it is available only for **job board use cases**, but it can be adapted for **multi-purpose solutions** soon. -> -> --- -> -> 🔓 **Open-Source Announcement**: -> This project will be **open-sourced soon**! Stay tuned for updates on its release. - - -## **What is Padma?** -#### Introduction: -Padma is the easiest way to create lightning-fast websites using Strapi and Next.js. It's open source and free to use. - ## How Padma Works: diff --git a/apps/backend/config/plugins.js b/apps/backend/config/plugins.js index 5709e82..e458924 100644 --- a/apps/backend/config/plugins.js +++ b/apps/backend/config/plugins.js @@ -28,9 +28,7 @@ module.exports = ({ env }) => ({ maxFileSize: 250 * 1024 * 1024, // multipart data, modify here limit of uploaded file size }, }, - "metajob-strapi": { - enabled: true, - }, + "google-maps": { enabled: true, }, diff --git a/apps/backend/package.json b/apps/backend/package.json index 97983be..591f5d4 100644 --- a/apps/backend/package.json +++ b/apps/backend/package.json @@ -22,7 +22,6 @@ "@strapi/plugin-users-permissions": "4.19.0", "@strapi/provider-upload-cloudinary": "4.15.4", "@strapi/strapi": "4.15.5", - "@padma/metajob-backend": "0.0.1", "pg": "8.11.3", "prop-types": "^15.7.2", "react": "^18.0.0", diff --git a/apps/backend/src/api/blog-detail/content-types/blog-detail/schema.json b/apps/backend/src/api/blog-detail/content-types/blog-detail/schema.json index 541aaea..9f82366 100644 --- a/apps/backend/src/api/blog-detail/content-types/blog-detail/schema.json +++ b/apps/backend/src/api/blog-detail/content-types/blog-detail/schema.json @@ -8,7 +8,7 @@ "description": "" }, "options": { - "draftAndPublish": true + "draftAndPublish": false }, "pluginOptions": { "i18n": { @@ -47,7 +47,8 @@ "type": "dynamiczone", "components": [ "shared.spacing", - "component.page-title" + "component.page-title", + "single-type.blog-details" ] }, "leftSidebar": { diff --git a/apps/backend/src/api/dashboard-home/content-types/dashboard-home/schema.json b/apps/backend/src/api/dashboard-home/content-types/dashboard-home/schema.json index f52743a..3d97013 100644 --- a/apps/backend/src/api/dashboard-home/content-types/dashboard-home/schema.json +++ b/apps/backend/src/api/dashboard-home/content-types/dashboard-home/schema.json @@ -8,7 +8,7 @@ "description": "" }, "options": { - "draftAndPublish": true + "draftAndPublish": false }, "pluginOptions": {}, "attributes": { diff --git a/apps/backend/src/api/home-page/content-types/home-page/schema.json b/apps/backend/src/api/home-page/content-types/home-page/schema.json index a6dbf4c..3504298 100644 --- a/apps/backend/src/api/home-page/content-types/home-page/schema.json +++ b/apps/backend/src/api/home-page/content-types/home-page/schema.json @@ -8,7 +8,7 @@ "description": "" }, "options": { - "draftAndPublish": true + "draftAndPublish": false }, "pluginOptions": { "i18n": { diff --git a/apps/backend/src/api/layout/content-types/layout/schema.json b/apps/backend/src/api/layout/content-types/layout/schema.json index 5996fd6..de054b2 100644 --- a/apps/backend/src/api/layout/content-types/layout/schema.json +++ b/apps/backend/src/api/layout/content-types/layout/schema.json @@ -8,7 +8,7 @@ "description": "" }, "options": { - "draftAndPublish": true + "draftAndPublish": false }, "pluginOptions": { "i18n": { @@ -16,145 +16,43 @@ } }, "attributes": { - "light_logo": { - "type": "component", - "repeatable": false, + "header": { "pluginOptions": { "i18n": { "localized": true } }, - "component": "header.logo" + "type": "dynamiczone", + "components": [ + "block.public-header", + "block.private-header" + ], + "required": false }, - "Button": { - "type": "component", - "repeatable": true, + "footer": { "pluginOptions": { "i18n": { "localized": true } }, - "component": "component.link" + "type": "dynamiczone", + "components": [ + "block.footer", + "widget.footer-top" + ], + "required": false }, - "FooterOne": { - "type": "component", - "repeatable": false, + "private_sidebar_menus": { "pluginOptions": { "i18n": { "localized": true } }, - "component": "widget.footer-one" - }, - "FooterTwo": { - "type": "component", - "repeatable": false, - "pluginOptions": { - "i18n": { - "localized": true - } - }, - "component": "widget.footer-two" - }, - "FooterThree": { - "type": "component", - "repeatable": false, - "pluginOptions": { - "i18n": { - "localized": true - } - }, - "component": "widget.footer-two" - }, - "userMenu": { - "type": "component", - "repeatable": true, - "pluginOptions": { - "i18n": { - "localized": true - } - }, - "component": "component.link" - }, - "FooterFour": { - "type": "component", - "repeatable": false, - "pluginOptions": { - "i18n": { - "localized": true - } - }, - "component": "widget.footer-two" - }, - "FooterTop": { - "type": "component", - "repeatable": false, - "pluginOptions": { - "i18n": { - "localized": true - } - }, - "component": "widget.footer-search" - }, - "FooterBottom": { - "type": "component", - "repeatable": false, - "pluginOptions": { - "i18n": { - "localized": true - } - }, - "component": "widget.footer-bottom" - }, - "dark_logo": { - "type": "component", - "repeatable": false, - "pluginOptions": { - "i18n": { - "localized": true - } - }, - "component": "header.logo" - }, - "langMenu": { - "type": "component", - "repeatable": true, - "pluginOptions": { - "i18n": { - "localized": false - } - }, - "component": "component.link" - }, - "employerSidebar": { - "type": "component", - "repeatable": true, - "pluginOptions": { - "i18n": { - "localized": true - } - }, - "component": "component.menu" - }, - "candidateSidebar": { - "type": "component", - "repeatable": true, - "pluginOptions": { - "i18n": { - "localized": true - } - }, - "component": "component.menu" - }, - "MainMenu": { - "type": "component", - "repeatable": true, - "pluginOptions": { - "i18n": { - "localized": true - } - }, - "component": "component.menu" + "type": "dynamiczone", + "components": [ + "shared.share-menu" + ], + "required": false } } } diff --git a/apps/backend/src/api/list-detail/controllers/list-detail.js b/apps/backend/src/api/list-detail/controllers/list-detail.js deleted file mode 100644 index df4fe56..0000000 --- a/apps/backend/src/api/list-detail/controllers/list-detail.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -/** - * list-detail controller - */ - -const { createCoreController } = require('@strapi/strapi').factories; - -module.exports = createCoreController('api::list-detail.list-detail'); diff --git a/apps/backend/src/api/page/content-types/page/schema.json b/apps/backend/src/api/page/content-types/page/schema.json index 5fd6e93..a39f46e 100644 --- a/apps/backend/src/api/page/content-types/page/schema.json +++ b/apps/backend/src/api/page/content-types/page/schema.json @@ -37,7 +37,7 @@ "forms.job-filter", "forms.company-filter", "forms.candidate-filter", - "block.category-card2" + "block.category-list" ] } } diff --git a/apps/backend/src/api/permalink/content-types/permalink/schema.json b/apps/backend/src/api/permalink/content-types/permalink/schema.json new file mode 100644 index 0000000..efeee72 --- /dev/null +++ b/apps/backend/src/api/permalink/content-types/permalink/schema.json @@ -0,0 +1,29 @@ +{ + "kind": "singleType", + "collectionName": "permalinks", + "info": { + "singularName": "permalink", + "pluralName": "permalinks", + "displayName": "Permalinks", + "description": "" + }, + "options": { + "draftAndPublish": false + }, + "pluginOptions": {}, + "attributes": { + "structure": { + "type": "enumeration", + "enum": [ + "Plain", + "Name and display" + ] + }, + "singlePage": { + "displayName": "singlePage", + "type": "component", + "repeatable": true, + "component": "config.single-page" + } + } +} diff --git a/apps/backend/src/api/permalink/controllers/permalink.js b/apps/backend/src/api/permalink/controllers/permalink.js new file mode 100644 index 0000000..3b46662 --- /dev/null +++ b/apps/backend/src/api/permalink/controllers/permalink.js @@ -0,0 +1,9 @@ +'use strict'; + +/** + * permalink controller + */ + +const { createCoreController } = require('@strapi/strapi').factories; + +module.exports = createCoreController('api::permalink.permalink'); diff --git a/apps/backend/src/api/list-detail/routes/list-detail.js b/apps/backend/src/api/permalink/routes/permalink.js similarity index 50% rename from apps/backend/src/api/list-detail/routes/list-detail.js rename to apps/backend/src/api/permalink/routes/permalink.js index f01dc74..5cf67ef 100644 --- a/apps/backend/src/api/list-detail/routes/list-detail.js +++ b/apps/backend/src/api/permalink/routes/permalink.js @@ -1,9 +1,9 @@ 'use strict'; /** - * list-detail router + * permalink router */ const { createCoreRouter } = require('@strapi/strapi').factories; -module.exports = createCoreRouter('api::list-detail.list-detail'); +module.exports = createCoreRouter('api::permalink.permalink'); diff --git a/apps/backend/src/api/list-detail/services/list-detail.js b/apps/backend/src/api/permalink/services/permalink.js similarity index 50% rename from apps/backend/src/api/list-detail/services/list-detail.js rename to apps/backend/src/api/permalink/services/permalink.js index ed53b44..258d190 100644 --- a/apps/backend/src/api/list-detail/services/list-detail.js +++ b/apps/backend/src/api/permalink/services/permalink.js @@ -1,9 +1,9 @@ 'use strict'; /** - * list-detail service + * permalink service */ const { createCoreService } = require('@strapi/strapi').factories; -module.exports = createCoreService('api::list-detail.list-detail'); +module.exports = createCoreService('api::permalink.permalink'); diff --git a/apps/backend/src/api/private-page/content-types/private-page/schema.json b/apps/backend/src/api/private-page/content-types/private-page/schema.json index 44b5fcf..7f4029b 100644 --- a/apps/backend/src/api/private-page/content-types/private-page/schema.json +++ b/apps/backend/src/api/private-page/content-types/private-page/schema.json @@ -62,7 +62,8 @@ "block.latest-applied", "block.manage-lists", "block.manage-companies", - "table.applied-jobs" + "table.applied-jobs", + "block.manage-resume" ], "pluginOptions": { "i18n": { diff --git a/apps/backend/src/api/sidebar/content-types/sidebar/schema.json b/apps/backend/src/api/sidebar/content-types/sidebar/schema.json index d86f7d4..7a18037 100644 --- a/apps/backend/src/api/sidebar/content-types/sidebar/schema.json +++ b/apps/backend/src/api/sidebar/content-types/sidebar/schema.json @@ -8,7 +8,7 @@ "description": "" }, "options": { - "draftAndPublish": true + "draftAndPublish": false }, "pluginOptions": {}, "attributes": { diff --git a/apps/backend/src/components/banner/banner-one.json b/apps/backend/src/components/banner/banner-one.json index 697b201..41d5130 100644 --- a/apps/backend/src/components/banner/banner-one.json +++ b/apps/backend/src/components/banner/banner-one.json @@ -30,7 +30,14 @@ ] }, "style": { - "type": "json" + "type": "component", + "repeatable": false, + "component": "component.style-section" + }, + "empty": { + "type": "component", + "repeatable": false, + "component": "shared.empty" } } } diff --git a/apps/backend/src/components/block/blog-card.json b/apps/backend/src/components/block/blog-card.json index fdf3010..4b35486 100644 --- a/apps/backend/src/components/block/blog-card.json +++ b/apps/backend/src/components/block/blog-card.json @@ -22,6 +22,16 @@ "type": "relation", "relation": "oneToMany", "target": "api::post.post" + }, + "empty": { + "type": "component", + "repeatable": false, + "component": "shared.empty" + }, + "style": { + "type": "component", + "repeatable": false, + "component": "component.style-section" } } } diff --git a/apps/backend/src/components/block/category-card.json b/apps/backend/src/components/block/category-card.json index 60b026e..a28c2b7 100644 --- a/apps/backend/src/components/block/category-card.json +++ b/apps/backend/src/components/block/category-card.json @@ -22,6 +22,16 @@ "type": "component", "repeatable": true, "component": "config.job-list" + }, + "empty": { + "type": "component", + "repeatable": false, + "component": "shared.empty" + }, + "style": { + "type": "component", + "repeatable": false, + "component": "component.style-section" } } } diff --git a/apps/backend/src/components/block/category-card2.json b/apps/backend/src/components/block/category-card2.json deleted file mode 100644 index e9d3d1d..0000000 --- a/apps/backend/src/components/block/category-card2.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "collectionName": "components_block_category_card2s", - "info": { - "displayName": "CategoryCard2", - "description": "" - }, - "options": {}, - "attributes": { - "categories": { - "type": "relation", - "relation": "oneToMany", - "target": "plugin::metajob-strapi.job-category" - } - } -} diff --git a/apps/backend/src/components/block/category-list.json b/apps/backend/src/components/block/category-list.json new file mode 100644 index 0000000..fc2b5c5 --- /dev/null +++ b/apps/backend/src/components/block/category-list.json @@ -0,0 +1,16 @@ +{ + "collectionName": "components_block_category_lists", + "info": { + "displayName": "CategoryList", + "icon": "apps", + "description": "" + }, + "options": {}, + "attributes": { + "empty": { + "type": "component", + "repeatable": false, + "component": "shared.empty" + } + } +} diff --git a/apps/backend/src/components/block/footer.json b/apps/backend/src/components/block/footer.json new file mode 100644 index 0000000..3f4bb05 --- /dev/null +++ b/apps/backend/src/components/block/footer.json @@ -0,0 +1,74 @@ +{ + "collectionName": "components_block_footers", + "info": { + "displayName": "Footer", + "icon": "server", + "description": "The footer block is used to display the footer of the website." + }, + "options": {}, + "attributes": { + "FooterGrid": { + "type": "integer", + "required": true, + "description": "Number of columns in the footer grid", + "min": 1, + "max": 4 + }, + "FooterOne": { + "type": "component", + "repeatable": false, + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "component": "widget.footer-one" + }, + "FooterTwo": { + "type": "component", + "repeatable": false, + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "component": "widget.footer-two" + }, + "FooterThree": { + "type": "component", + "repeatable": false, + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "component": "widget.footer-two" + }, + "FooterFour": { + "type": "component", + "repeatable": false, + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "component": "widget.footer-two" + }, + "FooterBottom": { + "type": "component", + "repeatable": false, + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "component": "widget.footer-bottom" + }, + "copyright": { + "type": "boolean", + "required": true, + "description": "Display the copyright", + "default": true + } + } +} diff --git a/apps/backend/src/components/block/job-card.json b/apps/backend/src/components/block/job-card.json index 2724159..14465eb 100644 --- a/apps/backend/src/components/block/job-card.json +++ b/apps/backend/src/components/block/job-card.json @@ -22,6 +22,16 @@ "type": "component", "repeatable": true, "component": "config.job-list" + }, + "empty": { + "type": "component", + "repeatable": false, + "component": "shared.empty" + }, + "style": { + "type": "component", + "repeatable": false, + "component": "component.style-section" } } } diff --git a/apps/backend/src/components/block/manage-resume.json b/apps/backend/src/components/block/manage-resume.json new file mode 100644 index 0000000..245f87b --- /dev/null +++ b/apps/backend/src/components/block/manage-resume.json @@ -0,0 +1,13 @@ +{ + "collectionName": "components_block_manage_resumes", + "info": { + "displayName": "Manage Resume", + "icon": "arrowRight" + }, + "options": {}, + "attributes": { + "title": { + "type": "string" + } + } +} diff --git a/apps/backend/src/components/block/private-header.json b/apps/backend/src/components/block/private-header.json new file mode 100644 index 0000000..1764e39 --- /dev/null +++ b/apps/backend/src/components/block/private-header.json @@ -0,0 +1,41 @@ +{ + "collectionName": "components_block_private_headers", + "info": { + "displayName": "Private Header", + "icon": "server", + "description": "" + }, + "options": {}, + "attributes": { + "light_logo": { + "type": "component", + "repeatable": false, + "component": "header.logo" + }, + "dark_logo": { + "type": "component", + "repeatable": false, + "component": "header.logo" + }, + "userMenu": { + "type": "component", + "repeatable": true, + "component": "component.link" + }, + "langMenu": { + "type": "component", + "repeatable": true, + "component": "component.link" + }, + "dark_mode": { + "type": "boolean", + "default": true, + "required": true + }, + "notification": { + "type": "boolean", + "default": true, + "required": true + } + } +} diff --git a/apps/backend/src/components/block/public-header.json b/apps/backend/src/components/block/public-header.json new file mode 100644 index 0000000..a7b5bfd --- /dev/null +++ b/apps/backend/src/components/block/public-header.json @@ -0,0 +1,66 @@ +{ + "collectionName": "components_block_headers", + "info": { + "displayName": "Public Header", + "icon": "layout", + "description": "The header block is used to display the header of the website." + }, + "options": {}, + "attributes": { + "light_logo": { + "type": "component", + "repeatable": false, + "component": "header.logo" + }, + "dark_logo": { + "type": "component", + "repeatable": false, + "component": "header.logo" + }, + "dark_mode": { + "type": "boolean", + "default": true, + "required": true + }, + "notification": { + "type": "boolean", + "default": true, + "required": true + }, + "MainMenu": { + "type": "component", + "repeatable": true, + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "component": "component.menu" + }, + "langMenu": { + "type": "component", + "repeatable": true, + "pluginOptions": { + "i18n": { + "localized": false + } + }, + "component": "component.link" + }, + "userMenu": { + "type": "component", + "repeatable": true, + "component": "component.link" + }, + "Button": { + "type": "component", + "repeatable": true, + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "component": "component.link" + } + } +} diff --git a/apps/backend/src/components/block/review-card.json b/apps/backend/src/components/block/review-card.json index c131667..f8925c7 100644 --- a/apps/backend/src/components/block/review-card.json +++ b/apps/backend/src/components/block/review-card.json @@ -16,6 +16,16 @@ "type": "component", "repeatable": true, "component": "config.job-list" + }, + "empty": { + "type": "component", + "repeatable": false, + "component": "shared.empty" + }, + "style": { + "type": "component", + "repeatable": false, + "component": "component.style-section" } } } diff --git a/apps/backend/src/components/config/single-page.json b/apps/backend/src/components/config/single-page.json new file mode 100644 index 0000000..310423e --- /dev/null +++ b/apps/backend/src/components/config/single-page.json @@ -0,0 +1,21 @@ +{ + "collectionName": "components_config_single_pages", + "info": { + "displayName": "singlePage", + "icon": "arrowRight", + "description": "" + }, + "options": {}, + "attributes": { + "slug": { + "type": "string" + }, + "collectionModel": { + "type": "string", + "default": "api/posts" + }, + "singelModel": { + "type": "string" + } + } +} diff --git a/apps/backend/src/components/forms/candidate-filter.json b/apps/backend/src/components/forms/candidate-filter.json index af946ad..053ffcc 100644 --- a/apps/backend/src/components/forms/candidate-filter.json +++ b/apps/backend/src/components/forms/candidate-filter.json @@ -14,11 +14,6 @@ "repeatable": false, "component": "forms.seaech-form" }, - "categories": { - "type": "relation", - "relation": "oneToMany", - "target": "api::category.category" - }, "rate": { "type": "customField", "options": [ @@ -35,6 +30,11 @@ "type": "component", "repeatable": false, "component": "component.link" + }, + "categories": { + "type": "component", + "repeatable": false, + "component": "config.job-list" } } } diff --git a/apps/backend/src/components/forms/job-filter.json b/apps/backend/src/components/forms/job-filter.json index 482328b..d225c65 100644 --- a/apps/backend/src/components/forms/job-filter.json +++ b/apps/backend/src/components/forms/job-filter.json @@ -6,11 +6,6 @@ }, "options": {}, "attributes": { - "categories": { - "type": "relation", - "relation": "oneToMany", - "target": "plugin::metajob-strapi.job-category" - }, "job_type": { "type": "customField", "options": [ @@ -49,6 +44,11 @@ "type": "component", "repeatable": false, "component": "forms.seaech-form" + }, + "categories": { + "type": "component", + "repeatable": false, + "component": "config.job-list" } } } diff --git a/apps/backend/src/components/forms/seaech-form.json b/apps/backend/src/components/forms/seaech-form.json index efc58a3..b3c126f 100644 --- a/apps/backend/src/components/forms/seaech-form.json +++ b/apps/backend/src/components/forms/seaech-form.json @@ -21,10 +21,8 @@ "link": { "type": "string" }, - "categories": { - "type": "relation", - "relation": "oneToMany", - "target": "api::category.category" + "searchByCategory": { + "type": "string" } } } diff --git a/apps/backend/src/components/header/logo.json b/apps/backend/src/components/header/logo.json index aa404f0..abed036 100644 --- a/apps/backend/src/components/header/logo.json +++ b/apps/backend/src/components/header/logo.json @@ -17,6 +17,24 @@ }, "link": { "type": "string" + }, + "xs_width": { + "type": "integer", + "required": true, + "default": 150, + "min": 0 + }, + "sm_width": { + "type": "integer", + "required": true, + "min": 0, + "default": 160 + }, + "md_width": { + "type": "integer", + "default": 175, + "required": true, + "min": 0 } } } diff --git a/apps/backend/src/components/shared/share-menu.json b/apps/backend/src/components/shared/share-menu.json new file mode 100644 index 0000000..fcfa4b8 --- /dev/null +++ b/apps/backend/src/components/shared/share-menu.json @@ -0,0 +1,26 @@ +{ + "collectionName": "components_shared_share_menus", + "info": { + "displayName": "Share Menu", + "icon": "server" + }, + "options": {}, + "attributes": { + "role": { + "type": "enumeration", + "enum": ["candidate", "employer"], + "required": true, + "default": "candidate" + }, + "menus": { + "type": "component", + "repeatable": true, + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "component": "component.menu" + } + } +} diff --git a/apps/backend/src/components/single-type/blog-details.json b/apps/backend/src/components/single-type/blog-details.json new file mode 100644 index 0000000..8d70961 --- /dev/null +++ b/apps/backend/src/components/single-type/blog-details.json @@ -0,0 +1,28 @@ +{ + "collectionName": "components_single_type_blog_details", + "info": { + "displayName": "Blog Details", + "icon": "arrowRight", + "description": "" + }, + "options": {}, + "attributes": { + "title": { + "type": "string" + }, + "style": { + "type": "component", + "repeatable": false, + "component": "component.style-section" + }, + "sidebar": { + "type": "enumeration", + "enum": [ + "Left Sidebar", + "Right Sidebar", + "Both Sidebar", + "No Sidebar" + ] + } + } +} diff --git a/apps/backend/src/components/single-type/company-deatils.json b/apps/backend/src/components/single-type/company-deatils.json new file mode 100644 index 0000000..20868b0 --- /dev/null +++ b/apps/backend/src/components/single-type/company-deatils.json @@ -0,0 +1,18 @@ +{ + "collectionName": "components_single_type_company_deatils", + "info": { + "displayName": "companyDeatils", + "icon": "arrowRight" + }, + "options": {}, + "attributes": { + "title": { + "type": "string" + }, + "styles": { + "type": "component", + "repeatable": false, + "component": "component.style-section" + } + } +} diff --git a/apps/backend/src/components/single-type/job-details.json b/apps/backend/src/components/single-type/job-details.json new file mode 100644 index 0000000..87758cf --- /dev/null +++ b/apps/backend/src/components/single-type/job-details.json @@ -0,0 +1,19 @@ +{ + "collectionName": "components_single_type_job_details", + "info": { + "displayName": "job Details", + "icon": "arrowRight", + "description": "" + }, + "options": {}, + "attributes": { + "title": { + "type": "string" + }, + "styles": { + "type": "component", + "repeatable": false, + "component": "component.style-section" + } + } +} diff --git a/apps/backend/src/components/single-type/resume-details.json b/apps/backend/src/components/single-type/resume-details.json new file mode 100644 index 0000000..fe3d000 --- /dev/null +++ b/apps/backend/src/components/single-type/resume-details.json @@ -0,0 +1,19 @@ +{ + "collectionName": "components_single_type_resume_details", + "info": { + "displayName": "Resume Details", + "icon": "arrowRight", + "description": "" + }, + "options": {}, + "attributes": { + "title": { + "type": "string" + }, + "styles": { + "type": "component", + "repeatable": false, + "component": "component.style-section" + } + } +} diff --git a/apps/backend/src/components/widget/footer-one.json b/apps/backend/src/components/widget/footer-one.json index 4c53a7d..f69ab58 100644 --- a/apps/backend/src/components/widget/footer-one.json +++ b/apps/backend/src/components/widget/footer-one.json @@ -27,6 +27,13 @@ "type": "component", "repeatable": false, "component": "component.icon-with-label" + }, + "style": { + "type": "component", + "repeatable": false, + "required": true, + "component": "component.style-section", + "min": 1 } } } diff --git a/apps/backend/src/components/widget/footer-top.json b/apps/backend/src/components/widget/footer-top.json new file mode 100644 index 0000000..a30421b --- /dev/null +++ b/apps/backend/src/components/widget/footer-top.json @@ -0,0 +1,32 @@ +{ + "collectionName": "components_widget_footer_tops", + "info": { + "displayName": "FooterTop", + "icon": "server" + }, + "options": {}, + "attributes": { + "light_logo": { + "allowedTypes": [ + "images" + ], + "type": "media", + "multiple": false + }, + "dark_logo": { + "allowedTypes": [ + "images" + ], + "type": "media", + "multiple": false + }, + "title": { + "type": "string" + }, + "search": { + "type": "component", + "repeatable": false, + "component": "forms.seaech-form" + } + } +} diff --git a/apps/backend/src/components/widget/footer-two.json b/apps/backend/src/components/widget/footer-two.json index 446aa17..02082c2 100644 --- a/apps/backend/src/components/widget/footer-two.json +++ b/apps/backend/src/components/widget/footer-two.json @@ -14,6 +14,13 @@ "type": "component", "repeatable": true, "component": "component.link" + }, + "style": { + "type": "component", + "repeatable": false, + "required": true, + "component": "component.style-section", + "min": 1 } } } diff --git a/apps/backend/src/extensions/metajob-strapi/content-types/company-detail/schema.json b/apps/backend/src/extensions/metajob-strapi/content-types/company-detail/schema.json new file mode 100644 index 0000000..af805a9 --- /dev/null +++ b/apps/backend/src/extensions/metajob-strapi/content-types/company-detail/schema.json @@ -0,0 +1,47 @@ +{ + "kind": "singleType", + "collectionName": "company_details", + "info": { + "singularName": "company-detail", + "pluralName": "company-details", + "displayName": "Company Details", + "description": "" + }, + "options": { + "draftAndPublish": true + }, + "attributes": { + "title": { + "type": "string" + }, + "blocks": { + "type": "dynamiczone", + "components": [ + "shared.spacing", + "shared.empty", + "component.page-title", + "single-type.company-deatils" + ] + }, + "sidebar": { + "type": "enumeration", + "enum": [ + "Left Sidebar", + "Right Sidebar", + "No Sidebar", + "Both Sidebar" + ], + "default": "Right Sidebar", + "required": true + }, + "leftSidebar": { + "type": "dynamiczone", + "components": [ + "component.page-title" + ] + }, + "openJobs": { + "type": "boolean" + } + } +} diff --git a/apps/backend/src/extensions/metajob-strapi/content-types/job-detail/schema.json b/apps/backend/src/extensions/metajob-strapi/content-types/job-detail/schema.json new file mode 100644 index 0000000..73a8879 --- /dev/null +++ b/apps/backend/src/extensions/metajob-strapi/content-types/job-detail/schema.json @@ -0,0 +1,49 @@ +{ + "kind": "singleType", + "collectionName": "job_details", + "info": { + "singularName": "job-detail", + "pluralName": "job-details", + "displayName": "Job Details", + "description": "" + }, + "options": { + "draftAndPublish": true + }, + "attributes": { + "title": { + "type": "string" + }, + "blocks": { + "type": "dynamiczone", + "components": [ + "shared.spacing", + "shared.empty", + "component.page-title", + "single-type.job-details" + ], + "required": true, + "min": 1 + }, + "sidebar": { + "type": "enumeration", + "enum": [ + "Left Sidebar", + "Right Sidebar", + "No Sidebar", + "Both Sidebar" + ], + "default": "Right Sidebar", + "required": true + }, + "leftSidebar": { + "type": "dynamiczone", + "components": [ + "component.page-title" + ] + }, + "relatedLists": { + "type": "boolean" + } + } +} diff --git a/apps/backend/src/api/list-detail/content-types/list-detail/schema.json b/apps/backend/src/extensions/metajob-strapi/content-types/resume-detail/schema.json similarity index 76% rename from apps/backend/src/api/list-detail/content-types/list-detail/schema.json rename to apps/backend/src/extensions/metajob-strapi/content-types/resume-detail/schema.json index 6abc94a..1da1ec5 100644 --- a/apps/backend/src/api/list-detail/content-types/list-detail/schema.json +++ b/apps/backend/src/extensions/metajob-strapi/content-types/resume-detail/schema.json @@ -1,16 +1,15 @@ { "kind": "singleType", - "collectionName": "list_details", + "collectionName": "resume_details", "info": { - "singularName": "list-detail", - "pluralName": "list-details", - "displayName": "List Details", + "singularName": "resume-detail", + "pluralName": "resume-details", + "displayName": "Resume Details", "description": "" }, "options": { "draftAndPublish": true }, - "pluginOptions": {}, "attributes": { "title": { "type": "string" @@ -20,7 +19,8 @@ "components": [ "shared.spacing", "shared.empty", - "component.page-title" + "component.page-title", + "single-type.resume-details" ] }, "sidebar": { diff --git a/apps/backend/types/generated/components.d.ts b/apps/backend/types/generated/components.d.ts index 1ccafaa..7d36a5f 100644 --- a/apps/backend/types/generated/components.d.ts +++ b/apps/backend/types/generated/components.d.ts @@ -12,7 +12,8 @@ export interface BannerBannerOne extends Schema.Component { description: Attribute.Text; search: Attribute.Component<'forms.seaech-form'>; image: Attribute.Media; - style: Attribute.JSON; + style: Attribute.Component<'component.style-section'>; + empty: Attribute.Component<'shared.empty'>; }; } @@ -28,6 +29,8 @@ export interface BlockBlogCard extends Schema.Component { description: Attribute.Text; button: Attribute.Component<'component.link'>; posts: Attribute.Relation<'block.blog-card', 'oneToMany', 'api::post.post'>; + empty: Attribute.Component<'shared.empty'>; + style: Attribute.Component<'component.style-section'>; }; } @@ -63,21 +66,20 @@ export interface BlockCategoryCard extends Schema.Component { description: Attribute.Text; button: Attribute.Component<'component.link'>; categories: Attribute.Component<'config.job-list', true>; + empty: Attribute.Component<'shared.empty'>; + style: Attribute.Component<'component.style-section'>; }; } -export interface BlockCategoryCard2 extends Schema.Component { - collectionName: 'components_block_category_card2s'; +export interface BlockCategoryList extends Schema.Component { + collectionName: 'components_block_category_lists'; info: { - displayName: 'CategoryCard2'; + displayName: 'CategoryList'; + icon: 'apps'; description: ''; }; attributes: { - categories: Attribute.Relation< - 'block.category-card2', - 'oneToMany', - 'plugin::metajob-strapi.job-category' - >; + empty: Attribute.Component<'shared.empty'>; }; } @@ -96,6 +98,56 @@ export interface BlockContact extends Schema.Component { }; } +export interface BlockFooter extends Schema.Component { + collectionName: 'components_block_footers'; + info: { + displayName: 'Footer'; + icon: 'server'; + description: 'The footer block is used to display the footer of the website.'; + }; + attributes: { + FooterGrid: Attribute.Integer & + Attribute.Required & + Attribute.SetMinMax<{ + min: 1; + max: 4; + }>; + FooterOne: Attribute.Component<'widget.footer-one'> & + Attribute.SetPluginOptions<{ + i18n: { + localized: true; + }; + }>; + FooterTwo: Attribute.Component<'widget.footer-two'> & + Attribute.SetPluginOptions<{ + i18n: { + localized: true; + }; + }>; + FooterThree: Attribute.Component<'widget.footer-two'> & + Attribute.SetPluginOptions<{ + i18n: { + localized: true; + }; + }>; + FooterFour: Attribute.Component<'widget.footer-two'> & + Attribute.SetPluginOptions<{ + i18n: { + localized: true; + }; + }>; + FooterBottom: Attribute.Component<'widget.footer-bottom'> & + Attribute.SetPluginOptions<{ + i18n: { + localized: true; + }; + }>; + copyright: Attribute.Boolean & + Attribute.Required & + Attribute.DefaultTo; + }; +} + export interface BlockJobCard extends Schema.Component { collectionName: 'components_block_job_cards'; info: { @@ -107,6 +159,8 @@ export interface BlockJobCard extends Schema.Component { description: Attribute.String; button: Attribute.Component<'component.link'>; jobs: Attribute.Component<'config.job-list', true>; + empty: Attribute.Component<'shared.empty'>; + style: Attribute.Component<'component.style-section'>; }; } @@ -205,6 +259,17 @@ export interface BlockManageLists extends Schema.Component { }; } +export interface BlockManageResume extends Schema.Component { + collectionName: 'components_block_manage_resumes'; + info: { + displayName: 'Manage Resume'; + icon: 'arrowRight'; + }; + attributes: { + title: Attribute.String; + }; +} + export interface BlockPortfolio extends Schema.Component { collectionName: 'components_block_portfolios'; info: { @@ -219,6 +284,27 @@ export interface BlockPortfolio extends Schema.Component { }; } +export interface BlockPrivateHeader extends Schema.Component { + collectionName: 'components_block_private_headers'; + info: { + displayName: 'Private Header'; + icon: 'server'; + description: ''; + }; + attributes: { + light_logo: Attribute.Component<'header.logo'>; + dark_logo: Attribute.Component<'header.logo'>; + userMenu: Attribute.Component<'component.link', true>; + langMenu: Attribute.Component<'component.link', true>; + dark_mode: Attribute.Boolean & + Attribute.Required & + Attribute.DefaultTo; + notification: Attribute.Boolean & + Attribute.Required & + Attribute.DefaultTo; + }; +} + export interface BlockProfile extends Schema.Component { collectionName: 'components_block_profiles'; info: { @@ -229,6 +315,44 @@ export interface BlockProfile extends Schema.Component { attributes: {}; } +export interface BlockPublicHeader extends Schema.Component { + collectionName: 'components_block_headers'; + info: { + displayName: 'Public Header'; + icon: 'layout'; + description: 'The header block is used to display the header of the website.'; + }; + attributes: { + light_logo: Attribute.Component<'header.logo'>; + dark_logo: Attribute.Component<'header.logo'>; + dark_mode: Attribute.Boolean & + Attribute.Required & + Attribute.DefaultTo; + notification: Attribute.Boolean & + Attribute.Required & + Attribute.DefaultTo; + MainMenu: Attribute.Component<'component.menu', true> & + Attribute.SetPluginOptions<{ + i18n: { + localized: true; + }; + }>; + langMenu: Attribute.Component<'component.link', true> & + Attribute.SetPluginOptions<{ + i18n: { + localized: false; + }; + }>; + userMenu: Attribute.Component<'component.link', true>; + Button: Attribute.Component<'component.link', true> & + Attribute.SetPluginOptions<{ + i18n: { + localized: true; + }; + }>; + }; +} + export interface BlockRecentActivities extends Schema.Component { collectionName: 'components_block_recent_activities'; info: { @@ -254,6 +378,8 @@ export interface BlockReviewCard extends Schema.Component { title: Attribute.String; description: Attribute.String; reviews: Attribute.Component<'config.job-list', true>; + empty: Attribute.Component<'shared.empty'>; + style: Attribute.Component<'component.style-section'>; }; } @@ -633,6 +759,20 @@ export interface ConfigRole extends Schema.Component { }; } +export interface ConfigSinglePage extends Schema.Component { + collectionName: 'components_config_single_pages'; + info: { + displayName: 'singlePage'; + icon: 'arrowRight'; + description: ''; + }; + attributes: { + slug: Attribute.String; + collectionModel: Attribute.String & Attribute.DefaultTo<'api/posts'>; + singelModel: Attribute.String; + }; +} + export interface ConfigTableHead extends Schema.Component { collectionName: 'components_config_table_heads'; info: { @@ -653,17 +793,13 @@ export interface FormsCandidateFilter extends Schema.Component { attributes: { showFilter: Attribute.Boolean; search: Attribute.Component<'forms.seaech-form'>; - categories: Attribute.Relation< - 'forms.candidate-filter', - 'oneToMany', - 'api::category.category' - >; rate: Attribute.JSON & Attribute.CustomField< 'plugin::multi-select.multi-select', ['Rate', '10k', '20k', '30k', '40k', '50k'] >; button: Attribute.Component<'component.link'>; + categories: Attribute.Component<'config.job-list'>; }; } @@ -948,11 +1084,6 @@ export interface FormsJobFilter extends Schema.Component { description: ''; }; attributes: { - categories: Attribute.Relation< - 'forms.job-filter', - 'oneToMany', - 'plugin::metajob-strapi.job-category' - >; job_type: Attribute.JSON & Attribute.CustomField< 'plugin::multi-select.multi-select', @@ -980,6 +1111,7 @@ export interface FormsJobFilter extends Schema.Component { description: Attribute.Text; button: Attribute.Component<'component.link'>; search: Attribute.Component<'forms.seaech-form'>; + categories: Attribute.Component<'config.job-list'>; }; } @@ -1020,11 +1152,7 @@ export interface FormsSeaechForm extends Schema.Component { searchByLocation: Attribute.String; button: Attribute.String; link: Attribute.String; - categories: Attribute.Relation< - 'forms.seaech-form', - 'oneToMany', - 'api::category.category' - >; + searchByCategory: Attribute.String; }; } @@ -1136,6 +1264,24 @@ export interface HeaderLogo extends Schema.Component { attributes: { logo: Attribute.Media; link: Attribute.String; + xs_width: Attribute.Integer & + Attribute.Required & + Attribute.SetMinMax<{ + min: 0; + }> & + Attribute.DefaultTo<150>; + sm_width: Attribute.Integer & + Attribute.Required & + Attribute.SetMinMax<{ + min: 0; + }> & + Attribute.DefaultTo<160>; + md_width: Attribute.Integer & + Attribute.Required & + Attribute.SetMinMax<{ + min: 0; + }> & + Attribute.DefaultTo<175>; }; } @@ -1229,6 +1375,25 @@ export interface SharedSeo extends Schema.Component { }; } +export interface SharedShareMenu extends Schema.Component { + collectionName: 'components_shared_share_menus'; + info: { + displayName: 'Share Menu'; + icon: 'server'; + }; + attributes: { + role: Attribute.Enumeration<['candidate', 'employer']> & + Attribute.Required & + Attribute.DefaultTo<'candidate'>; + menus: Attribute.Component<'component.menu', true> & + Attribute.SetPluginOptions<{ + i18n: { + localized: true; + }; + }>; + }; +} + export interface SharedSocialMedias extends Schema.Component { collectionName: 'components_shared_social_medias'; info: { @@ -1277,6 +1442,60 @@ export interface SharedSpacing extends Schema.Component { }; } +export interface SingleTypeBlogDetails extends Schema.Component { + collectionName: 'components_single_type_blog_details'; + info: { + displayName: 'Blog Details'; + icon: 'arrowRight'; + description: ''; + }; + attributes: { + title: Attribute.String; + style: Attribute.Component<'component.style-section'>; + sidebar: Attribute.Enumeration< + ['Left Sidebar', 'Right Sidebar', 'Both Sidebar', 'No Sidebar'] + >; + }; +} + +export interface SingleTypeCompanyDeatils extends Schema.Component { + collectionName: 'components_single_type_company_deatils'; + info: { + displayName: 'companyDeatils'; + icon: 'arrowRight'; + }; + attributes: { + title: Attribute.String; + styles: Attribute.Component<'component.style-section'>; + }; +} + +export interface SingleTypeJobDetails extends Schema.Component { + collectionName: 'components_single_type_job_details'; + info: { + displayName: 'job Details'; + icon: 'arrowRight'; + description: ''; + }; + attributes: { + title: Attribute.String; + styles: Attribute.Component<'component.style-section'>; + }; +} + +export interface SingleTypeResumeDetails extends Schema.Component { + collectionName: 'components_single_type_resume_details'; + info: { + displayName: 'Resume Details'; + icon: 'arrowRight'; + description: ''; + }; + attributes: { + title: Attribute.String; + styles: Attribute.Component<'component.style-section'>; + }; +} + export interface TableAppliedJobs extends Schema.Component { collectionName: 'components_table_applied_jobs'; info: { @@ -1458,6 +1677,11 @@ export interface WidgetFooterOne extends Schema.Component { location: Attribute.Component<'component.icon-with-label'>; phone: Attribute.Component<'component.icon-with-label'>; email: Attribute.Component<'component.icon-with-label'>; + style: Attribute.Component<'component.style-section'> & + Attribute.Required & + Attribute.SetMinMax<{ + min: 1; + }>; }; } @@ -1474,6 +1698,20 @@ export interface WidgetFooterSearch extends Schema.Component { }; } +export interface WidgetFooterTop extends Schema.Component { + collectionName: 'components_widget_footer_tops'; + info: { + displayName: 'FooterTop'; + icon: 'server'; + }; + attributes: { + light_logo: Attribute.Media; + dark_logo: Attribute.Media; + title: Attribute.String; + search: Attribute.Component<'forms.seaech-form'>; + }; +} + export interface WidgetFooterTwo extends Schema.Component { collectionName: 'components_widget_footer_twos'; info: { @@ -1484,6 +1722,11 @@ export interface WidgetFooterTwo extends Schema.Component { attributes: { title: Attribute.String; FooterMenu: Attribute.Component<'component.link', true>; + style: Attribute.Component<'component.style-section'> & + Attribute.Required & + Attribute.SetMinMax<{ + min: 1; + }>; }; } @@ -1545,15 +1788,19 @@ declare module '@strapi/types' { 'block.blog-card': BlockBlogCard; 'block.bookmark-list': BlockBookmarkList; 'block.category-card': BlockCategoryCard; - 'block.category-card2': BlockCategoryCard2; + 'block.category-list': BlockCategoryList; 'block.contact': BlockContact; + 'block.footer': BlockFooter; 'block.job-card': BlockJobCard; 'block.latest-applied': BlockLatestApplied; 'block.location-card': BlockLocationCard; 'block.manage-companies': BlockManageCompanies; 'block.manage-lists': BlockManageLists; + 'block.manage-resume': BlockManageResume; 'block.portfolio': BlockPortfolio; + 'block.private-header': BlockPrivateHeader; 'block.profile': BlockProfile; + 'block.public-header': BlockPublicHeader; 'block.recent-activities': BlockRecentActivities; 'block.review-card': BlockReviewCard; 'component.experience': ComponentExperience; @@ -1577,6 +1824,7 @@ declare module '@strapi/types' { 'config.message': ConfigMessage; 'config.recent-jobs-header': ConfigRecentJobsHeader; 'config.role': ConfigRole; + 'config.single-page': ConfigSinglePage; 'config.table-head': ConfigTableHead; 'forms.candidate-filter': FormsCandidateFilter; 'forms.company-filter': FormsCompanyFilter; @@ -1598,8 +1846,13 @@ declare module '@strapi/types' { 'shared.empty': SharedEmpty; 'shared.meta-social': SharedMetaSocial; 'shared.seo': SharedSeo; + 'shared.share-menu': SharedShareMenu; 'shared.social-medias': SharedSocialMedias; 'shared.spacing': SharedSpacing; + 'single-type.blog-details': SingleTypeBlogDetails; + 'single-type.company-deatils': SingleTypeCompanyDeatils; + 'single-type.job-details': SingleTypeJobDetails; + 'single-type.resume-details': SingleTypeResumeDetails; 'table.applied-jobs': TableAppliedJobs; 'table.bookmark': TableBookmark; 'table.meta': TableMeta; @@ -1614,6 +1867,7 @@ declare module '@strapi/types' { 'widget.footer-bottom': WidgetFooterBottom; 'widget.footer-one': WidgetFooterOne; 'widget.footer-search': WidgetFooterSearch; + 'widget.footer-top': WidgetFooterTop; 'widget.footer-two': WidgetFooterTwo; 'widget.matched-lists': WidgetMatchedLists; 'widget.open-list': WidgetOpenList; diff --git a/apps/backend/types/generated/contentTypes.d.ts b/apps/backend/types/generated/contentTypes.d.ts index 6ca8ffe..f1e0b5d 100644 --- a/apps/backend/types/generated/contentTypes.d.ts +++ b/apps/backend/types/generated/contentTypes.d.ts @@ -652,687 +652,6 @@ export interface PluginUsersPermissionsUser extends Schema.CollectionType { }; } -export interface PluginMetajobStrapiJob extends Schema.CollectionType { - collectionName: 'jobs'; - info: { - singularName: 'job'; - pluralName: 'jobs'; - displayName: 'Jobs'; - description: ''; - }; - options: { - draftAndPublish: true; - }; - attributes: { - title: Attribute.String & Attribute.Required; - startDate: Attribute.Date & Attribute.Required; - price: Attribute.Decimal & Attribute.Required; - description: Attribute.RichText; - category: Attribute.Relation< - 'plugin::metajob-strapi.job', - 'oneToOne', - 'plugin::metajob-strapi.job-category' - >; - type: Attribute.JSON & - Attribute.CustomField< - 'plugin::multi-select.multi-select', - ['Full Time', 'Part Time', 'Contract Base', 'Freelance', 'Remote'] - >; - vacancy: Attribute.Integer; - slug: Attribute.UID<'plugin::metajob-strapi.job', 'title'> & - Attribute.Required; - company: Attribute.Relation< - 'plugin::metajob-strapi.job', - 'oneToOne', - 'plugin::metajob-strapi.company' - >; - status: Attribute.Enumeration<['open', 'closed', 'draft']> & - Attribute.Required & - Attribute.DefaultTo<'draft'>; - endDate: Attribute.Date & Attribute.Required; - owner: Attribute.Relation< - 'plugin::metajob-strapi.job', - 'oneToOne', - 'plugin::users-permissions.user' - >; - location: Attribute.JSON & - Attribute.CustomField<'plugin::google-maps.location-picker'>; - tags: Attribute.Relation< - 'plugin::metajob-strapi.job', - 'oneToMany', - 'api::tag.tag' - >; - seo: Attribute.Component<'shared.seo'>; - createdAt: Attribute.DateTime; - updatedAt: Attribute.DateTime; - publishedAt: Attribute.DateTime; - createdBy: Attribute.Relation< - 'plugin::metajob-strapi.job', - 'oneToOne', - 'admin::user' - > & - Attribute.Private; - updatedBy: Attribute.Relation< - 'plugin::metajob-strapi.job', - 'oneToOne', - 'admin::user' - > & - Attribute.Private; - }; -} - -export interface PluginMetajobStrapiBookmark extends Schema.CollectionType { - collectionName: 'bookmarks'; - info: { - singularName: 'bookmark'; - pluralName: 'bookmarks'; - displayName: 'Bookmark'; - description: ''; - }; - options: { - draftAndPublish: true; - }; - attributes: { - owner: Attribute.Relation< - 'plugin::metajob-strapi.bookmark', - 'oneToOne', - 'plugin::users-permissions.user' - >; - type: Attribute.Enumeration<['resume', 'job', 'company']> & - Attribute.Required & - Attribute.DefaultTo<'resume'>; - resume: Attribute.Relation< - 'plugin::metajob-strapi.bookmark', - 'oneToOne', - 'plugin::metajob-strapi.resume' - >; - note: Attribute.Text; - company: Attribute.Relation< - 'plugin::metajob-strapi.bookmark', - 'oneToOne', - 'plugin::metajob-strapi.company' - >; - job: Attribute.Relation< - 'plugin::metajob-strapi.bookmark', - 'oneToOne', - 'plugin::metajob-strapi.job' - >; - createdAt: Attribute.DateTime; - updatedAt: Attribute.DateTime; - publishedAt: Attribute.DateTime; - createdBy: Attribute.Relation< - 'plugin::metajob-strapi.bookmark', - 'oneToOne', - 'admin::user' - > & - Attribute.Private; - updatedBy: Attribute.Relation< - 'plugin::metajob-strapi.bookmark', - 'oneToOne', - 'admin::user' - > & - Attribute.Private; - }; -} - -export interface PluginMetajobStrapiChat extends Schema.CollectionType { - collectionName: 'chats'; - info: { - singularName: 'chat'; - pluralName: 'chats'; - displayName: 'Chat'; - description: ''; - }; - options: { - draftAndPublish: true; - }; - attributes: { - sender: Attribute.Relation< - 'plugin::metajob-strapi.chat', - 'oneToOne', - 'plugin::users-permissions.user' - >; - receiver: Attribute.Relation< - 'plugin::metajob-strapi.chat', - 'oneToOne', - 'plugin::users-permissions.user' - >; - chat_blocked: Attribute.Boolean & - Attribute.Required & - Attribute.DefaultTo; - job: Attribute.Relation< - 'plugin::metajob-strapi.chat', - 'oneToOne', - 'plugin::metajob-strapi.job' - >; - createdAt: Attribute.DateTime; - updatedAt: Attribute.DateTime; - publishedAt: Attribute.DateTime; - createdBy: Attribute.Relation< - 'plugin::metajob-strapi.chat', - 'oneToOne', - 'admin::user' - > & - Attribute.Private; - updatedBy: Attribute.Relation< - 'plugin::metajob-strapi.chat', - 'oneToOne', - 'admin::user' - > & - Attribute.Private; - }; -} - -export interface PluginMetajobStrapiMessage extends Schema.CollectionType { - collectionName: 'messages'; - info: { - singularName: 'message'; - pluralName: 'messages'; - displayName: 'Messages'; - description: ''; - }; - options: { - draftAndPublish: true; - }; - attributes: { - sender: Attribute.Relation< - 'plugin::metajob-strapi.message', - 'oneToOne', - 'plugin::users-permissions.user' - >; - receiver: Attribute.Relation< - 'plugin::metajob-strapi.message', - 'oneToOne', - 'plugin::users-permissions.user' - >; - message: Attribute.RichText & Attribute.Required; - medias: Attribute.Media; - read: Attribute.Boolean & Attribute.Required & Attribute.DefaultTo; - send_notification: Attribute.Boolean & - Attribute.Required & - Attribute.DefaultTo; - chat_session: Attribute.Relation< - 'plugin::metajob-strapi.message', - 'oneToOne', - 'plugin::metajob-strapi.chat' - >; - createdAt: Attribute.DateTime; - updatedAt: Attribute.DateTime; - publishedAt: Attribute.DateTime; - createdBy: Attribute.Relation< - 'plugin::metajob-strapi.message', - 'oneToOne', - 'admin::user' - > & - Attribute.Private; - updatedBy: Attribute.Relation< - 'plugin::metajob-strapi.message', - 'oneToOne', - 'admin::user' - > & - Attribute.Private; - }; -} - -export interface PluginMetajobStrapiCompany extends Schema.CollectionType { - collectionName: 'companies'; - info: { - singularName: 'company'; - pluralName: 'companies'; - displayName: 'Companies'; - description: ''; - }; - options: { - draftAndPublish: true; - }; - attributes: { - name: Attribute.String & Attribute.Required; - tagline: Attribute.String; - email: Attribute.String; - phone: Attribute.String; - website: Attribute.String; - company_size: Attribute.String; - revenue: Attribute.String; - logo: Attribute.Media; - industry: Attribute.Relation< - 'plugin::metajob-strapi.company', - 'oneToOne', - 'plugin::metajob-strapi.job-category' - >; - slug: Attribute.UID & Attribute.Required; - owner: Attribute.Relation< - 'plugin::metajob-strapi.company', - 'oneToOne', - 'plugin::users-permissions.user' - >; - location: Attribute.JSON & - Attribute.CustomField<'plugin::google-maps.location-picker'>; - social_links: Attribute.Component<'shared.social-medias', true>; - about: Attribute.RichText; - avg_price: Attribute.String; - seo: Attribute.Component<'shared.seo'>; - createdAt: Attribute.DateTime; - updatedAt: Attribute.DateTime; - publishedAt: Attribute.DateTime; - createdBy: Attribute.Relation< - 'plugin::metajob-strapi.company', - 'oneToOne', - 'admin::user' - > & - Attribute.Private; - updatedBy: Attribute.Relation< - 'plugin::metajob-strapi.company', - 'oneToOne', - 'admin::user' - > & - Attribute.Private; - }; -} - -export interface PluginMetajobStrapiJobDetail extends Schema.SingleType { - collectionName: 'job_details'; - info: { - singularName: 'job-detail'; - pluralName: 'job-details'; - displayName: 'Job Details'; - }; - options: { - draftAndPublish: true; - comment: ''; - }; - attributes: { - title: Attribute.String; - blocks: Attribute.DynamicZone< - ['shared.spacing', 'shared.empty', 'component.page-title'] - >; - sidebar: Attribute.Enumeration< - ['Left Sidebar', 'Right Sidebar', 'No Sidebar', 'Both Sidebar'] - > & - Attribute.Required & - Attribute.DefaultTo<'Right Sidebar'>; - leftSidebar: Attribute.DynamicZone<['component.page-title']>; - relatedLists: Attribute.Boolean; - createdAt: Attribute.DateTime; - updatedAt: Attribute.DateTime; - publishedAt: Attribute.DateTime; - createdBy: Attribute.Relation< - 'plugin::metajob-strapi.job-detail', - 'oneToOne', - 'admin::user' - > & - Attribute.Private; - updatedBy: Attribute.Relation< - 'plugin::metajob-strapi.job-detail', - 'oneToOne', - 'admin::user' - > & - Attribute.Private; - }; -} - -export interface PluginMetajobStrapiAppliedJob extends Schema.CollectionType { - collectionName: 'applied_jobs'; - info: { - singularName: 'applied-job'; - pluralName: 'applied-jobs'; - displayName: 'Applied Job'; - description: ''; - }; - options: { - draftAndPublish: true; - }; - attributes: { - status: Attribute.Enumeration<['Shortlisted', 'Pending', 'Rejected']>; - owner: Attribute.Relation< - 'plugin::metajob-strapi.applied-job', - 'oneToOne', - 'plugin::users-permissions.user' - >; - job: Attribute.Relation< - 'plugin::metajob-strapi.applied-job', - 'oneToOne', - 'plugin::metajob-strapi.job' - >; - cover_letter: Attribute.RichText; - createdAt: Attribute.DateTime; - updatedAt: Attribute.DateTime; - publishedAt: Attribute.DateTime; - createdBy: Attribute.Relation< - 'plugin::metajob-strapi.applied-job', - 'oneToOne', - 'admin::user' - > & - Attribute.Private; - updatedBy: Attribute.Relation< - 'plugin::metajob-strapi.applied-job', - 'oneToOne', - 'admin::user' - > & - Attribute.Private; - }; -} - -export interface PluginMetajobStrapiResume extends Schema.CollectionType { - collectionName: 'resumes'; - info: { - singularName: 'resume'; - pluralName: 'resumes'; - displayName: 'Resume'; - description: ''; - }; - options: { - draftAndPublish: true; - }; - attributes: { - education: Attribute.Component<'component.experience', true>; - experience: Attribute.Component<'component.experience', true>; - description: Attribute.RichText; - user: Attribute.Relation< - 'plugin::metajob-strapi.resume', - 'oneToOne', - 'plugin::users-permissions.user' - >; - portfolio: Attribute.Component<'block.portfolio', true>; - contact: Attribute.Component<'block.contact'>; - name: Attribute.String; - tagline: Attribute.Text; - about: Attribute.RichText; - showProfile: Attribute.Enumeration<['Show', 'Hide']>; - category: Attribute.Relation< - 'plugin::metajob-strapi.resume', - 'oneToOne', - 'plugin::metajob-strapi.job-category' - >; - salary: Attribute.BigInteger; - salaryType: Attribute.Enumeration< - [ - 'Monthly', - 'Weekly', - 'Hourly', - 'Daily', - 'Annually', - 'Per Project', - 'Commission-based' - ] - >; - language: Attribute.Enumeration< - [ - 'Arabic', - 'Bengali', - 'Bulgarian', - 'Catalan', - 'Chinese (Simplified)', - 'Chinese (Traditional)', - 'Croatian', - 'Czech', - 'Danish', - 'Dutch', - 'English', - 'Estonian', - 'Filipino', - 'Finnish', - 'French', - 'Galician', - 'Georgian', - 'German', - 'Greek', - 'Gujarati', - 'Hebrew', - 'Hindi', - 'Hungarian', - 'Icelandic', - 'Indonesian', - 'Irish', - 'Italian', - 'Japanese', - 'Javanese', - 'Kannada', - 'Kazakh', - 'Korean', - 'Kurdish (Kurmanji)', - 'Kyrgyz', - 'Lao', - 'Latin', - 'Latvian', - 'Lithuanian', - 'Macedonian', - 'Malay', - 'Malayalam', - 'Maltese', - 'Maori', - 'Marathi', - 'Mongolian', - 'Nepali', - 'Norwegian', - 'Pashto', - 'Persian', - 'Polish', - 'Portuguese', - 'Punjabi', - 'Romanian', - 'Russian', - 'Serbian', - 'Slovak', - 'Slovenian', - 'Somali', - 'Spanish', - 'Sundanese', - 'Swahili', - 'Swedish', - 'Tamil', - 'Telugu', - 'Thai', - 'Turkish', - 'Ukrainian', - 'Urdu', - 'Uzbek', - 'Vietnamese', - 'Welsh', - 'Xhosa', - 'Yiddish', - 'Yoruba', - 'Zulu' - ] - >; - experienceTime: Attribute.Enumeration< - ['Freshers', 'Junior', 'Mid-Level', 'Senior', 'Lead'] - >; - qualification: Attribute.Enumeration< - [ - 'Bachelor\u2019s Degree', - 'Master\u2019s Degree', - 'Doctoral Degree (Ph.D.)', - 'Associate Degree', - 'Diploma', - 'Certificate' - ] - >; - slug: Attribute.UID<'plugin::metajob-strapi.resume', 'name'>; - seo: Attribute.Component<'shared.seo'>; - createdAt: Attribute.DateTime; - updatedAt: Attribute.DateTime; - publishedAt: Attribute.DateTime; - createdBy: Attribute.Relation< - 'plugin::metajob-strapi.resume', - 'oneToOne', - 'admin::user' - > & - Attribute.Private; - updatedBy: Attribute.Relation< - 'plugin::metajob-strapi.resume', - 'oneToOne', - 'admin::user' - > & - Attribute.Private; - }; -} - -export interface PluginMetajobStrapiSkill extends Schema.CollectionType { - collectionName: 'skills'; - info: { - singularName: 'skill'; - pluralName: 'skills'; - displayName: 'Skill'; - }; - options: { - draftAndPublish: true; - comment: ''; - }; - pluginOptions: { - i18n: { - localized: true; - }; - }; - attributes: { - title: Attribute.String; - value: Attribute.UID<'plugin::metajob-strapi.skill', 'title'> & - Attribute.Required; - createdAt: Attribute.DateTime; - updatedAt: Attribute.DateTime; - publishedAt: Attribute.DateTime; - createdBy: Attribute.Relation< - 'plugin::metajob-strapi.skill', - 'oneToOne', - 'admin::user' - > & - Attribute.Private; - updatedBy: Attribute.Relation< - 'plugin::metajob-strapi.skill', - 'oneToOne', - 'admin::user' - > & - Attribute.Private; - localizations: Attribute.Relation< - 'plugin::metajob-strapi.skill', - 'oneToMany', - 'plugin::metajob-strapi.skill' - >; - locale: Attribute.String; - }; -} - -export interface PluginMetajobStrapiJobCategory extends Schema.CollectionType { - collectionName: 'job_categories'; - info: { - singularName: 'job-category'; - pluralName: 'job-categories'; - displayName: 'Job Category'; - }; - options: { - draftAndPublish: true; - comment: ''; - }; - pluginOptions: { - i18n: { - localized: true; - }; - }; - attributes: { - title: Attribute.String & - Attribute.SetPluginOptions<{ - i18n: { - localized: true; - }; - }>; - image: Attribute.Media & - Attribute.SetPluginOptions<{ - i18n: { - localized: true; - }; - }>; - description: Attribute.Text & - Attribute.SetPluginOptions<{ - i18n: { - localized: true; - }; - }>; - link: Attribute.Component<'component.link'> & - Attribute.SetPluginOptions<{ - i18n: { - localized: true; - }; - }>; - slug: Attribute.UID & - Attribute.SetPluginOptions<{ - i18n: { - localized: true; - }; - }>; - seo: Attribute.Component<'shared.seo'> & - Attribute.SetPluginOptions<{ - i18n: { - localized: true; - }; - }>; - createdAt: Attribute.DateTime; - updatedAt: Attribute.DateTime; - publishedAt: Attribute.DateTime; - createdBy: Attribute.Relation< - 'plugin::metajob-strapi.job-category', - 'oneToOne', - 'admin::user' - > & - Attribute.Private; - updatedBy: Attribute.Relation< - 'plugin::metajob-strapi.job-category', - 'oneToOne', - 'admin::user' - > & - Attribute.Private; - localizations: Attribute.Relation< - 'plugin::metajob-strapi.job-category', - 'oneToMany', - 'plugin::metajob-strapi.job-category' - >; - locale: Attribute.String; - }; -} - -export interface PluginMetajobStrapiEmailHistory extends Schema.CollectionType { - collectionName: 'email_histories'; - info: { - singularName: 'email-history'; - pluralName: 'email-histories'; - displayName: 'Email History'; - description: ''; - }; - options: { - draftAndPublish: false; - }; - pluginOptions: { - 'content-manager': { - visible: true; - }; - 'content-type-builder': { - visible: false; - }; - }; - attributes: { - title: Attribute.String; - datetime: Attribute.DateTime; - receiver: Attribute.Email; - owner: Attribute.Relation< - 'plugin::metajob-strapi.email-history', - 'manyToOne', - 'plugin::users-permissions.user' - >; - createdAt: Attribute.DateTime; - updatedAt: Attribute.DateTime; - createdBy: Attribute.Relation< - 'plugin::metajob-strapi.email-history', - 'oneToOne', - 'admin::user' - > & - Attribute.Private; - updatedBy: Attribute.Relation< - 'plugin::metajob-strapi.email-history', - 'oneToOne', - 'admin::user' - > & - Attribute.Private; - }; -} - export interface PluginGoogleMapsConfig extends Schema.SingleType { collectionName: 'google_maps_configs'; info: { @@ -1471,7 +790,7 @@ export interface ApiBlogDetailBlogDetail extends Schema.SingleType { description: ''; }; options: { - draftAndPublish: true; + draftAndPublish: false; }; pluginOptions: { i18n: { @@ -1493,7 +812,9 @@ export interface ApiBlogDetailBlogDetail extends Schema.SingleType { localized: true; }; }>; - blocks: Attribute.DynamicZone<['shared.spacing', 'component.page-title']> & + blocks: Attribute.DynamicZone< + ['shared.spacing', 'component.page-title', 'single-type.blog-details'] + > & Attribute.SetPluginOptions<{ i18n: { localized: true; @@ -1513,7 +834,6 @@ export interface ApiBlogDetailBlogDetail extends Schema.SingleType { }>; createdAt: Attribute.DateTime; updatedAt: Attribute.DateTime; - publishedAt: Attribute.DateTime; createdBy: Attribute.Relation< 'api::blog-detail.blog-detail', 'oneToOne', @@ -1626,7 +946,7 @@ export interface ApiDashboardHomeDashboardHome extends Schema.SingleType { description: ''; }; options: { - draftAndPublish: true; + draftAndPublish: false; }; attributes: { title: Attribute.String; @@ -1672,7 +992,6 @@ export interface ApiDashboardHomeDashboardHome extends Schema.SingleType { styles: Attribute.Component<'component.gird-container'>; createdAt: Attribute.DateTime; updatedAt: Attribute.DateTime; - publishedAt: Attribute.DateTime; createdBy: Attribute.Relation< 'api::dashboard-home.dashboard-home', 'oneToOne', @@ -1788,7 +1107,7 @@ export interface ApiHomePageHomePage extends Schema.SingleType { description: ''; }; options: { - draftAndPublish: true; + draftAndPublish: false; }; pluginOptions: { i18n: { @@ -1830,7 +1149,6 @@ export interface ApiHomePageHomePage extends Schema.SingleType { }>; createdAt: Attribute.DateTime; updatedAt: Attribute.DateTime; - publishedAt: Attribute.DateTime; createdBy: Attribute.Relation< 'api::home-page.home-page', 'oneToOne', @@ -1861,7 +1179,7 @@ export interface ApiLayoutLayout extends Schema.SingleType { description: ''; }; options: { - draftAndPublish: true; + draftAndPublish: false; }; pluginOptions: { i18n: { @@ -1869,85 +1187,21 @@ export interface ApiLayoutLayout extends Schema.SingleType { }; }; attributes: { - light_logo: Attribute.Component<'header.logo'> & - Attribute.SetPluginOptions<{ - i18n: { - localized: true; - }; - }>; - Button: Attribute.Component<'component.link', true> & - Attribute.SetPluginOptions<{ - i18n: { - localized: true; - }; - }>; - FooterOne: Attribute.Component<'widget.footer-one'> & - Attribute.SetPluginOptions<{ - i18n: { - localized: true; - }; - }>; - FooterTwo: Attribute.Component<'widget.footer-two'> & - Attribute.SetPluginOptions<{ - i18n: { - localized: true; - }; - }>; - FooterThree: Attribute.Component<'widget.footer-two'> & - Attribute.SetPluginOptions<{ - i18n: { - localized: true; - }; - }>; - userMenu: Attribute.Component<'component.link', true> & - Attribute.SetPluginOptions<{ - i18n: { - localized: true; - }; - }>; - FooterFour: Attribute.Component<'widget.footer-two'> & - Attribute.SetPluginOptions<{ - i18n: { - localized: true; - }; - }>; - FooterTop: Attribute.Component<'widget.footer-search'> & - Attribute.SetPluginOptions<{ - i18n: { - localized: true; - }; - }>; - FooterBottom: Attribute.Component<'widget.footer-bottom'> & - Attribute.SetPluginOptions<{ - i18n: { - localized: true; - }; - }>; - dark_logo: Attribute.Component<'header.logo'> & - Attribute.SetPluginOptions<{ - i18n: { - localized: true; - }; - }>; - langMenu: Attribute.Component<'component.link', true> & - Attribute.SetPluginOptions<{ - i18n: { - localized: false; - }; - }>; - employerSidebar: Attribute.Component<'component.menu', true> & + header: Attribute.DynamicZone< + ['block.public-header', 'block.private-header'] + > & Attribute.SetPluginOptions<{ i18n: { localized: true; }; }>; - candidateSidebar: Attribute.Component<'component.menu', true> & + footer: Attribute.DynamicZone<['block.footer', 'widget.footer-top']> & Attribute.SetPluginOptions<{ i18n: { localized: true; }; }>; - MainMenu: Attribute.Component<'component.menu', true> & + private_sidebar_menus: Attribute.DynamicZone<['shared.share-menu']> & Attribute.SetPluginOptions<{ i18n: { localized: true; @@ -1955,7 +1209,6 @@ export interface ApiLayoutLayout extends Schema.SingleType { }>; createdAt: Attribute.DateTime; updatedAt: Attribute.DateTime; - publishedAt: Attribute.DateTime; createdBy: Attribute.Relation< 'api::layout.layout', 'oneToOne', @@ -1977,47 +1230,6 @@ export interface ApiLayoutLayout extends Schema.SingleType { }; } -export interface ApiListDetailListDetail extends Schema.SingleType { - collectionName: 'list_details'; - info: { - singularName: 'list-detail'; - pluralName: 'list-details'; - displayName: 'List Details'; - description: ''; - }; - options: { - draftAndPublish: true; - }; - attributes: { - title: Attribute.String; - blocks: Attribute.DynamicZone< - ['shared.spacing', 'shared.empty', 'component.page-title'] - >; - sidebar: Attribute.Enumeration< - ['Left Sidebar', 'Right Sidebar', 'No Sidebar', 'Both Sidebar'] - > & - Attribute.Required & - Attribute.DefaultTo<'Right Sidebar'>; - leftSidebar: Attribute.DynamicZone<['component.page-title']>; - relatedLists: Attribute.Boolean; - createdAt: Attribute.DateTime; - updatedAt: Attribute.DateTime; - publishedAt: Attribute.DateTime; - createdBy: Attribute.Relation< - 'api::list-detail.list-detail', - 'oneToOne', - 'admin::user' - > & - Attribute.Private; - updatedBy: Attribute.Relation< - 'api::list-detail.list-detail', - 'oneToOne', - 'admin::user' - > & - Attribute.Private; - }; -} - export interface ApiMembershipMembership extends Schema.SingleType { collectionName: 'memberships'; info: { @@ -2119,7 +1331,7 @@ export interface ApiPagePage extends Schema.CollectionType { 'forms.job-filter', 'forms.company-filter', 'forms.candidate-filter', - 'block.category-card2' + 'block.category-list' ] >; createdAt: Attribute.DateTime; @@ -2132,6 +1344,37 @@ export interface ApiPagePage extends Schema.CollectionType { }; } +export interface ApiPermalinkPermalink extends Schema.SingleType { + collectionName: 'permalinks'; + info: { + singularName: 'permalink'; + pluralName: 'permalinks'; + displayName: 'Permalinks'; + description: ''; + }; + options: { + draftAndPublish: false; + }; + attributes: { + structure: Attribute.Enumeration<['Plain', 'Name and display']>; + singlePage: Attribute.Component<'config.single-page', true>; + createdAt: Attribute.DateTime; + updatedAt: Attribute.DateTime; + createdBy: Attribute.Relation< + 'api::permalink.permalink', + 'oneToOne', + 'admin::user' + > & + Attribute.Private; + updatedBy: Attribute.Relation< + 'api::permalink.permalink', + 'oneToOne', + 'admin::user' + > & + Attribute.Private; + }; +} + export interface ApiPostPost extends Schema.CollectionType { collectionName: 'posts'; info: { @@ -2223,7 +1466,8 @@ export interface ApiPrivatePagePrivatePage extends Schema.CollectionType { 'block.latest-applied', 'block.manage-lists', 'block.manage-companies', - 'table.applied-jobs' + 'table.applied-jobs', + 'block.manage-resume' ] > & Attribute.SetPluginOptions<{ @@ -2328,7 +1572,7 @@ export interface ApiSidebarSidebar extends Schema.SingleType { description: ''; }; options: { - draftAndPublish: true; + draftAndPublish: false; }; attributes: { adsSidebar: Attribute.DynamicZone< @@ -2339,7 +1583,6 @@ export interface ApiSidebarSidebar extends Schema.SingleType { >; createdAt: Attribute.DateTime; updatedAt: Attribute.DateTime; - publishedAt: Attribute.DateTime; createdBy: Attribute.Relation< 'api::sidebar.sidebar', 'oneToOne', @@ -2394,17 +1637,6 @@ declare module '@strapi/types' { 'plugin::users-permissions.permission': PluginUsersPermissionsPermission; 'plugin::users-permissions.role': PluginUsersPermissionsRole; 'plugin::users-permissions.user': PluginUsersPermissionsUser; - 'plugin::metajob-strapi.job': PluginMetajobStrapiJob; - 'plugin::metajob-strapi.bookmark': PluginMetajobStrapiBookmark; - 'plugin::metajob-strapi.chat': PluginMetajobStrapiChat; - 'plugin::metajob-strapi.message': PluginMetajobStrapiMessage; - 'plugin::metajob-strapi.company': PluginMetajobStrapiCompany; - 'plugin::metajob-strapi.job-detail': PluginMetajobStrapiJobDetail; - 'plugin::metajob-strapi.applied-job': PluginMetajobStrapiAppliedJob; - 'plugin::metajob-strapi.resume': PluginMetajobStrapiResume; - 'plugin::metajob-strapi.skill': PluginMetajobStrapiSkill; - 'plugin::metajob-strapi.job-category': PluginMetajobStrapiJobCategory; - 'plugin::metajob-strapi.email-history': PluginMetajobStrapiEmailHistory; 'plugin::google-maps.config': PluginGoogleMapsConfig; 'plugin::react-icons.iconlibrary': PluginReactIconsIconlibrary; 'plugin::i18n.locale': PluginI18NLocale; @@ -2414,10 +1646,10 @@ declare module '@strapi/types' { 'api::form.form': ApiFormForm; 'api::home-page.home-page': ApiHomePageHomePage; 'api::layout.layout': ApiLayoutLayout; - 'api::list-detail.list-detail': ApiListDetailListDetail; 'api::membership.membership': ApiMembershipMembership; 'api::package.package': ApiPackagePackage; 'api::page.page': ApiPagePage; + 'api::permalink.permalink': ApiPermalinkPermalink; 'api::post.post': ApiPostPost; 'api::private-page.private-page': ApiPrivatePagePrivatePage; 'api::review.review': ApiReviewReview; diff --git a/apps/site/.gitignore b/apps/site/.gitignore deleted file mode 100644 index fe79f11..0000000 --- a/apps/site/.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* -.pnpm-debug.log* - -# local env files -.env* - -# vercel -.vercel - -# typescript -*.tsbuildinfo -# next-env.d.ts diff --git a/apps/site/@fake-data/company-profile.ts b/apps/site/@fake-data/company-profile.ts deleted file mode 100644 index 9de6c31..0000000 --- a/apps/site/@fake-data/company-profile.ts +++ /dev/null @@ -1,134 +0,0 @@ -import { ICompanyProfileData } from "@/type/company-profile" - -export const companyProfileData: ICompanyProfileData = { - name: "ABC Company", - tagline: "Short Text About Company Lorem Ipsum Text", - phone: "123-456-7890", - email: "info@example.com", - logo: "/images/jobs-details/company-logo.png", - website: "#", - facebook: "#", - twitter: "#", - about: [ - { - id: 1, - text: `Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.` - }, - { - id: 1, - text: `Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.` - } - ], - industry: "Technology", - companySize: "100-500 ", - avgSalary: "$5k-$10k", - location: "New York, NY", - jobs: [ - { - id: 1, - tags: ["Full Time", "Remote"], - jobTitle: "Senior Product Designer", - location: "Dhaka, Bangladesh", - vacancy: 2, - salary: "34K - 38K", - datePosted: "1d ago", - logo: "web-ui-ux1" - }, - { - id: 2, - tags: ["Full Time", "Remote", "Part Time"], - jobTitle: "Senior UI/UX Designer", - location: "Dhaka, Bangladesh", - vacancy: 2, - salary: "34K - 38K", - datePosted: "1d ago", - logo: "web-ui-ux2" - }, - { - id: 3, - tags: ["Full Time", "Remote"], - jobTitle: "Senior Frontend Developer", - location: "Dhaka, Bangladesh", - vacancy: 2, - salary: "34K - 38K", - datePosted: "1d ago", - logo: "web-ui-ux3" - }, - { - id: 4, - tags: ["Full Time", "Remote"], - jobTitle: "Senior Backend Developer", - location: "Dhaka, Bangladesh", - vacancy: 2, - salary: "34K - 38K", - datePosted: "1d ago", - logo: "web-ui-ux4" - }, - { - id: 5, - tags: ["Full Time", "Remote", "Part Time"], - jobTitle: "Senior Fullstack Developer", - location: "Dhaka, Bangladesh", - vacancy: 2, - salary: "34K - 38K", - datePosted: "1d ago", - logo: "web-ui-ux5" - }, - { - id: 6, - tags: ["Full Time", "Contract Base"], - jobTitle: "Senior MERN Stack Developer", - location: "Dhaka, Bangladesh", - vacancy: 2, - salary: "34K - 38K", - datePosted: "1d ago", - logo: "web-ui-ux6" - }, - { - id: 7, - tags: ["Part Time", "Contract Base", "Freelance"], - jobTitle: "Senior MEAN Stack Developer", - location: "Dhaka, Bangladesh", - vacancy: 2, - salary: "34K - 38K", - datePosted: "1d ago", - logo: "web-ui-ux7" - }, - { - id: 8, - tags: ["Contract Base", "Freelance"], - jobTitle: "Senior MEVN Stack Developer", - location: "Dhaka, Bangladesh", - vacancy: 2, - salary: "34K - 38K", - datePosted: "1d ago", - logo: "web-ui-ux8" - } - ], - comments: [ - { - id: 1, - name: "John Doe", - rating: 5, - date: "May 9, 2021 at 10:00 am", - comment: "Great company to work for. I love the culture and the people.", - avatar: "/images/candidate/candidate-1.png" - }, - { - id: 2, - name: "John Doe", - rating: 2, - date: "May 9, 2021 at 10:00 am", - comment: "Great company to work for. I love the culture and the people.", - avatar: "/images/candidate/candidate-2.png" - }, - { - id: 3, - name: "John Doe", - rating: 4, - date: "May 9, 2021 at 10:00 am", - comment: "Great company to work for. I love the culture and the people.", - avatar: "/images/candidate/candidate-3.png" - } - ] -} diff --git a/apps/site/@fake-data/company.ts b/apps/site/@fake-data/company.ts deleted file mode 100644 index ce05857..0000000 --- a/apps/site/@fake-data/company.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { ICompany } from "@/type/company" - -export const companies: ICompany[] = [ - { - id: 1, - companyName: "Google", - tagline: "Short Text About Company Lorem Ipsum", - ratings: 4.8, - totalReviews: 200, - companySize: "100-200", - companyRevenue: "100M-200M", - companyLocation: "New York, USA", - logo: "company-1" - }, - { - id: 2, - companyName: "Google", - tagline: "lorem ipsum dolor sit amet", - ratings: 3.8, - totalReviews: 200, - companySize: "100-200", - companyRevenue: "100M-200M", - companyLocation: "New York, USA", - logo: "company-2" - }, - { - id: 3, - companyName: "Google", - tagline: "lorem ipsum dolor sit amet", - ratings: 5.0, - totalReviews: 200, - companySize: "100-200", - companyRevenue: "100M-200M", - companyLocation: "New York, USA", - logo: "company-3" - }, - { - id: 4, - companyName: "Google", - tagline: "lorem ipsum dolor sit amet", - ratings: 2.8, - totalReviews: 100, - companySize: "100-200", - companyRevenue: "100M-200M", - companyLocation: "New York, USA", - logo: "company-4" - }, - { - id: 5, - companyName: "Google", - tagline: "lorem ipsum dolor sit amet", - ratings: 4.8, - totalReviews: 200, - companySize: "100-200", - companyRevenue: "100M-200M", - companyLocation: "New York, USA", - logo: "company-5" - }, - { - id: 6, - companyName: "Google", - tagline: "lorem ipsum dolor sit amet", - ratings: 1.8, - totalReviews: 200, - companySize: "100-200", - companyRevenue: "100M-200M", - companyLocation: "New York, USA", - logo: "company-6" - }, - { - id: 7, - companyName: "Google", - tagline: "lorem ipsum dolor sit amet", - ratings: 4.8, - totalReviews: 200, - companySize: "100-200", - companyRevenue: "100M-200M", - companyLocation: "New York, USA", - logo: "company-7" - }, - { - id: 8, - companyName: "Google", - tagline: "lorem ipsum dolor sit amet", - ratings: 4.8, - totalReviews: 200, - companySize: "100-200", - companyRevenue: "100M-200M", - companyLocation: "New York, USA", - logo: "company-8" - }, - { - id: 9, - companyName: "Google", - tagline: "lorem ipsum dolor sit amet", - ratings: 4.8, - totalReviews: 200, - companySize: "100-200", - companyRevenue: "100M-200M", - companyLocation: "New York, USA", - logo: "company-9" - } -] diff --git a/apps/site/@fake-data/find-job.ts b/apps/site/@fake-data/find-job.ts deleted file mode 100644 index da5816f..0000000 --- a/apps/site/@fake-data/find-job.ts +++ /dev/null @@ -1,172 +0,0 @@ -import { IExperienceFilter, IJobsData, IJobTypeFilter, ISliksFilter } from "@/type/find-job" - -export const jobTypeFilterData: IJobTypeFilter[] = [ - { - type: "Full Time", - jobCount: 124, - id: 1 - }, - { - type: "Part Time", - jobCount: 0, - id: 2 - }, - { - type: "Freelance", - jobCount: 0, - id: 3 - }, - { - type: "Internship", - jobCount: 0, - id: 4 - }, - { - type: "Contract Base", - jobCount: 0, - id: 5 - } -] - -export const experienceFilterData: IExperienceFilter[] = [ - { - title: "No Need", - jobCount: 200, - id: 1 - }, - { - title: "1+ Year", - jobCount: 150, - id: 2 - }, - { - title: "2+ Year", - jobCount: 20, - id: 3 - }, - { - title: "3+ Year", - jobCount: 10, - id: 4 - }, - { - title: "4+ Year", - jobCount: 10, - id: 5 - }, - { - title: "5+ Year", - jobCount: 10, - id: 6 - } -] - -export const skillsFilterData: ISliksFilter[] = [ - { - title: "HTML", - jobCount: 200, - id: 1 - }, - { - title: "CSS", - jobCount: 200, - id: 2 - }, - { - title: "JavaScript", - jobCount: 200, - id: 3 - }, - { - title: "React", - jobCount: 200, - id: 4 - }, - { - title: "Node JS", - jobCount: 200, - id: 5 - } -] -export const jobsData: IJobsData[] = [ - { - id: 1, - tags: ["Full Time", "Remote"], - jobTitle: "Senior Product Designer", - location: "Dhaka, Bangladesh", - vacancy: 2, - salary: "34K - 38K", - datePosted: "1d ago", - logo: "web-ui-ux1" - }, - { - id: 2, - tags: ["Full Time", "Remote", "Part Time"], - jobTitle: "Senior UI/UX Designer", - location: "Dhaka, Bangladesh", - vacancy: 2, - salary: "34K - 38K", - datePosted: "1d ago", - logo: "web-ui-ux2" - }, - { - id: 3, - tags: ["Full Time", "Remote"], - jobTitle: "Senior Frontend Developer", - location: "Dhaka, Bangladesh", - vacancy: 2, - salary: "34K - 38K", - datePosted: "1d ago", - logo: "web-ui-ux3" - }, - { - id: 4, - tags: ["Full Time", "Remote"], - jobTitle: "Senior Backend Developer", - location: "Dhaka, Bangladesh", - vacancy: 2, - salary: "34K - 38K", - datePosted: "1d ago", - logo: "web-ui-ux4" - }, - { - id: 5, - tags: ["Full Time", "Remote", "Part Time"], - jobTitle: "Senior Fullstack Developer", - location: "Dhaka, Bangladesh", - vacancy: 2, - salary: "34K - 38K", - datePosted: "1d ago", - logo: "web-ui-ux5" - }, - { - id: 6, - tags: ["Full Time", "Contract Base"], - jobTitle: "Senior MERN Stack Developer", - location: "Dhaka, Bangladesh", - vacancy: 2, - salary: "34K - 38K", - datePosted: "1d ago", - logo: "web-ui-ux6" - }, - { - id: 7, - tags: ["Part Time", "Contract Base", "Freelance"], - jobTitle: "Senior MEAN Stack Developer", - location: "Dhaka, Bangladesh", - vacancy: 2, - salary: "34K - 38K", - datePosted: "1d ago", - logo: "web-ui-ux7" - }, - { - id: 8, - tags: ["Contract Base", "Freelance"], - jobTitle: "Senior MEVN Stack Developer", - location: "Dhaka, Bangladesh", - vacancy: 2, - salary: "34K - 38K", - datePosted: "1d ago", - logo: "web-ui-ux8" - } -] diff --git a/apps/site/@fake-data/job-details.ts b/apps/site/@fake-data/job-details.ts deleted file mode 100644 index 81695dd..0000000 --- a/apps/site/@fake-data/job-details.ts +++ /dev/null @@ -1,144 +0,0 @@ -import { IJobDetailsPageData } from "@/type/job-deatils" - -export const jobDetailsPageData: IJobDetailsPageData = { - pageTitle: "Job Details", - backgroundImage: "/images/jobs/findJob.png", - titleCard: { - title: "Senior Software Engineer", - // text: 'Main Category Name / Sub Category Name', - category: "Software Development", - subCategory: "Web Development", - logo: "/images/jobs-details/company-logo.png", - share: [ - { - id: 1, - icon: "ri:facebook-fill", - link: "#", - name: "Facebook" - }, - { - id: 5, - icon: "mdi:twitter", - link: "#", - name: "Twitter" - }, - { - id: 3, - icon: "mdi:instagram", - link: "#", - name: "Instagram" - }, - { - id: 4, - icon: "akar-icons:linkedin-fill", - link: "#", - name: "Linkedin" - }, - { - id: 2, - icon: "solar:share-bold", - link: "#", - name: "Share" - } - ] - }, - jobOverview: { - title: "Job Overview", - data: [ - { - id: 1, - title: "Job Posted", - datePosted: "2 days ago", - icon: "uil:calender" - }, - { - id: 2, - title: "Deadline", - datePosted: "2 days ago", - icon: "iconamoon:clock-light" - }, - { - id: 3, - title: "Job Posted", - datePosted: "2 days ago", - icon: "iconamoon:file-document" - }, - { - id: 4, - title: "Job Type", - datePosted: "2 days ago", - icon: "pajamas:work" - }, - { - id: 5, - title: "Working Hours", - datePosted: "2 days ago", - icon: "ph:watch-light" - }, - { - id: 6, - title: "Salary", - datePosted: "2 days ago", - icon: "mdi:dollar" - }, - { - id: 7, - title: "Job Location", - datePosted: "4529 Feathers Hooves Drive, New York", - icon: "ph:map-pin" - } - ] - }, - description: { - title: "Job Description", - data: [ - { - id: 1, - text: `Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. ` - }, - { - id: 2, - text: `It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.' ` - } - ] - }, - requirements: { - title: "Requirements", - data: [ - { - id: 1, - text: "Lorem, ipsum dolor sit amet consectetur." - }, - { - id: 2, - text: "Lorem, ipsum dolor sit amet consectetur." - }, - { - id: 3, - text: "Lorem, ipsum dolor sit amet consectetur." - }, - { - id: 4, - text: "Lorem, ipsum dolor sit amet consectetur." - }, - { - id: 5, - text: "Lorem, ipsum dolor sit amet consectetur." - } - ] - }, - skills: { - title: "Key Skills", - data: ["React", "Node", "MongoDB", "Express"] - }, - company: { - logo: "/images/jobs-details/company-logo.png", - companyName: "Company Name", - tagLine: "loreum ipsum dolor sit amet", - email: "example@gmail.com", - phone: "+1234567890", - website: "www.example.com", - facebook: "#", - twitter: "https://twitter.com/" - } -} diff --git a/apps/site/@fake-data/menus.ts b/apps/site/@fake-data/menus.ts deleted file mode 100644 index 7160dee..0000000 --- a/apps/site/@fake-data/menus.ts +++ /dev/null @@ -1,234 +0,0 @@ -export const mainMenu = [ - { - title: "Home", - link: "/", - target: "_self", - icon: "home", - disabled: false - }, - { - title: "Find Job", - link: "/find-job", - target: "_self", - icon: "info", - disabled: false - }, - { - title: "Company", - link: "/company", - target: "_self", - icon: "contact", - disabled: false - }, - { - title: "Candidate", - link: "/candidate", - target: "_self", - icon: "info", - disabled: false - }, - { - title: "Career Advice", - link: "/career-advice", - target: "_self", - icon: "contact", - disabled: false - }, - { - title: "Contact Us", - link: "/contact-us", - target: "_self", - icon: "contact", - disabled: false - } -] - -// *** language menu -export const langMenu = [ - { - title: "English", - link: "/", - target: "_self", - icon: "en", - disabled: false - }, - { - title: "Arabic", - link: "/ar", - target: "_self", - icon: "ar", - disabled: false - }, - { - title: "Spanish", - link: "/es", - target: "_self", - icon: "es", - disabled: false - } -] - -export const sidebarMenu = [ - { - title: "Sign In", - link: "/login", - target: "_self", - icon: "login", - disabled: false - }, - { - title: "Sign Up", - link: "/register", - target: "_self", - icon: "signup", - disabled: false - } -] - -export const userMenu = [ - { - title: "Profile", - link: "/my-profile", - target: "_self", - icon: "profile", - disabled: false - }, - { - title: "Dashboard", - link: "/dashboard", - target: "_self", - icon: "dashboard", - disabled: false - }, - { - title: "Bookmarks", - link: "/dashboard/bookmarks", - target: "_self", - icon: "settings", - disabled: false - } - // { - // title: "Logout", - // link: "/logout", - // target: "_self", - // icon: "logout", - // disabled: false - // } -] - -export type MenuType = { - title: string - link: string - target?: string - icon: string - badge?: string - disabled?: boolean - child?: { - title: string - link: string - target: string - icon: string - disabled: boolean - }[] -} - -// TODO: This menu should be fully dynamics -// *** candidate sidebar menu -export const candidateSidebarMenu = [ - { - title: "Dashboard", - link: "/dashboard", - target: "_self", - icon: "tabler:layout-dashboard", - disabled: false - }, - { - title: "Messages", - link: "/dashboard/messages", - target: "_self", - icon: "tabler:messages", - badge: "48", - disabled: false - }, - { - title: "Bookmarks", - link: "/dashboard/bookmarks", - target: "_self", - icon: "tabler:heart", - disabled: false - }, - { - title: "My Resume", - link: "/dashboard/my-resume", - target: "_self", - icon: "tabler:address-book", - disabled: false - }, - { - title: "My Profile", - link: "/dashboard/my-profile", - target: "_self", - icon: "solar:user-linear", - disabled: false - } -] as MenuType[] - -// *** employer sidebar menu -export const employerSidebarMenu = [ - { - title: "Dashboard", - link: "/dashboard", - target: "_self", - icon: "tabler:layout-dashboard", - disabled: false - }, - { - title: "My Companies", - link: "/dashboard/manage-companies", - target: "_self", - icon: "tabler:address-book" - // child: [ - // { - // title: "All Companies", - // link: "/dashboard/manage-companies", - // target: "_self" - // }, - // { - // title: "Add Company", - // link: "/dashboard/add-company", - // target: "_self" - // } - // ] - }, - - { - title: "My Jobs", - link: "/dashboard/manage-jobs", - target: "_self", - icon: "tabler:bell", - disabled: false - }, - { - title: "Messages", - link: "/dashboard/messages", - target: "_self", - icon: "tabler:messages", - badge: "48", - disabled: false - }, - - { - title: "My Profile", - link: "/dashboard/my-profile", - target: "_self", - icon: "solar:user-linear", - disabled: false - }, - { - title: "Packages", - link: "/dashboard/packages", - target: "_self", - icon: "solar:settings-linear", - disabled: false - } -] as MenuType[] diff --git a/apps/site/config/theme-loader.ts b/apps/site/config/theme-loader.ts new file mode 100644 index 0000000..b30f817 --- /dev/null +++ b/apps/site/config/theme-loader.ts @@ -0,0 +1,18 @@ +//const activeTheme = "@padma/metajob-ui" + +let activeThemeComponents: Record = {} // Use 'any' for React components + +// Load the active theme components +export const loadActiveTheme = async () => { + // @ts-ignore + const { getPublicComponents, getPrivateComponents } = await import("@padma/blank-theme") // Use the activeTheme variable + + // Set the activeThemeComponents to the loaded components + const activeThemeComponents = getPublicComponents + return { getPrivateComponents, getPublicComponents } +} + +// Get the theme component by its key +export const getThemeComponent = (componentKey: string): any | null => { + return activeThemeComponents[componentKey] || null // Access the outer scoped variable +} diff --git a/apps/site/config/theme-settings.ts b/apps/site/config/theme-settings.ts deleted file mode 100644 index 7b2aa5c..0000000 --- a/apps/site/config/theme-settings.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { getPublicComponents, getPrivateComponents } from "@padma/metajob-ui" // Adjust the path to your theme package - -// Export the themeComponentMapping for site-wide usage -export { getPublicComponents, getPrivateComponents } diff --git a/apps/site/i18n-config.ts b/apps/site/i18n-config.ts index 5e0d0b0..4e24e51 100644 --- a/apps/site/i18n-config.ts +++ b/apps/site/i18n-config.ts @@ -1,6 +1,54 @@ export const i18n = { defaultLocale: "en", - locales: ["en", "es", "ar"] + // add all country codes here + locales: [ + "en", + "es", + "ar", + "fr", + "de", + "it", + "pt", + "ru", + "zh", + "ja", + "ko", + "tr", + "nl", + "pl", + "sv", + "da", + "fi", + "no", + "cs", + "hu", + "ro", + "el", + "th", + "id", + "vi", + "bg", + "uk", + "hr", + "sk", + "sl", + "et", + "lv", + "lt", + "sr", + "sq", + "mk", + "bs", + "is", + "mt", + "hy", + "az", + "ka", + "eu", + "gl", + "eu", + "ca" + ] } as const export type Locale = (typeof i18n)["locales"][number] diff --git a/apps/site/package.json b/apps/site/package.json index 3c23ccc..165d2dc 100644 --- a/apps/site/package.json +++ b/apps/site/package.json @@ -2,7 +2,7 @@ "name": "@padma/frontend", "version": "1.0.0-beta", "private": true, - "description": "The Next.js Framework for Strapi", + "description": "Padma- Nextjs frontend", "license": "MIT", "author": { "name": "JS Template", @@ -23,7 +23,7 @@ "@mui/lab": "^5.0.0-alpha.165", "@mui/material": "^5.15.10", "@mui/material-nextjs": "latest", - "@padma/metajob-ui": "0.0.1", + "@padma/blank-theme": "workspace:*", "@strapi/blocks-react-renderer": "^1.0.1", "@types/lodash": "^4.14.202", "cookies-next": "^4.2.1", diff --git a/apps/site/src/app/(private)/NavbarBody.tsx b/apps/site/src/app/(private)/NavbarBody.tsx deleted file mode 100644 index 4e01e2f..0000000 --- a/apps/site/src/app/(private)/NavbarBody.tsx +++ /dev/null @@ -1,26 +0,0 @@ -"use client" -import { useGlobalContext } from "@/context/store" -import { SignOut } from "@/lib/user" -import useThemeToggle from "@/next-theme/useThemeToggle" -import { getLanguageValue } from "@/utils/common" -import { signOut, useSession } from "next-auth/react" -import { NavBar } from "@padma/metajob-ui" - -export default function NavbarBody() { - // NOTE: This is the NavbarBody component and session need to pass as propos - const { layoutData } = useGlobalContext() - return ( - - ) -} diff --git a/apps/site/src/app/(private)/body.tsx b/apps/site/src/app/(private)/body.tsx new file mode 100644 index 0000000..0f6c78b --- /dev/null +++ b/apps/site/src/app/(private)/body.tsx @@ -0,0 +1,47 @@ +"use client" +import { useGlobalContext } from "@/context/store" +import { SignOut } from "@/lib/user" +import { signOut, useSession } from "next-auth/react" + +export default function DashboardLayoutBody({ + data, + currentThemeComponents, + children, + language +}: { + data: any + currentThemeComponents: any + children: React.ReactNode + language: string +}) { + const { changeLang, changeDirection } = useGlobalContext() + // ?? get the private-header from the layout data + const headerBlock = data?.data?.attributes?.header?.find( + (block: any) => block.__component === "block.private-header" + ) + + // ?? get the private_sidebar_menus from the layout data + const privateSidebarMenus = data?.data?.attributes?.private_sidebar_menus + + return ( + <> + {(headerBlock || privateSidebarMenus) && ( + <> + {currentThemeComponents["block.private-header"] + ? currentThemeComponents["block.private-header"].component({ + SignOut: SignOut, + headerData: headerBlock, + sidebarMenus: privateSidebarMenus, + language: language, + changeLang: changeLang, + changeDirection: changeDirection, + children: children, + useSession: useSession, + signOut: signOut + }) + : null} + + )} + + ) +} diff --git a/apps/site/src/app/(private)/dashboard/(candidate)/layout.tsx b/apps/site/src/app/(private)/dashboard/(candidate)/layout.tsx deleted file mode 100644 index 9de7754..0000000 --- a/apps/site/src/app/(private)/dashboard/(candidate)/layout.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { auth } from "@/context/auth" -import { redirect } from "next/navigation" -import { Fragment } from "react" - -export default async function CandidateLayout({ - children // will be a page or nested layout -}: { - children: React.ReactNode -}) { - const session = await auth() - - // *** If the user role is not an candidate, redirect to the dashboard - if (session?.user?.role?.type !== "candidate") { - redirect("/dashboard") - } - - return {children} -} diff --git a/apps/site/src/app/(private)/dashboard/(candidate)/my-resume/PageBody.tsx b/apps/site/src/app/(private)/dashboard/(candidate)/my-resume/PageBody.tsx deleted file mode 100644 index 114bce0..0000000 --- a/apps/site/src/app/(private)/dashboard/(candidate)/my-resume/PageBody.tsx +++ /dev/null @@ -1,26 +0,0 @@ -"use client" - -import { Paper } from "@mui/material" -import React from "react" -import { AddResumeForm } from "@padma/metajob-ui" - -type Props = { - useSession: () => { data: any; status: string } -} -const PageBody = ({ useSession }: Props) => { - const { data: session, status } = useSession() - return ( - theme.palette.background.default, - p: 0, - mb: 5 - }}> - - - ) -} - -export default PageBody diff --git a/apps/site/src/app/(private)/dashboard/(candidate)/my-resume/loading.tsx b/apps/site/src/app/(private)/dashboard/(candidate)/my-resume/loading.tsx deleted file mode 100644 index 3ad83c0..0000000 --- a/apps/site/src/app/(private)/dashboard/(candidate)/my-resume/loading.tsx +++ /dev/null @@ -1,25 +0,0 @@ -"use client" -import { Box, Paper } from "@mui/material" - -export default function MyResumeLoading() { - // Or a custom loading skeleton component - return ( - theme.palette.background.default, - p: 0, - mb: 5 - }}> - - {/* {}} - // @ts-ignore - data={null} - isLoading={true} - /> */} - - - ) -} diff --git a/apps/site/src/app/(private)/dashboard/(candidate)/my-resume/page.tsx b/apps/site/src/app/(private)/dashboard/(candidate)/my-resume/page.tsx deleted file mode 100644 index 0acbd4f..0000000 --- a/apps/site/src/app/(private)/dashboard/(candidate)/my-resume/page.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import type { Metadata } from "next" -import { useSession } from "next-auth/react" -import PageBody from "./PageBody" - -export const metadata: Metadata = { - title: "My Resume | MetaJobs", - description: "Add a new resume page seo description" -} - -const AddResumePage = async () => { - return -} - -export default AddResumePage diff --git a/apps/site/src/app/(private)/dashboard/(employer)/layout.tsx b/apps/site/src/app/(private)/dashboard/(employer)/layout.tsx deleted file mode 100644 index 3a9e9f7..0000000 --- a/apps/site/src/app/(private)/dashboard/(employer)/layout.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { auth } from "@/context/auth" -import { Fragment } from "react" - -export default async function EmployerLayout({ - children // will be a page or nested layout -}: { - children: React.ReactNode -}) { - const session = await auth() - - // *** If the user role is not an employer, redirect to the dashboard - // if (session?.user?.role?.type !== "employer") { - // redirect("/dashboard"); - // } - - return {children} -} diff --git a/apps/site/src/app/(private)/dashboard/(employer)/packages/PageBody.tsx b/apps/site/src/app/(private)/dashboard/(employer)/packages/PageBody.tsx deleted file mode 100644 index 546e3ac..0000000 --- a/apps/site/src/app/(private)/dashboard/(employer)/packages/PageBody.tsx +++ /dev/null @@ -1,115 +0,0 @@ -"use client" -import { Box, Grid, Typography } from "@mui/material" -import toast from "react-hot-toast" -import { membershipMonthlyPlanData } from "./data" -import { PricePlanWithFeatures } from "@padma/metajob-ui" -import { useState } from "react" - -const PackagesPageBody = () => { - const [loading, setLoading] = useState(false) - - // *** on get started button click - const handleGetStarted = async (type: string) => { - setLoading(true) - - setTimeout(() => { - toast.success(`Get started button clicked for : ${type} plan`) - setLoading(false) - }, 2000) - } - - return ( - - - - We Have Exclusive Plan In Our Pricing - - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Congue feugiat adipiscing urna mauris sit leo - consectetur tortor, dui.{" "} - - - - - {membershipMonthlyPlanData && - membershipMonthlyPlanData.map((item, index) => ( - - - - ))} - - {/* loading */} - {!membershipMonthlyPlanData && - [1, 2, 3].map((item, index) => ( - - - - ))} - - {/* Empty */} - {membershipMonthlyPlanData && membershipMonthlyPlanData.length === 0 && ( - - - - No subscription found - - - - )} - - - ) -} - -export default PackagesPageBody diff --git a/apps/site/src/app/(private)/dashboard/(employer)/packages/data.ts b/apps/site/src/app/(private)/dashboard/(employer)/packages/data.ts deleted file mode 100644 index 358d0ce..0000000 --- a/apps/site/src/app/(private)/dashboard/(employer)/packages/data.ts +++ /dev/null @@ -1,84 +0,0 @@ -// import { subscriptionItemProps } from "ui/src/components/pricing/types" - -// FIXME: fix type issue -// *** Membership Monthly plan data -export const membershipMonthlyPlanData: any[] = [ - { - id: 1, - title: "Basic Plan", - description: "For early-stage startups looking to combine data from few sources", - price: 10, - features: [ - { - title: "Access to essential features" - }, - { - title: "Up to 5 users" - }, - { - title: "10 GB of storage" - }, - { - title: "Email support" - }, - { - title: "Basic analytics and reporting" - }, - { - title: "Community access" - } - ] - }, - { - id: 2, - title: "Standard Plan", - description: "For early-stage startups looking to combine data from few sources", - price: 16, - features: [ - { - title: "Access to essential features" - }, - { - title: "Up to 5 users" - }, - { - title: "10 GB of storage" - }, - { - title: "Email support" - }, - { - title: "Basic analytics and reporting" - }, - { - title: "Community access" - } - ] - }, - { - id: 3, - title: "Premium Plan", - description: "For early-stage startups looking to combine data from few sources", - price: 24, - features: [ - { - title: "Access to essential features" - }, - { - title: "Up to 5 users" - }, - { - title: "10 GB of storage" - }, - { - title: "Email support" - }, - { - title: "Basic analytics and reporting" - }, - { - title: "Community access" - } - ] - } -] diff --git a/apps/site/src/app/(private)/dashboard/(employer)/packages/page.tsx b/apps/site/src/app/(private)/dashboard/(employer)/packages/page.tsx deleted file mode 100644 index 6d6bec1..0000000 --- a/apps/site/src/app/(private)/dashboard/(employer)/packages/page.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import type { Metadata } from "next" -import PackagesPageBody from "./PageBody" - -export const metadata: Metadata = { - title: "Packages | MetaJobs", - description: "Packages page for MetaJobs" -} - -const PackagesPage = async () => { - return -} - -export default PackagesPage diff --git a/apps/site/src/app/(private)/dashboard/(multi)/my-profile/PageBody.tsx b/apps/site/src/app/(private)/dashboard/(multi)/my-profile/PageBody.tsx deleted file mode 100644 index da166be..0000000 --- a/apps/site/src/app/(private)/dashboard/(multi)/my-profile/PageBody.tsx +++ /dev/null @@ -1,16 +0,0 @@ -"use client" - -import { Stack } from "@mui/material" -import { useSession } from "next-auth/react" -import { MyProfile } from "@padma/metajob-ui" - -export default function ProfilePageBody() { - const { data: session } = useSession() - const userId = session?.user?.id as unknown as string - - return ( - - - - ) -} diff --git a/apps/site/src/app/(private)/dashboard/(multi)/my-profile/page.tsx b/apps/site/src/app/(private)/dashboard/(multi)/my-profile/page.tsx index a470c62..48f71a2 100644 --- a/apps/site/src/app/(private)/dashboard/(multi)/my-profile/page.tsx +++ b/apps/site/src/app/(private)/dashboard/(multi)/my-profile/page.tsx @@ -1,14 +1,37 @@ import { redirect } from "next/navigation" -import ProfilePageBody from "./PageBody" import { auth } from "@/context/auth" +import { Fragment } from "react" +import { getLanguageFromCookie } from "@/utils/language" +import { loadActiveTheme } from "config/theme-loader" export default async function ProfilePage() { const session = await auth() + // fetch the language from cookies or session + const language = getLanguageFromCookie() // *** If the user role is not an candidate or employer, redirect to the dashboard if (session?.user?.role?.type !== "candidate" && session?.user?.role?.type !== "employer") { redirect("/dashboard") } + const userId = session?.user?.id as unknown as string - return + // Load the active theme and get public components + const { getPrivateComponents } = await loadActiveTheme() + + return ( + + {/* Render the components dynamically using blockComponentMapping */} + {[{ __component: "block.auth-profile" }]?.map((block: any, index: number) => { + // @ts-ignore + const BlockConfig = getPrivateComponents[block.__component] + + if (BlockConfig) { + const { component: ComponentToRender } = BlockConfig + + return + } + return null // Handle missing component mapping case + })} + + ) } diff --git a/apps/site/src/app/(private)/dashboard/[slug]/body.tsx b/apps/site/src/app/(private)/dashboard/[slug]/body.tsx index 134d6bc..5b6e82e 100644 --- a/apps/site/src/app/(private)/dashboard/[slug]/body.tsx +++ b/apps/site/src/app/(private)/dashboard/[slug]/body.tsx @@ -5,10 +5,10 @@ import { Session } from "next-auth" import useSWR from "swr" import { privetPageFetcher } from "./utils" import { useGlobalContext } from "@/context/store" -import { getPrivateComponents } from "../../../../../config/theme-settings" interface BodyProps { blocks: any[] + language?: string styleData?: { columnSpacing: number | null rowSpacing: number | null @@ -19,9 +19,10 @@ interface BodyProps { } pageSlug: string session: Session | null + currentThemeComponents: any } -const Body: React.FC = ({ blocks, styleData, pageSlug, session }) => { +const Body: React.FC = ({ blocks, language, styleData, pageSlug, session, currentThemeComponents }) => { const { direction } = useGlobalContext() const queryParams = { @@ -61,22 +62,12 @@ const Body: React.FC = ({ blocks, styleData, pageSlug, session }) => {...(data?.styles?.columns && { columns: data?.styles.columns })} {...(data?.styles?.wrap && { wrap: data?.styles.wrap })} sx={{ mb: 4 }}> - {data?.blocks?.map((block: { __component: keyof typeof getPrivateComponents }, index: number) => { - const BlockConfig = getPrivateComponents[block.__component] + {data?.blocks?.map((block: { __component: keyof typeof currentThemeComponents }, index: number) => { + const BlockConfig = currentThemeComponents[block.__component] if (BlockConfig) { const { component: ComponentToRender } = BlockConfig - return ( - - ) + return } return null // Handle the case where the component mapping is missing })} diff --git a/apps/site/src/app/(private)/dashboard/[slug]/page.tsx b/apps/site/src/app/(private)/dashboard/[slug]/page.tsx index 9262cfc..ac4c89b 100644 --- a/apps/site/src/app/(private)/dashboard/[slug]/page.tsx +++ b/apps/site/src/app/(private)/dashboard/[slug]/page.tsx @@ -7,8 +7,8 @@ import { Metadata, ResolvingMetadata } from "next" import Body from "./body" import { auth } from "@/context/auth" import { notFound, redirect } from "next/navigation" +import { loadActiveTheme } from "config/theme-loader" export const dynamicParams = false // true | false, -import React from "react" // *** generate metadata type type Props = { params: { slug: string } @@ -54,13 +54,12 @@ export default async function DynamicPrivatePages({ const pageSlug = params?.slug const session = await auth() - // console.log("Page Slug", pageSlug) - if (!session) { redirect("/login") } - // const language = getLanguageFromCookie(); + // fetch the language from cookies or session + const language = getLanguageFromCookie() const { data, error } = await find( "api/private-pages", @@ -93,9 +92,19 @@ export default async function DynamicPrivatePages({ // throw error; // } + // Load the active theme and get public components + const { getPrivateComponents } = await loadActiveTheme() + return ( <> - + {/* JSON_LD for SEO */} {/* {data?.data[0]?.attributes?.seo?.structuredData && (