Skip to content

Commit 6a15057

Browse files
committed
refactor: update dataset selection functionality and UI
- Replace "Select displayed datasets" and "Deselect displayed datasets" buttons with a single "Toggle filtered" button for improved usability. - Update event handler to toggle selection for filtered datasets based on current selection state. - Enhance styling for buttons and icons to improve visual feedback and interaction. - Adjust CSS for button hover and active states to reflect danger color scheme.
1 parent 0b0a969 commit 6a15057

5 files changed

Lines changed: 46 additions & 48 deletions

File tree

docs/css/filter/filter-control-bar.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
background: white;
6363
border-color: var(--color-primary-light);
6464
color: var(--color-primary);
65-
font-weight: 600;
65+
font-weight: bold;
6666
}
6767

6868
.filter-trigger-btn:hover {
@@ -96,7 +96,7 @@
9696

9797
/* Toolbar Buttons (Select/Deselect/Add/Remove) */
9898
.btn-toolbar {
99-
font-weight: 600;
99+
font-weight: bold;
100100
}
101101

102102
.btn-toolbar.primary {

docs/css/filter/filter-dropdown.css

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,13 +84,16 @@
8484
}
8585

8686
.filter-reset-icon:hover {
87-
border-color: var(--color-primary);
88-
color: var(--color-primary);
87+
border-color: var(--color-danger);
88+
color: var(--color-danger);
8989
transform: translateY(-1px);
9090
box-shadow: var(--shadow-sm);
9191
}
9292

9393
.filter-reset-icon:active {
94+
background: var(--color-danger);
95+
color: white;
96+
border-color: #991b1b;
9497
transform: translateY(0);
9598
box-shadow: none;
9699
}

docs/css/selection/selection-panel-base.css

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
position: absolute;
3434
right: 1rem;
3535
background: none;
36-
border: none;
36+
border: 1px solid transparent;
3737
color: var(--color-text-secondary);
3838
cursor: pointer;
3939
padding: 0.4rem;
@@ -45,10 +45,19 @@
4545
}
4646

4747
.btn-clear-selection:hover {
48+
background: none;
49+
border-color: var(--color-danger);
50+
color: var(--color-danger);
51+
box-shadow: var(--shadow-sm);
52+
transform: translateY(-1px);
53+
}
54+
55+
.btn-clear-selection:active {
4856
background: var(--color-danger);
4957
color: white;
50-
box-shadow: var(--shadow-sm);
51-
transform: scale(1.05);
58+
border-color: #991b1b;
59+
transform: translateY(0);
60+
box-shadow: none;
5261
}
5362

5463
.selection-title {

docs/index.html

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,9 @@ <h1 class="header-title">RoboCOIN-DataManager</h1>
6161
<div class="filter-control-container">
6262
<div class="toolbar-left-controls">
6363
<button class="filter-trigger-btn" id="filterTriggerBtn">
64-
<span class="filter-trigger-text">Filter datasets</span>
64+
<span class="filter-trigger-text">
65+
Filter datasets
66+
</span>
6567
<span class="filter-trigger-count" id="filterTriggerCount"></span>
6668
</button>
6769
</div>
@@ -77,8 +79,9 @@ <h1 class="header-title">RoboCOIN-DataManager</h1>
7779
</div>
7880

7981
<div class="top-selection-container">
80-
<button class="btn-toolbar primary" id="selectAllBtn">Select displayed datasets</button>
81-
<button class="btn-toolbar danger" id="deselectAllBtn">Deselect displayed datasets</button>
82+
<button class="btn-toolbar primary" id="toggleSelectionBtn" title="Toggle selection for displayed datasets">
83+
Toggle filtered
84+
</button>
8285
</div>
8386

8487
<div class="filter-stats-inline">
@@ -101,10 +104,9 @@ <h1 class="header-title">RoboCOIN-DataManager</h1>
101104
<div class="filter-dropdown-header-main">
102105
<h3 class="filter-dropdown-title">Filter Datasets</h3>
103106
<button class="filter-reset-icon" id="filterResetBtn" title="Reset filters" aria-label="Reset filters">
104-
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"
105-
stroke-linecap="round" stroke-linejoin="round">
106-
<path d="M2 12a9.9 9.9 0 0 0 10 10c5.52 0 10-4.48 10-10S17.52 2 12 2" />
107-
<polyline points="12 6 12 12 16 14" />
107+
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
108+
<polyline points="3 6 5 6 21 6"></polyline>
109+
<path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path>
108110
</svg>
109111
</button>
110112
</div>

docs/js/modules/event-handlers.js

Lines changed: 18 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -630,21 +630,11 @@ export class EventHandlers {
630630
* Bind toolbar button events
631631
*/
632632
bindToolbarEvents() {
633-
// Select/Deselect all
634-
const selectAllBtn = document.getElementById('selectAllBtn');
635-
const deselectAllBtn = document.getElementById('deselectAllBtn');
636-
637-
if (selectAllBtn) {
638-
selectAllBtn.addEventListener('click', () => {
639-
this.addClickAnimation(selectAllBtn);
640-
this.selectAllFiltered();
641-
});
642-
}
643-
644-
if (deselectAllBtn) {
645-
deselectAllBtn.addEventListener('click', () => {
646-
this.addClickAnimation(deselectAllBtn);
647-
this.deselectAllFiltered();
633+
const toggleSelectionBtn = document.getElementById('toggleSelectionBtn');
634+
if (toggleSelectionBtn) {
635+
toggleSelectionBtn.addEventListener('click', () => {
636+
this.addClickAnimation(toggleSelectionBtn);
637+
this.toggleFilteredSelection();
648638
});
649639
}
650640

@@ -783,32 +773,26 @@ export class EventHandlers {
783773
}
784774

785775
/**
786-
* Select all filtered datasets
776+
* Toggle selection for all filtered datasets (select if any unselected, deselect if all selected)
787777
*/
788-
selectAllFiltered() {
778+
toggleFilteredSelection() {
789779
const filteredDatasets = this.managers.filter.applyFilters(
790780
document.getElementById('searchBox')?.value || ''
791781
);
792-
filteredDatasets.forEach(ds => {
793-
this.selectedDatasets.add(ds.path);
794-
this.managers.selectionPanel.listDatasets.add(ds.path);
795-
});
796-
this.managers.selectionPanel.markListChanged();
797-
this.managers.videoGrid.updateCardStyles();
798-
this.managers.selectionPanel.updateSelectionPanel();
799-
}
782+
if (filteredDatasets.length === 0) return;
783+
784+
const areAllSelected = filteredDatasets.every(ds => this.selectedDatasets.has(ds.path));
800785

801-
/**
802-
* Deselect all filtered datasets
803-
*/
804-
deselectAllFiltered() {
805-
const filteredDatasets = this.managers.filter.applyFilters(
806-
document.getElementById('searchBox')?.value || ''
807-
);
808786
filteredDatasets.forEach(ds => {
809-
this.selectedDatasets.delete(ds.path);
810-
this.managers.selectionPanel.listDatasets.delete(ds.path);
787+
if (areAllSelected) {
788+
this.selectedDatasets.delete(ds.path);
789+
this.managers.selectionPanel.listDatasets.delete(ds.path);
790+
} else {
791+
this.selectedDatasets.add(ds.path);
792+
this.managers.selectionPanel.listDatasets.add(ds.path);
793+
}
811794
});
795+
812796
this.managers.selectionPanel.markListChanged();
813797
this.managers.videoGrid.updateCardStyles();
814798
this.managers.selectionPanel.updateSelectionPanel();

0 commit comments

Comments
 (0)