1

How can i prevent reloading page when clicking on the one of SubNavigationItems?

As i'm using shopify/polaris I came across such an issue, when I click on the subNavaigtionItem, the page reloads. This does not happen when I simply switch between simple items.

Code:

import { Navigation } from '@shopify/polaris';
import './SettingsNavbar.scss';
import React, { useCallback, useEffect, useState } from 'react';
import './SettingsNavbar.scss';
import {
  CreditCardMajor,
  CashDollarMajor,
  ToolsMajor,
  LogoBlockMajor,
  DiscountsMajor,
  CartMajor,
  CodeMajor,
  AffiliateMajor,
} from '@shopify/polaris-icons';
import { useLocation, useNavigate } from 'react-router-dom';
const tabs  = ["general",'subscription','dynamic-pricing', "building-blocks", "shopify-discount-codes", 'checkout-options',"assets", "integrations"];

export const SettingsNavbar: React.FC = () => {
  const location = useLocation();
  const navigate = useNavigate();
  const [activeSettingsPage, setActiveSettingsPage] = useState('');
  const handleNavItemClick = useCallback(
    (tabTitle: string, path?: string) => {
      if (path) {
        navigate(path);
      }
    },
    [navigate]
  );
  useEffect(()=>{
    const active = tabs.find((el)=>location.pathname.includes(el))
    setActiveSettingsPage(active || '')
  },[location.pathname])

  return (
    <div className='SettingsNavBar'>
      <Navigation location={location.pathname}>
        <Navigation.Section
          items={[
            {
              onClick: () => handleNavItemClick('general', 'general'),
              selected: activeSettingsPage === 'general',
              label: 'General settings',
              icon: ToolsMajor,
            },
            {
              url:location.pathname,
              onClick: () => handleNavItemClick('building-blocks', 'building-blocks/sticky-bar'),
              selected: activeSettingsPage === 'building-blocks',
              label: 'Building blocks',
              icon: LogoBlockMajor,
              subNavigationItems: [
                {
                  url: '/settings/building-blocks/sticky-bar',
                  disabled: false,
                  label: 'Sticky bar',
                },
                {
                  url: '/settings/building-blocks/notification',
                  disabled: false,
                  label: 'Notification',
                },
                {
                  url: '/settings/building-blocks/collection-badge',
                  disabled: false,
                  label: 'Collection badge',
                },
                {
                  url: '/building-blocks/product-page-banner',
                  disabled: false,
                  label: 'Product page banner',
                },
                {
                  url: '/building-blocks/countdown-clock',
                  disabled: false,
                  label: 'Countdown clock',
                },
                {
                  url: '/cart-promotion-code-field',
                  disabled: false,
                  label: 'Cart promotion code field',
                },
                {
                  url: '/cart-promotion-summary',
                  disabled: false,
                  label: 'Cart promotion summary',
                },
              ],
            },
          ]}
        />
      </Navigation>
    </div>
  );
};

I tried to pass the event prop inside onClick function in the subNavigationItems but it doesn't allow. Also url prop is required.

0 Answers0