@@ -4,7 +4,7 @@
< meta charset = "UTF-8" / >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" / >
< title > Admin Operations Center< / title >
< link rel = "stylesheet" href = "/style.css?v=11 " / >
< link rel = "stylesheet" href = "/style.css?v=12 " / >
< script defer src = "https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js" > < / script >
< script src = "https://alcdn.msauth.net/browser/2.37.0/js/msal-browser.min.js" crossorigin = "anonymous" > < / script >
< / head >
@@ -184,11 +184,7 @@
< template x-for = "(evt, idx) in askEvents" :key = "evt.id || idx" >
< article class = "event event--compact" >
< div class = "event__meta" >
< span class = "pill" >
< span x-text = "evt.display_category || evt.service || '—'" > < / span >
< span class = "pill__action" @ click . stop = "addServiceFilter(evt.service || evt.display_category)" title = "Include this service" > +< / span >
< span class = "pill__action" @ click . stop = "removeServiceFilter(evt.service || evt.display_category)" title = "Exclude this service" > − < / span >
< / span >
< span class = "pill pill--clickable" x-text = "evt.display_category || evt.service || '—'" @ click = "filterByService(evt.service || evt.display_category)" title = "Filter by this service" > < / span >
< span class = "pill pill--clickable" :class = "['success','succeeded','ok','passed','true'].includes((evt.result || '').toLowerCase()) ? 'pill--ok' : 'pill--warn'" x-text = "evt.result || '—'" @ click = "filterByResult(evt.result)" title = "Filter by this result" > < / span >
< / div >
< h3 x-text = "evt.operation || '—'" > < / h3 >
@@ -309,7 +305,7 @@
accessToken : null ,
authScopes : [ ] ,
filters : {
actor : '' , selectedServices : [ ] , search : '' , operation : '' , result : '' , start : '' , end : '' , limit : 25 , includeTags : '' , excludeTags : '' ,
actor : '' , selectedServices : [ ] , search : '' , operation : '' , result : '' , start : '' , end : '' , limit : 24 , includeTags : '' , excludeTags : '' ,
} ,
options : { actors : [ ] , services : [ ] , operations : [ ] , results : [ ] } ,
savedSearches : [ ] ,
@@ -402,6 +398,8 @@
this . aiFeaturesEnabled = featBody . ai _features _enabled !== false ;
if ( featBody . default _page _size ) {
this . filters . limit = featBody . default _page _size ;
} else {
this . filters . limit = 24 ;
}
} else {
this . aiFeaturesEnabled = true ;
@@ -571,9 +569,8 @@
const saved = localStorage . getItem ( 'aoc_filters' ) ;
if ( ! saved && this . options . services . length ) {
// Default: exclude noisy high-volume services
const noisy = [ 'Exchange' , 'SharePoint' , 'Teams' ] ;
this . filters . selectedServices = this . options . services . filter ( ( s ) => ! noisy . includes ( s ) ) ;
// Default: show all services (privacy controls handle exclusions server-side)
this . filters . selectedServices = [ ... this . options . services ] ;
} else if ( saved ) {
try {
const parsed = JSON . parse ( saved ) ;
@@ -667,26 +664,15 @@
} ,
clearFilters ( ) {
const noisy = [ 'Exchange' , 'SharePoint' , 'Teams' ] ;
this . filters = { actor : '' , selectedServices : this . options . services . filter ( ( s ) => ! noisy . includes ( s ) ) , search : '' , operation : '' , result : '' , start : '' , end : '' , limit : 25 , includeTags : '' , excludeTags : '' } ;
this . filters = { actor : '' , selectedServices : [ ... this . options . services ] , search : '' , operation : '' , result : '' , start : '' , end : '' , limit : 24 , includeTags : '' , excludeTags : '' } ;
this . saveFilters ( ) ;
this . resetPagination ( ) ;
this . loadEvents ( ) ;
} ,
add ServiceFilter ( service ) {
filterBy Service( service ) {
if ( ! service ) return ;
if ( ! this. filters . selectedServices . includes ( service ) ) {
this . filters . selectedServices . push ( service ) ;
this . saveFilters ( ) ;
this . resetPagination ( ) ;
this . loadEvents ( ) ;
}
} ,
removeServiceFilter ( service ) {
if ( ! service ) return ;
this . filters . selectedServices = this . filters . selectedServices . filter ( ( s ) => s !== service ) ;
this . filters . selectedServices = [ service ] ;
this . saveFilters ( ) ;
this . resetPagination ( ) ;
this . loadEvents ( ) ;