diff --git a/website_product_search_snippet/README.rst b/website_product_search_snippet/README.rst
new file mode 100644
index 000000000..71df58de9
--- /dev/null
+++ b/website_product_search_snippet/README.rst
@@ -0,0 +1,49 @@
+.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg
+ :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+Product Search Snippet
+======================
+This module helps to search products in category and all category wise.
+
+Configuration
+=============
+* No additional configurations needed
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+License
+-------
+General Public License, Version 3 (AGPL v3).
+(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
+
+Credits
+-------
+* Developer: (V18) Nivedhya T,
+ (V17) Ajith V,
+ (V16) Farhana Jahan PT
+* Contact: odoo@cybrosys.com
+
+Contacts
+--------
+* Mail Contact : odoo@cybrosys.com
+* Website : https://cybrosys.com
+
+Bug Tracker
+-----------
+Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
+
+Maintainer
+==========
+.. image:: https://cybrosys.com/images/logo.png
+ :target: https://cybrosys.com
+
+This module is maintained by Cybrosys Technologies.
+
+For support and more information, please visit `Our Website `__
+
+Further information
+===================
+HTML Description: ``__
diff --git a/website_product_search_snippet/__init__.py b/website_product_search_snippet/__init__.py
new file mode 100644
index 000000000..bbe14c07f
--- /dev/null
+++ b/website_product_search_snippet/__init__.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies().
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from . import controllers
+from . import models
diff --git a/website_product_search_snippet/__manifest__.py b/website_product_search_snippet/__manifest__.py
new file mode 100644
index 000000000..448d4f13f
--- /dev/null
+++ b/website_product_search_snippet/__manifest__.py
@@ -0,0 +1,61 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies().
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+{
+ 'name': 'Product Search Snippet',
+ 'version': '18.0.1.0.0',
+ 'category': 'Website',
+ 'summary': """Product Search Snippet for Website.""",
+ 'description': """This module enables users to search for products
+ within a specific category or across all categories using the search
+ bar on the website snippet and redirect to its details.""",
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': "https://cybrosys.com/",
+ 'depends': ['website', 'sale_management'],
+ 'data': [
+ 'views/snippets/search_snippet_templates.xml',
+ 'views/snippets/product_search_templates.xml',
+ 'views/snippets/product_details_templates.xml',
+ 'views/snippets/selected_product_from_all_product_templates.xml',
+ 'views/snippets/product_all_result_templates.xml',
+ 'views/snippets/category_details_templates.xml',
+ 'views/snippets/category_selected_product_templates.xml',
+ 'views/snippets/selected_category_from_all_category_templates.xml',
+ 'views/snippets/category_all_result_templates.xml',
+ 'views/snippets/product_select_from_category_templates.xml',
+ ],
+ 'assets': {
+ 'web.assets_frontend': [
+ 'website_product_search_snippet/static/src/css/website_product_search_snippet.scss',
+ 'website_product_search_snippet/static/src/js/website_product_search_snippet.js',
+ 'website_product_search_snippet/static/src/js/search_bar.js',
+ 'website_product_search_snippet/static/src/xml/product_templates.xml',
+ 'website_product_search_snippet/static/src/xml/category_templates.xml',
+ ]
+ },
+ 'images': ['static/description/banner.jpg'],
+ 'license': 'AGPL-3',
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+}
diff --git a/website_product_search_snippet/controllers/__init__.py b/website_product_search_snippet/controllers/__init__.py
new file mode 100644
index 000000000..14a47f9b5
--- /dev/null
+++ b/website_product_search_snippet/controllers/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies().
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from . import website_product_search_snippet
diff --git a/website_product_search_snippet/controllers/website_product_search_snippet.py b/website_product_search_snippet/controllers/website_product_search_snippet.py
new file mode 100644
index 000000000..42fa72e7e
--- /dev/null
+++ b/website_product_search_snippet/controllers/website_product_search_snippet.py
@@ -0,0 +1,146 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies().
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import http
+from odoo.http import request
+
+
+class WebsiteSnippetPage(http.Controller):
+ """Controller for setting routes.Pass all categories and
+ category wise products as array to a template"""
+
+ @http.route('/category/form', type='http', auth='public',
+ website=True, csrf=False, sitemap=False, cache=300)
+ def category_page(self, **kw):
+ """Function for rendering specific category and products of that
+ category into website"""
+ category = request.env['product.category'].sudo().browse(
+ int(kw.get('category_id')))
+ parent = request.env['product.category'].sudo().browse(
+ int(kw.get('parent_id')))
+ values = {
+ 'category': category,
+ 'products': request.env['product.template'].search(
+ [('categ_id', '=', category.id)]),
+ 'products_category': request.env['product.template'].search(
+ [('category_id', '=', parent.id)])
+ }
+ return http.request.render(
+ 'website_product_search_snippet.category_snippet_img', values)
+
+ @http.route('/selected/category/result', type='http', auth='public',
+ website=True, csrf=False, sitemap=False, cache=300)
+ def category_all_page(self, **kw):
+ """Function for rendering specific category and products of that
+ category into website"""
+ category = request.env['product.category'].sudo().browse(
+ int(kw.get('category_id')))
+ values = {
+ 'category': category,
+ 'products': request.env['product.template'].search(
+ [('categ_id', '=', category.id)])
+ }
+ return http.request.render(
+ 'website_product_search_snippet.all_category_snippet_img', values)
+
+ @http.route('/selected/category/from/all_category/result', type='http', auth='public',
+ website=True, csrf=False, sitemap=False, cache=300)
+ def category_from_all_category_page(self, **kw):
+ """Function for rendering specific category and products of that
+ category into website"""
+ category = request.env['product.category'].sudo().browse(
+ int(kw.get('category_id')))
+ values = {
+ 'category': category,
+ 'products': request.env['product.template'].search(
+ [('categ_id', '=', category.id)])
+ }
+ return http.request.render(
+ 'website_product_search_snippet.category_from_all_category_snippet_img', values)
+
+ @http.route('/product/form', type='http', auth='public',
+ website=True, csrf=False, sitemap=False, cache=300)
+ def product_page(self, **kw):
+ """Function for rendering specific product into website"""
+ values = {
+ 'products': request.env['product.template'].sudo().browse(
+ int(kw.get('product_id')))
+ }
+ return http.request.render(
+ 'website_product_search_snippet.products_snippet_img', values)
+
+ @http.route('/selected/product/from/category', type='http', auth='public',
+ website=True, csrf=False, sitemap=False, cache=300)
+ def selected_product_page(self, **kw):
+ """Function for rendering specific product into website"""
+ values = {
+ 'products': request.env['product.template'].sudo().browse(
+ int(kw.get('product_id')))
+ }
+ return http.request.render(
+ 'website_product_search_snippet.selected_products_from_category_snippet_img',
+ values)
+
+ @http.route('/all/product/selected/product/details', type='http',
+ auth='public',
+ website=True, csrf=False, sitemap=False, cache=300)
+ def product_all_page(self, **kw):
+ """Function for rendering specific product into website"""
+ values = {
+ 'products': request.env['product.template'].sudo().browse(
+ int(kw.get('product_id')))
+ }
+ return http.request.render(
+ 'website_product_search_snippet.all_products_snippet_img', values)
+
+ @http.route('/select/product/from/category', type='http', auth='public',
+ website=True, csrf=False, sitemap=False, cache=300)
+ def product_category_all_page(self, **kw):
+ """Function for rendering specific product into website"""
+ values = {
+ 'products': request.env['product.template'].sudo().browse(
+ int(kw.get('product_id')))
+ }
+ return http.request.render(
+ 'website_product_search_snippet.products_category_snippet_img',
+ values)
+
+ @http.route('/product/form/all/results', type='http', auth='public',
+ website=True, csrf=False, sitemap=False, cache=300)
+ def product_page_result(self):
+ """Function for rendering all products into website"""
+ values = {
+ 'products': request.env['product.template'].search([])
+ }
+ return http.request.render(
+ "website_product_search_snippet.product_all_result_template",
+ values)
+
+ @http.route('/category/form/all/results', type='http', auth='public',
+ website=True, csrf=False, sitemap=False, cache=300)
+ def category_page_result(self):
+ """Function for rendering all categories into website"""
+ values = {'category': request.env['product.category'].search(
+ [('id', '!=', request.env.ref('product.product_category_all').id),
+ ('id', '!=', request.env.ref('product.product_category_1').id)])}
+ return http.request.render(
+ "website_product_search_snippet.category_all_result_template",
+ values)
diff --git a/website_product_search_snippet/doc/RELEASE_NOTES.md b/website_product_search_snippet/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..3c7f1d25f
--- /dev/null
+++ b/website_product_search_snippet/doc/RELEASE_NOTES.md
@@ -0,0 +1,5 @@
+## Module
+#### 19.12.2024
+#### Version 18.0.1.0.0
+##### ADD
+- Initial commit for Product Search Snippet
diff --git a/website_product_search_snippet/models/__init__.py b/website_product_search_snippet/models/__init__.py
new file mode 100644
index 000000000..3158332b0
--- /dev/null
+++ b/website_product_search_snippet/models/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies().
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from . import product_template
diff --git a/website_product_search_snippet/models/product_template.py b/website_product_search_snippet/models/product_template.py
new file mode 100644
index 000000000..7ea7a85d2
--- /dev/null
+++ b/website_product_search_snippet/models/product_template.py
@@ -0,0 +1,81 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies().
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import api, fields, models
+
+
+class ProductTemplate(models.Model):
+ """ Inherit product_template model for fetch products and categories to
+ frontend"""
+ _inherit = 'product.template'
+
+ parent_category_id = fields.Many2one("product.category",
+ string="Parent Category")
+ category_boolean = fields.Boolean(default=True)
+ category_id = fields.Char(string='Parent Category',
+ compute="_compute_parent_id")
+
+ @api.depends('category_boolean')
+ def _compute_parent_id(self):
+ """ Get the parent category of the product"""
+ self.category_id = self.categ_id.parent_id.id
+
+ @api.model
+ def search_products(self, qry):
+ """ Search all products in product.template,
+ and pass searched products into templates """
+ products = self.env['product.template'].search([('name', 'ilike', qry)])
+ return [[product.name, product.id,
+ product.list_price,
+ '/web/image/product.template/{}/image_512/'.format(product.id),
+ product.currency_id.symbol, ]
+ for product in products]
+
+ @api.model
+ def product_category(self, qry):
+ """ Search all category in product_category,
+ and pass category into another template """
+ category = self.env['product.category'].search(
+ [('id', '!=', self.env.ref('product.product_category_all').id),
+ ('name', 'ilike', qry)])
+ return [[category.name, category.id, category.parent_id.name,
+ category.parent_id.id,
+ category.product_count]
+ for category in category]
+
+ @api.model
+ def search_all_categories(self):
+ """ Search products in all categories """
+ products = self.env['product.template'].search([])
+ return [[product.name, product.id,
+ product.list_price,
+ '/web/image/product.template/{}/image_512/'.format(product.id),
+ product.currency_id.symbol, ]
+ for product in products]
+
+ @api.model
+ def product_all_categories(self):
+ """ Search all product categories """
+ categories = self.env['product.category'].search([
+ ('id', '!=', self.env.ref('product.product_category_all').id)])
+ return [[category.name, category.id, category.parent_id.name,
+ category.parent_id.id, category.product_count]
+ for category in categories]
diff --git a/website_product_search_snippet/static/description/assets/cybro-icon.png b/website_product_search_snippet/static/description/assets/cybro-icon.png
new file mode 100644
index 000000000..06e73e11d
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/cybro-icon.png differ
diff --git a/website_product_search_snippet/static/description/assets/cybro-odoo.png b/website_product_search_snippet/static/description/assets/cybro-odoo.png
new file mode 100644
index 000000000..ed02e07a4
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/cybro-odoo.png differ
diff --git a/website_product_search_snippet/static/description/assets/h2.png b/website_product_search_snippet/static/description/assets/h2.png
new file mode 100755
index 000000000..0bfc4707d
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/h2.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/arrows-repeat.svg b/website_product_search_snippet/static/description/assets/icons/arrows-repeat.svg
new file mode 100644
index 000000000..1d7efabc5
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/arrows-repeat.svg
@@ -0,0 +1,10 @@
+
diff --git a/website_product_search_snippet/static/description/assets/icons/banner-1.png b/website_product_search_snippet/static/description/assets/icons/banner-1.png
new file mode 100644
index 000000000..c180db172
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/banner-1.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/banner-2.svg b/website_product_search_snippet/static/description/assets/icons/banner-2.svg
new file mode 100644
index 000000000..e606d97d9
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/banner-2.svg
@@ -0,0 +1,73 @@
+
diff --git a/website_product_search_snippet/static/description/assets/icons/banner-bg.png b/website_product_search_snippet/static/description/assets/icons/banner-bg.png
new file mode 100644
index 000000000..a8238d3c0
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/banner-bg.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/banner-bg.svg b/website_product_search_snippet/static/description/assets/icons/banner-bg.svg
new file mode 100644
index 000000000..b1378103e
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/banner-bg.svg
@@ -0,0 +1,9 @@
+
diff --git a/website_product_search_snippet/static/description/assets/icons/banner-call.svg b/website_product_search_snippet/static/description/assets/icons/banner-call.svg
new file mode 100644
index 000000000..96c687e81
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/banner-call.svg
@@ -0,0 +1,5 @@
+
diff --git a/website_product_search_snippet/static/description/assets/icons/banner-mail.svg b/website_product_search_snippet/static/description/assets/icons/banner-mail.svg
new file mode 100644
index 000000000..cbf0d158d
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/banner-mail.svg
@@ -0,0 +1,5 @@
+
diff --git a/website_product_search_snippet/static/description/assets/icons/banner-pattern.svg b/website_product_search_snippet/static/description/assets/icons/banner-pattern.svg
new file mode 100644
index 000000000..9c1c7e101
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/banner-pattern.svg
@@ -0,0 +1,343 @@
+
diff --git a/website_product_search_snippet/static/description/assets/icons/banner-promo.svg b/website_product_search_snippet/static/description/assets/icons/banner-promo.svg
new file mode 100644
index 000000000..d52791b11
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/banner-promo.svg
@@ -0,0 +1,147 @@
+
diff --git a/website_product_search_snippet/static/description/assets/icons/brand-pair.svg b/website_product_search_snippet/static/description/assets/icons/brand-pair.svg
new file mode 100644
index 000000000..d8db7fc1e
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/brand-pair.svg
@@ -0,0 +1,41 @@
+
diff --git a/website_product_search_snippet/static/description/assets/icons/check.png b/website_product_search_snippet/static/description/assets/icons/check.png
new file mode 100644
index 000000000..c8e85f51d
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/check.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/chevron.png b/website_product_search_snippet/static/description/assets/icons/chevron.png
new file mode 100644
index 000000000..2089293d6
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/chevron.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/close-icon.svg b/website_product_search_snippet/static/description/assets/icons/close-icon.svg
new file mode 100644
index 000000000..df8cce37a
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/close-icon.svg
@@ -0,0 +1,5 @@
+
diff --git a/website_product_search_snippet/static/description/assets/icons/cogs.png b/website_product_search_snippet/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/cogs.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/collabarate-icon.svg b/website_product_search_snippet/static/description/assets/icons/collabarate-icon.svg
new file mode 100644
index 000000000..dd4e10518
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/collabarate-icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/website_product_search_snippet/static/description/assets/icons/consultation.png b/website_product_search_snippet/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/consultation.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/cybro-logo.png b/website_product_search_snippet/static/description/assets/icons/cybro-logo.png
new file mode 100644
index 000000000..ff4b78220
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/cybro-logo.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/down.svg b/website_product_search_snippet/static/description/assets/icons/down.svg
new file mode 100644
index 000000000..f21c36271
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/website_product_search_snippet/static/description/assets/icons/ecom-black.png b/website_product_search_snippet/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/ecom-black.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/education-black.png b/website_product_search_snippet/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/education-black.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/faq.png b/website_product_search_snippet/static/description/assets/icons/faq.png
new file mode 100644
index 000000000..4250b5b81
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/faq.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/feature-icon.svg b/website_product_search_snippet/static/description/assets/icons/feature-icon.svg
new file mode 100644
index 000000000..fa0ea6850
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/feature-icon.svg
@@ -0,0 +1,10 @@
+
diff --git a/website_product_search_snippet/static/description/assets/icons/feature.png b/website_product_search_snippet/static/description/assets/icons/feature.png
new file mode 100644
index 000000000..ac7a785c0
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/feature.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/gear.svg b/website_product_search_snippet/static/description/assets/icons/gear.svg
new file mode 100644
index 000000000..0cc66b6ea
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/gear.svg
@@ -0,0 +1,10 @@
+
diff --git a/website_product_search_snippet/static/description/assets/icons/hero.gif b/website_product_search_snippet/static/description/assets/icons/hero.gif
new file mode 100644
index 000000000..566337315
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/hero.gif differ
diff --git a/website_product_search_snippet/static/description/assets/icons/hire-odoo.svg b/website_product_search_snippet/static/description/assets/icons/hire-odoo.svg
new file mode 100644
index 000000000..e1ac089b0
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/hire-odoo.svg
@@ -0,0 +1,12 @@
+
diff --git a/website_product_search_snippet/static/description/assets/icons/hotel-black.png b/website_product_search_snippet/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/hotel-black.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/license.png b/website_product_search_snippet/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/license.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/life-ring-icon.svg b/website_product_search_snippet/static/description/assets/icons/life-ring-icon.svg
new file mode 100644
index 000000000..3ae6e1d89
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/life-ring-icon.svg
@@ -0,0 +1,13 @@
+
diff --git a/website_product_search_snippet/static/description/assets/icons/lifebuoy.png b/website_product_search_snippet/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/lifebuoy.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/mail.svg b/website_product_search_snippet/static/description/assets/icons/mail.svg
new file mode 100644
index 000000000..1eedde695
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/mail.svg
@@ -0,0 +1,3 @@
+
diff --git a/website_product_search_snippet/static/description/assets/icons/manufacturing-black.png b/website_product_search_snippet/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/manufacturing-black.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/notes.png b/website_product_search_snippet/static/description/assets/icons/notes.png
new file mode 100644
index 000000000..ee5e95404
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/notes.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/notification icon.svg b/website_product_search_snippet/static/description/assets/icons/notification icon.svg
new file mode 100644
index 000000000..053189973
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/notification icon.svg
@@ -0,0 +1,10 @@
+
diff --git a/website_product_search_snippet/static/description/assets/icons/odoo-consultancy.svg b/website_product_search_snippet/static/description/assets/icons/odoo-consultancy.svg
new file mode 100644
index 000000000..e05f65bde
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/odoo-consultancy.svg
@@ -0,0 +1,4 @@
+
diff --git a/website_product_search_snippet/static/description/assets/icons/odoo-licencing.svg b/website_product_search_snippet/static/description/assets/icons/odoo-licencing.svg
new file mode 100644
index 000000000..2606c88b0
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/odoo-licencing.svg
@@ -0,0 +1,3 @@
+
diff --git a/website_product_search_snippet/static/description/assets/icons/odoo-logo.png b/website_product_search_snippet/static/description/assets/icons/odoo-logo.png
new file mode 100644
index 000000000..0e4d0eb5a
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/odoo-logo.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/patter.svg b/website_product_search_snippet/static/description/assets/icons/patter.svg
new file mode 100644
index 000000000..25c9c0a8f
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/patter.svg
@@ -0,0 +1,9 @@
+
diff --git a/website_product_search_snippet/static/description/assets/icons/pattern1.png b/website_product_search_snippet/static/description/assets/icons/pattern1.png
new file mode 100644
index 000000000..09ab0fb2d
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/pattern1.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/pos-black.png b/website_product_search_snippet/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/pos-black.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/puzzle-piece-icon.svg b/website_product_search_snippet/static/description/assets/icons/puzzle-piece-icon.svg
new file mode 100644
index 000000000..3e9ad9373
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/puzzle-piece-icon.svg
@@ -0,0 +1,10 @@
+
diff --git a/website_product_search_snippet/static/description/assets/icons/puzzle.png b/website_product_search_snippet/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/puzzle.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/replace-icon.svg b/website_product_search_snippet/static/description/assets/icons/replace-icon.svg
new file mode 100644
index 000000000..d0e3a7af1
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/replace-icon.svg
@@ -0,0 +1,10 @@
+
diff --git a/website_product_search_snippet/static/description/assets/icons/restaurant-black.png b/website_product_search_snippet/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/restaurant-black.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/screenshot-main.png b/website_product_search_snippet/static/description/assets/icons/screenshot-main.png
new file mode 100644
index 000000000..575f8e676
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/screenshot-main.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/screenshot.png b/website_product_search_snippet/static/description/assets/icons/screenshot.png
new file mode 100644
index 000000000..cef272529
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/screenshot.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/service-black.png b/website_product_search_snippet/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/service-black.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/skype-fill.svg b/website_product_search_snippet/static/description/assets/icons/skype-fill.svg
new file mode 100644
index 000000000..c17423639
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/skype-fill.svg
@@ -0,0 +1,10 @@
+
diff --git a/website_product_search_snippet/static/description/assets/icons/skype.png b/website_product_search_snippet/static/description/assets/icons/skype.png
new file mode 100644
index 000000000..51b409fb3
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/skype.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/skype.svg b/website_product_search_snippet/static/description/assets/icons/skype.svg
new file mode 100644
index 000000000..df3dad39b
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/skype.svg
@@ -0,0 +1,3 @@
+
diff --git a/website_product_search_snippet/static/description/assets/icons/star-1.svg b/website_product_search_snippet/static/description/assets/icons/star-1.svg
new file mode 100644
index 000000000..7e55ab162
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/star-1.svg
@@ -0,0 +1,53 @@
+
+
+
diff --git a/website_product_search_snippet/static/description/assets/icons/star-2.svg b/website_product_search_snippet/static/description/assets/icons/star-2.svg
new file mode 100644
index 000000000..5ae9f507a
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/star-2.svg
@@ -0,0 +1,9 @@
+
diff --git a/website_product_search_snippet/static/description/assets/icons/support.png b/website_product_search_snippet/static/description/assets/icons/support.png
new file mode 100644
index 000000000..4f18b8b82
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/support.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/test-1 - Copy.png b/website_product_search_snippet/static/description/assets/icons/test-1 - Copy.png
new file mode 100644
index 000000000..f6a902663
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/test-1 - Copy.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/test-1.png b/website_product_search_snippet/static/description/assets/icons/test-1.png
new file mode 100644
index 000000000..0908add2b
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/test-1.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/test-2.png b/website_product_search_snippet/static/description/assets/icons/test-2.png
new file mode 100644
index 000000000..4671fe91e
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/test-2.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/trading-black.png b/website_product_search_snippet/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/trading-black.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/training.png b/website_product_search_snippet/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/training.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/translate.svg b/website_product_search_snippet/static/description/assets/icons/translate.svg
new file mode 100644
index 000000000..af9c8a1aa
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/translate.svg
@@ -0,0 +1,10 @@
+
diff --git a/website_product_search_snippet/static/description/assets/icons/update.png b/website_product_search_snippet/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/update.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/user.png b/website_product_search_snippet/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/user.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/video.png b/website_product_search_snippet/static/description/assets/icons/video.png
new file mode 100644
index 000000000..576705b17
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/video.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/whatsapp.png b/website_product_search_snippet/static/description/assets/icons/whatsapp.png
new file mode 100644
index 000000000..d513a5356
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/whatsapp.png differ
diff --git a/website_product_search_snippet/static/description/assets/icons/wrench-icon.svg b/website_product_search_snippet/static/description/assets/icons/wrench-icon.svg
new file mode 100644
index 000000000..174b5a465
--- /dev/null
+++ b/website_product_search_snippet/static/description/assets/icons/wrench-icon.svg
@@ -0,0 +1,10 @@
+
diff --git a/website_product_search_snippet/static/description/assets/icons/wrench.png b/website_product_search_snippet/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/wrench.png differ
diff --git a/website_product_search_snippet/static/description/assets/modules/b1.png b/website_product_search_snippet/static/description/assets/modules/b1.png
new file mode 100644
index 000000000..66765b17a
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/modules/b1.png differ
diff --git a/website_product_search_snippet/static/description/assets/modules/b2.png b/website_product_search_snippet/static/description/assets/modules/b2.png
new file mode 100644
index 000000000..e03a55991
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/modules/b2.png differ
diff --git a/website_product_search_snippet/static/description/assets/modules/b3.png b/website_product_search_snippet/static/description/assets/modules/b3.png
new file mode 100644
index 000000000..e03a55991
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/modules/b3.png differ
diff --git a/website_product_search_snippet/static/description/assets/modules/b4.png b/website_product_search_snippet/static/description/assets/modules/b4.png
new file mode 100644
index 000000000..efb8772d9
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/modules/b4.png differ
diff --git a/website_product_search_snippet/static/description/assets/modules/b5.png b/website_product_search_snippet/static/description/assets/modules/b5.png
new file mode 100644
index 000000000..f51e30182
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/modules/b5.png differ
diff --git a/website_product_search_snippet/static/description/assets/modules/b6.png b/website_product_search_snippet/static/description/assets/modules/b6.png
new file mode 100644
index 000000000..908adf794
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/modules/b6.png differ
diff --git a/website_product_search_snippet/static/description/assets/screenshots/screenshot1.png b/website_product_search_snippet/static/description/assets/screenshots/screenshot1.png
new file mode 100644
index 000000000..a0bc0cc6d
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/screenshots/screenshot1.png differ
diff --git a/website_product_search_snippet/static/description/assets/screenshots/screenshot2.png b/website_product_search_snippet/static/description/assets/screenshots/screenshot2.png
new file mode 100644
index 000000000..a9fa3bbd9
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/screenshots/screenshot2.png differ
diff --git a/website_product_search_snippet/static/description/assets/screenshots/screenshot3.png b/website_product_search_snippet/static/description/assets/screenshots/screenshot3.png
new file mode 100644
index 000000000..3a8111fae
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/screenshots/screenshot3.png differ
diff --git a/website_product_search_snippet/static/description/assets/screenshots/screenshot4.png b/website_product_search_snippet/static/description/assets/screenshots/screenshot4.png
new file mode 100644
index 000000000..6a3f3533c
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/screenshots/screenshot4.png differ
diff --git a/website_product_search_snippet/static/description/assets/screenshots/screenshot5.png b/website_product_search_snippet/static/description/assets/screenshots/screenshot5.png
new file mode 100644
index 000000000..5af248009
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/screenshots/screenshot5.png differ
diff --git a/website_product_search_snippet/static/description/assets/screenshots/screenshot6.png b/website_product_search_snippet/static/description/assets/screenshots/screenshot6.png
new file mode 100644
index 000000000..42267767d
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/screenshots/screenshot6.png differ
diff --git a/website_product_search_snippet/static/description/assets/screenshots/screenshot7.png b/website_product_search_snippet/static/description/assets/screenshots/screenshot7.png
new file mode 100644
index 000000000..cb5ccfbec
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/screenshots/screenshot7.png differ
diff --git a/website_product_search_snippet/static/description/assets/y18.jpg b/website_product_search_snippet/static/description/assets/y18.jpg
new file mode 100755
index 000000000..eea1714f2
Binary files /dev/null and b/website_product_search_snippet/static/description/assets/y18.jpg differ
diff --git a/website_product_search_snippet/static/description/banner.jpg b/website_product_search_snippet/static/description/banner.jpg
new file mode 100644
index 000000000..829c11df2
Binary files /dev/null and b/website_product_search_snippet/static/description/banner.jpg differ
diff --git a/website_product_search_snippet/static/description/icon.png b/website_product_search_snippet/static/description/icon.png
new file mode 100644
index 000000000..25c0eb155
Binary files /dev/null and b/website_product_search_snippet/static/description/icon.png differ
diff --git a/website_product_search_snippet/static/description/index.html b/website_product_search_snippet/static/description/index.html
new file mode 100644
index 000000000..085e048df
--- /dev/null
+++ b/website_product_search_snippet/static/description/index.html
@@ -0,0 +1,1041 @@
+
+
+
+
+
+ Product Search Snippet
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Community
+
+
+ Enterprise
+
+
+ Odoo.sh
+
+
+
+
+
+
+
+
+
+ This App Allows to Search Products in Category With the Help
+ of Snippet.
+
+ Drag the Product Search Snippet
+
+ and save it.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Selecting All Categories and
+
+ Search product.
+
+
+
+
+ When selecting "All Categories," the system
+ should be able to display All Products as
+ users type in the Search Bar, and users
+ should have the option to choose a specific
+ Product.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ selecting a Product and details of
+
+ that Product.
+
+
+
+
+ Upon selecting a Product, the system should
+ direct users to the details of that Product.
+ Within the product details page, there
+ should be an option available for users to
+ navigate Back to the previous page.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ selecting
+
+ Category.
+
+
+
+
+ Upon selecting "Category", the Search Bar
+ should be filtered according to the chosen
+ Category. This allows users to narrow down
+ their search, and they should be able to
+ select a Category from there. If no products
+ are available in the selected Category, the
+ color red will be displayed. Additionally, a
+ button labeled "See All Category" will be
+ provided to users.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Get all Product
+
+ Categories.
+
+
+
+
+ Get all Product Categories. Additionally,
+ utilize red and blue colors to signify the
+ product count within each category.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Clicking on
+
+ Category.
+
+
+
+
+ Clicking on a Category should lead users to
+ a dedicated page that displays Products
+ falling under that specific Category.There
+ also contains a Search Bar for search
+ products
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ No Products Available under the
+
+
+ selected Category.
+
+
+
+
+ When there are No Products Available under
+ the selected Category, the system should
+ display the following message.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Search for
+ Products based on specific Categories as well as
+ across All Categories.
+
+
+
+
+
+
+
+
+
+
+
+ Product details
+ can be viewed by clicking on the respective
+ Products.
+ You can customize the
+ appearance of the search
+ results by modifying the
+ CSS styles in the style
+ section of the snippet.
+ Adjust the properties
+ such as padding, border,
+ background, and text
+ styles to match your
+ website's design
+
+
+
+
+
+
+
diff --git a/website_product_search_snippet/static/src/css/website_product_search_snippet.scss b/website_product_search_snippet/static/src/css/website_product_search_snippet.scss
new file mode 100644
index 000000000..4e5ec1e35
--- /dev/null
+++ b/website_product_search_snippet/static/src/css/website_product_search_snippet.scss
@@ -0,0 +1,25 @@
+.heading{
+ color: #fff6f8;
+ background: #575758;
+ font-size: 47px;
+ font-weight: bold;
+}
+.search_bar{
+ margin-left: 47px;
+ border-radius: 15px;
+}
+.search_container{
+ background: #9c9a9a
+}
+#sub_temp{
+ background: #e9e9f1;
+}
+#category_template{
+ background: #e9e9f1;
+}
+#table_header {
+ background-color: #bababa;
+ color: white;
+}
+#table_row:nth-child(even){background-color: #ededed}
+#category_table:nth-child(even){background-color: #c3c3c3}
\ No newline at end of file
diff --git a/website_product_search_snippet/static/src/img/icon.png b/website_product_search_snippet/static/src/img/icon.png
new file mode 100644
index 000000000..06cca8e93
Binary files /dev/null and b/website_product_search_snippet/static/src/img/icon.png differ
diff --git a/website_product_search_snippet/static/src/js/search_bar.js b/website_product_search_snippet/static/src/js/search_bar.js
new file mode 100644
index 000000000..cae8a0141
--- /dev/null
+++ b/website_product_search_snippet/static/src/js/search_bar.js
@@ -0,0 +1,52 @@
+/** @odoo-module **/
+
+import publicWidget from "@web/legacy/js/public/public_widget";
+
+
+publicWidget.registry.portalDetails = publicWidget.Widget.extend({
+ /**
+ * This widget handles search functionality within a product table on the website.
+ * It listens for keyup events on the search input field and filters table rows
+ * based on the user's input.
+ */
+ selector: '.product_search_bar',
+ events: {
+ 'keyup .search_product_bar': '_onKeyUp',
+ },
+ /**
+ * Initializes the widget and starts the functionality.
+ *
+ * @returns {Promise} - Resolves when the widget has fully started.
+ */
+ start: function () {
+ this._super.apply(this, arguments);
+ },
+ /**
+ * Handles the keyup event to filter table data.
+ *
+ * This function retrieves the value from the search input field, converts it to
+ * uppercase, and then compares it with the text content of each table cell.
+ * Rows that contain a match are displayed, while others are hidden.
+ *
+ * @private
+ */
+ _onKeyUp: function () {
+ var input, filter, table, tr, td, i, txtValue;
+ input = this.$el.find("#searchBarInput")[0];
+ filter = input.value.toUpperCase();
+ table = this.$el.find("#category_table")
+ tr = table[0].children.category_table_body.children;
+ for (i = 0; i < tr.length; i++) {
+ td = tr[i].children;
+ for (var j = 0; j < td.length; j++) {
+ txtValue = td[j].textContent || td[j].innerText;
+ if (txtValue.toUpperCase().indexOf(filter) > -1) {
+ tr[i].style.display = "";
+ break;
+ } else {
+ tr[i].style.display = "none";
+ }
+ }
+ }
+ },
+});
diff --git a/website_product_search_snippet/static/src/js/website_product_search_snippet.js b/website_product_search_snippet/static/src/js/website_product_search_snippet.js
new file mode 100644
index 000000000..b47530a58
--- /dev/null
+++ b/website_product_search_snippet/static/src/js/website_product_search_snippet.js
@@ -0,0 +1,135 @@
+/** @odoo-module **/
+import publicWidget from "@web/legacy/js/public/public_widget";
+import { rpc } from "@web/core/network/rpc";
+import {renderToElement} from "@web/core/utils/render";
+
+var Dynamic = publicWidget.Widget.extend({
+ selector: '.dynamic_search_snippet',
+ events: {
+ 'click .search_container': '_onClick',
+ 'keyup .search_bar': '_onKeyUp',
+ 'change .category_options': '_filterProducts',
+ },
+ /**
+ * _onClick: Clears the search input field.
+ *
+ * This function is triggered when a specific element is clicked. It clears the value of
+ * the input field with the ID `#searchInput`.
+ *
+ * Functionality:
+ * 1. Locates the input field with the ID `#searchInput` within the current element (`this.$el`).
+ * 2. Sets the value of the `#searchInput` field to an empty string, effectively clearing any text that was entered.
+ */
+ _onClick: function () {
+ this.$el.find('#searchInput').val("");
+ },
+ /**
+ * _onKeyUp: Asynchronously searches and filters products based on the user's input and selected category.
+ *
+ * This function is triggered when a key is released while typing in a search input field.
+ * It captures the current search query and the selected category, then calls the appropriate
+ * Odoo model method to fetch the relevant products. The fetched products are rendered in the
+ * specified HTML element using the corresponding QWeb template.
+ *
+ * @param {Object} ev - The event object associated with the keyup action.
+ *
+ * Functionality:
+ * 1. Captures the selected category from a dropdown menu with the class `.category_options`.
+ * 2. Retrieves the user's search query from the input field.
+ * 3. If "All Categories" is selected:
+ * - Calls the `search_products` method on the `product.template` model with the search query as an argument.
+ * - Renders the result using the 'website_product_search_snippet.product_template' template.
+ * 4. If "Category" is selected:
+ * - Calls the `product_category` method on the `product.template` model with the search query as an argument.
+ * - Renders the result using the 'website_product_search_snippet.product_category' template.
+ * 5. Updates the HTML element with the class `.qweb_product_id` to display the filtered products based on the search query and selected category.
+ *
+ * Note: The function uses `jsonrpc` to make RPC calls to the Odoo backend.
+ */
+ _onKeyUp: async function (ev) {
+ var self = this;
+ var category = this.$el.find(".category_options").find(":selected").text();
+ var qry = $(ev.currentTarget).val()
+ if (category === "All Categories") {
+ await rpc('/web/dataset/call_kw', {
+ model: 'product.template',
+ method: 'search_products',
+ args: [qry],
+ kwargs: {},
+ }).then(function (result) {
+ self.$('.qweb_product_id').html("");
+ self.$('.qweb_product_id').append(renderToElement('website_product_search_snippet.product_template', {
+ result: result
+ }));
+ });
+ }
+ if (category === "Category") {
+ var self = this;
+ await rpc('/web/dataset/call_kw', {
+ model: 'product.template',
+ method: 'product_category',
+ args: [qry],
+ kwargs: {},
+ }).then(function (result) {
+ self.$('.qweb_product_id').html("");
+ self.$('.qweb_product_id').append(renderToElement('website_product_search_snippet.product_category', {
+ result: result
+ }));
+ });
+ }
+ },
+ /**
+ * _filterProducts: Asynchronously filters products based on the selected category.
+ *
+ * This function is triggered by an event (e.g., a change in category selection).
+ * It checks the selected category from a dropdown menu and calls the appropriate
+ * Odoo model method to fetch the relevant products. The fetched products are then
+ * rendered in the specified HTML element using the corresponding QWeb template.
+ *
+ * @param {Object} ev - The event object associated with the action triggering this function.
+ *
+ * Functionality:
+ * 1. Retrieves the selected category from a dropdown menu with class `.category_options`.
+ * 2. If "All Categories" is selected, it calls the `search_all_categories` method
+ * on the `product.template` model to fetch all products, and renders the result
+ * using the 'website_product_search_snippet.product_template' template.
+ * 3. If "Category" is selected, it calls the `product_all_categories` method on
+ * the `product.template` model to fetch products by category, and renders the
+ * result using the 'website_product_search_snippet.product_category' template.
+ * 4. Updates the HTML element with class `.qweb_product_id` to display the filtered products.
+ *
+ * Note: The function uses `jsonrpc` to make RPC calls to the Odoo backend.
+ */
+ _filterProducts: async function (ev) {
+ var self = this
+ var category = this.$el.find(".category_options").find(":selected").text();
+ if (category === "All Categories") {
+ await rpc('/web/dataset/call_kw', {
+ model: 'product.template',
+ method: 'search_all_categories',
+ args: [],
+ kwargs: {}
+ }).then(function (result) {
+ self.$('.qweb_product_id').html("");
+ self.$('.qweb_product_id').append(renderToElement('website_product_search_snippet.product_template', {
+ result: result
+ }));
+ });
+ }
+ if (category === "Category") {
+ await rpc('/web/dataset/call_kw', {
+ model: 'product.template',
+ method: 'product_all_categories',
+ args: [],
+ kwargs: {}
+ }).then(function (result) {
+ self.$('.qweb_product_id').html("");
+ self.$('.qweb_product_id').append(renderToElement('website_product_search_snippet.product_category', {
+ result: result
+ }));
+ });
+ }
+ },
+});
+publicWidget.registry.dynamic_search_snippet = Dynamic;
+return Dynamic;
diff --git a/website_product_search_snippet/static/src/xml/category_templates.xml b/website_product_search_snippet/static/src/xml/category_templates.xml
new file mode 100644
index 000000000..7c7d75cba
--- /dev/null
+++ b/website_product_search_snippet/static/src/xml/category_templates.xml
@@ -0,0 +1,60 @@
+
+
+
+
+