import type { SASjsRequest } from '@sasjs/adapter' import { appContext } from '../core/AppContext' import styles from './RequestsModal.css?inline' export class RequestsModal extends HTMLElement { private static styleSheet = new CSSStyleSheet() private shadow: ShadowRoot private dialog: HTMLDialogElement | null = null static { this.styleSheet.replaceSync(styles) } constructor() { super() this.shadow = this.attachShadow({ mode: 'open' }) this.shadow.adoptedStyleSheets = [RequestsModal.styleSheet] } connectedCallback() { this.render() this.attachEventListeners() } render() { this.shadow.innerHTML = ` ` } attachEventListeners() { const dialog = this.shadow.getElementById( 'requests-dialog' ) as HTMLDialogElement const closeBtn = this.shadow.getElementById('close-btn') this.dialog = dialog closeBtn?.addEventListener('click', () => this.closeModal()) dialog?.addEventListener('click', (e) => { if (e.target === dialog) { this.closeModal() } }) } openModal() { if (!this.dialog) return const adapter = appContext.getAdapter() if (!adapter) return const requests = adapter.getSasRequests() const title = this.shadow.getElementById('modal-title') const content = this.shadow.getElementById('modal-content') if (!title || !content) return title.textContent = 'Last 20 requests' if (!requests || requests.length === 0) { content.innerHTML = `
` } else { content.innerHTML = `${this.decodeHtml(request.logFile)}
${this.decodeHtml(request.sourceCode)}
${this.decodeHtml(request.generatedCode)}