How to save NavList state?

I have tabs with navigation inside the ContentPage.

How can I save the currently active tab and switch to it after refreshing the page.

That is, what parameter can I save in Querymanager and on which element should it be assigned after a reboot?

This thread might be helpful.

1 Like

Thank you very much!

It seems like I did everything according to the example, only instead of a variable I use a parameter in the QueryManager, the tab itself is saved, but its contents are not automatically updated

<a class="nav-link" id="navTabs1_2_tab" href="#" data-bs-target="#navTabs1_2" role="tab" aria-controls="navTabs1_2" aria-selected="false" dmx-on:click="month_util_data.load({period: distr_period.value.toISODate().formatDate('MM-yyyy'), utility: select_utility.selectedValue, offset: query1.data.offset},true);query1.set('tab_select','distribution')" dmx-class:active="query1.data.tab_select=='distribution'" data-bs-toggle="tab">Distribution</a>
<div class="tab-pane fade text-center" id="navTabs1_2" role="tabpanel" aria-labelledby="navTabs1_2_tab" dmx-class:active="query1.data.tab_select=='distribution'" dmx-show="query1.data.tab_select=='distribution'">``

The example was created quite a while ago - using Bootstrap 4. If you’re using Bootstrap 5, you probably need to make a few changes - eg changing data-toggle to data-bs-toggle etc.

I didn’t understand where to check this, in this case I didn’t write the code manually, but simply set the conditions in the standard interface and the click event

I use Bootstrap5 and seems these thinks are correct?

I’m not sure if you mean the problem is resolved or not. In any case, I switched to Bootstrap 5 and accepted Wappler’s conversion suggestions - and it worked fine, apart from some minor text styling issues.

I originally had Bootstrap5 - the contents of the selected tab are not displayed yet - this is the problem

I found the reason why the tab was not displayed, but I don’t understand - this is a bug or a feature of using classes. The reason is that the standard ‘Show’ property does not set the ‘show’ class and can only be set via Class Toogle - then it works

2 Likes

I’m glad you got it working. I don’t think I used dmx-show in my example. I used dmx-class:show, which, as you mention, works.

1 Like

Hello Guys,

I am unable to refresh the active nav tab & land on the same tab. I tried following @vv-a2007 solution, however, upon refresh the first nav tab opens always.

I followed @TomD 's article for setting up the nav tab & managing them using a variable.

The variable value, tab_selected.value= about

<dmx-value id="tab_selected" dmx-bind:value="'about'"></dmx-value>

Code for Nav Links:

<div class="container mt-3">
    <div class="row">
        <div class="col">
            <p class="float-right  ">var_tab_selected: {{tab_selected.value}}</p>
            <ul class="nav nav-tabs" id="navTabs1_tabs" role="tablist">
                <li class="nav-item">
                    <a class="nav-link active" dmx-class:active="tab_selected.value == 'about'" id="navTabs1_1_tab" data-bs-toggle="tab" href="#" data-bs-target="#navTabs1_1" role="tab" aria-controls="navTabs1_1" aria-selected="false" dmx-on:click="tab_selected.setValue('about')">About</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" dmx-class:active="tab_selected.value == 'address'" id="navTabs1_2_tab" data-bs-toggle="tab" href="#" data-bs-target="#navTabs1_2" role="tab" aria-controls="navTabs1_2" aria-selected="false" dmx-on:click="tab_selected.setValue('address')" dmx-class:show="tab_selected.value == 'address'">Address</a>
                </li>

image

Code for Nav Tabs:

<div class="tab-content" id="navTabs1_content">
                <div class="tab-pane fade" dmx-class:show="tab_selected.value == 'about'" dmx-class:active="tab_selected.value == 'about'" id="navTabs1_1" role="tabpanel">

<div class="tab-pane fade" dmx-class:show="tab_selected.value == 'address'" dmx-class:active="tab_selected.value == 'address'" id="navTabs1_2" role="tabpanel"> 

