From 078030b7dcf4391c8d5db61aa0ec46d5f66eea94 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Korhan=20=C3=96ZBEK?= <korhanozbek44@gmail.com>
Date: Sun, 8 Jan 2023 22:46:08 +0300
Subject: [PATCH 1/2] feat: add backdrop static option support

---
 .../src/components/offcanvas/COffcanvas.tsx         | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/packages/coreui-react/src/components/offcanvas/COffcanvas.tsx b/packages/coreui-react/src/components/offcanvas/COffcanvas.tsx
index a504903b..d1598751 100644
--- a/packages/coreui-react/src/components/offcanvas/COffcanvas.tsx
+++ b/packages/coreui-react/src/components/offcanvas/COffcanvas.tsx
@@ -11,7 +11,7 @@ export interface COffcanvasProps extends HTMLAttributes<HTMLDivElement> {
   /**
    * Apply a backdrop on body while offcanvas is open.
    */
-  backdrop?: boolean
+  backdrop?: boolean | string
   /**
    * A string of all className you want applied to the base component.
    */
@@ -105,6 +105,11 @@ export const COffcanvas = forwardRef<HTMLDivElement, COffcanvasProps>(
     const handleDismiss = () => {
       setVisible(false)
     }
+    const handleBackdropDismiss = () => {
+      if (backdrop !== 'static') {
+        setVisible(false)
+      }
+    }
 
     const handleKeyDown = useCallback(
       (event: React.KeyboardEvent<HTMLDivElement>) => {
@@ -154,7 +159,7 @@ export const COffcanvas = forwardRef<HTMLDivElement, COffcanvasProps>(
             createPortal(
               <CBackdrop
                 className="offcanvas-backdrop"
-                onClick={handleDismiss}
+                onClick={handleBackdropDismiss}
                 visible={_visible}
               />,
               document.body,
@@ -162,7 +167,7 @@ export const COffcanvas = forwardRef<HTMLDivElement, COffcanvasProps>(
           : backdrop && (
               <CBackdrop
                 className="offcanvas-backdrop"
-                onClick={handleDismiss}
+                onClick={handleBackdropDismiss}
                 visible={_visible}
               />
             )}
@@ -172,7 +177,7 @@ export const COffcanvas = forwardRef<HTMLDivElement, COffcanvasProps>(
 )
 
 COffcanvas.propTypes = {
-  backdrop: PropTypes.bool,
+  backdrop: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),
   children: PropTypes.node,
   className: PropTypes.string,
   keyboard: PropTypes.bool,

From b4792cc1c652eba4faf4dcb567ed65f273caf6bc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C5=81ukasz=20Holeczek?= <lukasz@holeczek.pl>
Date: Fri, 27 Jan 2023 10:30:48 +0100
Subject: [PATCH 2/2] Update COffcanvas.tsx

---
 .../coreui-react/src/components/offcanvas/COffcanvas.tsx     | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/packages/coreui-react/src/components/offcanvas/COffcanvas.tsx b/packages/coreui-react/src/components/offcanvas/COffcanvas.tsx
index d1598751..b05335c9 100644
--- a/packages/coreui-react/src/components/offcanvas/COffcanvas.tsx
+++ b/packages/coreui-react/src/components/offcanvas/COffcanvas.tsx
@@ -11,7 +11,7 @@ export interface COffcanvasProps extends HTMLAttributes<HTMLDivElement> {
   /**
    * Apply a backdrop on body while offcanvas is open.
    */
-  backdrop?: boolean | string
+  backdrop?: boolean | 'static'
   /**
    * A string of all className you want applied to the base component.
    */
@@ -105,6 +105,7 @@ export const COffcanvas = forwardRef<HTMLDivElement, COffcanvasProps>(
     const handleDismiss = () => {
       setVisible(false)
     }
+    
     const handleBackdropDismiss = () => {
       if (backdrop !== 'static') {
         setVisible(false)
@@ -177,7 +178,7 @@ export const COffcanvas = forwardRef<HTMLDivElement, COffcanvasProps>(
 )
 
 COffcanvas.propTypes = {
-  backdrop: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),
+  backdrop: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf<'static'>(['static'])]),
   children: PropTypes.node,
   className: PropTypes.string,
   keyboard: PropTypes.bool,