import * as shared from './shared/index.js';
import * as appstate from '../appstate.js';
import './ops-platform-events.js';
import {
DeesElement,
customElement,
html,
state,
css,
cssManager,
} from '@design.estate/dees-element';
@customElement('ops-view-logs')
export class OpsViewLogs extends DeesElement {
@state()
accessor logState: appstate.ILogState = {
recentLogs: [],
isStreaming: false,
filters: {},
};
@state()
accessor activeTab: 'application' | 'platform' = 'application';
@state()
accessor unacknowledgedCount = 0;
private lastPushedCount = 0;
constructor() {
super();
const subscription = appstate.logStatePart
.select((stateArg) => stateArg)
.subscribe((logState) => {
this.logState = logState;
});
this.rxSubscriptions.push(subscription);
const configEventSubscription = appstate.configEventStatePart
.select((stateArg) => stateArg)
.subscribe((eventState) => {
this.unacknowledgedCount = eventState.unacknowledgedCount;
});
this.rxSubscriptions.push(configEventSubscription);
}
public static styles = [
cssManager.defaultStyles,
shared.viewHostCss,
css`
.logTabs {
display: flex;
gap: 8px;
margin-bottom: 12px;
}
.logTab {
border: 1px solid var(--dees-color-border-default);
background: transparent;
color: var(--dees-color-text-secondary);
border-radius: 6px;
padding: 4px 12px;
font-size: 12px;
cursor: pointer;
transition: all 0.15s ease;
}
.logTab:hover {
background: var(--dees-color-hover);
color: var(--dees-color-text-primary);
}
.logTab.active {
border-color: var(--dees-color-border-strong);
color: var(--dees-color-text-primary);
}
.logTab .countBadge {
display: inline-block;
margin-left: 6px;
padding: 0 6px;
border-radius: 8px;
font-size: 11px;
font-weight: 600;
background: ${cssManager.bdTheme('rgba(220, 38, 38, 0.1)', 'rgba(220, 38, 38, 0.25)')};
color: ${cssManager.bdTheme('#dc2626', '#f87171')};
}
`,
];
public render() {
return html`