Here’s a slightly modified version of the example I gave in the thread linked to above. This version uses Bootstrap 5. If you simply copy/paste this into a new file, it should work and hopefully help you find a solution.

<!doctype html>
<html>

<head>
	<base href="/">
	<meta charset="UTF-8">
	<title>Untitled Document</title>
	<script src="dmxAppConnect/dmxAppConnect.js"></script>

	<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.12.0/css/all.css" integrity="sha384-REHJTs1r2ErKBuJB0fCK99gCYsVjwxHrSU0N7I1zl9vZbggVJXRMsv/sLlOAGb4M" crossorigin="anonymous">
	<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
	<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous" />
	<script src="dmxAppConnect/dmxBootstrap5Navigation/dmxBootstrap5Navigation.js" defer></script>
</head>

<body is="dmx-app" id="" dmx-class="">
	<dmx-value id="tab_selected" dmx-bind:value="'default'"></dmx-value>
	<div class="container">
		<div class="row mt-5">
			<div class="col">
				<p class="float-end">var (tab_selected): {{tab_selected.value}}</p>
				<ul class="nav nav-tabs" id="navTabs1_tabs" role="tablist">
					<li class="nav-item">
						<a class="nav-link" dmx-class:active="tab_selected.value == 'home'" id="navTabs1_1_tab" href="#" role="tab" aria-controls="navTabs1_1" aria-selected="false" dmx-on:click="tab_selected.setValue('home')" data-bs-toggle="tab" data-bs-target="#navTabs1_1">Home</a>
					</li>
					<li class="nav-item">
						<a class="nav-link" dmx-class:active="tab_selected.value == 'default'" id="navTabs1_2_tab" href="#" role="tab" aria-controls="navTabs1_2" aria-selected="false" dmx-on:click="tab_selected.setValue('default')" data-bs-toggle="tab" data-bs-target="#navTabs1_2">Default</a>
					</li>
					<li class="nav-item">
						<a class="nav-link" dmx-class:active="tab_selected.value == 'success'" id="navTabs1_3_tab1" href="#" role="tab" aria-controls="navTabs1_3" aria-selected="false" dmx-on:click="tab_selected.setValue('success')" data-bs-toggle="tab" data-bs-target="#navTabs1_3">Success</a>
					</li>
				</ul>
				<div class="tab-content" id="navTabs1_content">
					<div class="tab-pane fade" dmx-class:show="tab_selected.value == 'home'" dmx-class:active="tab_selected.value == 'home'" id="navTabs1_1" role="tabpanel">
						<p>HOME<br>Consequat occaecat ullamco amet non eiusmod nostrud dolore irure incididunt est duis anim sunt officia. </p>
					</div>
					<div class="tab-pane fade" dmx-class:show="tab_selected.value == 'default'" dmx-class:active="tab_selected.value == 'default'" id="navTabs1_2" role="tabpanel">
						<p>DEFAULT<br>Ad pariatur nostrud pariatur exercitation ipsum ipsum culpa mollit commodo mollit ex.</p>
					</div>
					<div class="tab-pane fade" dmx-class:show="tab_selected.value == 'success'" dmx-class:active="tab_selected.value == 'success'" id="navTabs1_3" role="tabpanel">
						<p>SUCCESS<br>Est quis nulla laborum officia ad nisi ex nostrud culpa Lorem excepteur aliquip dolor aliqua irure ex. </p>
					</div>
				</div>
			</div>
		</div>
		<div class="row">
			<div class="col">
				<div class="btn-group" role="group" aria-label="Button Group"><button id="btn1" class="btn btn-secondary" dmx-on:click="tab_selected.setValue('home')">Home</button>
					<button id="btn2" class="btn btn-secondary" dmx-on:click="tab_selected.setValue('default')">Default</button>
					<button id="btn3" class="btn btn-secondary" dmx-on:click="tab_selected.setValue('success')">Success</button>
				</div>
			</div>
		</div>
	</div>
	<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
</body>

</html>