Separate Brīdinājumi map selection from viewing warning detail
This commit is contained in:
@@ -54,12 +54,12 @@ export function Warnings() {
|
||||
}));
|
||||
const [selectedId, setSelectedId] = createSignal<string>();
|
||||
const selectedWarning = createMemo(() => filteredWarnings().find(item => item.id === selectedId()));
|
||||
const [detailOpen, setDetailOpen] = createSignal(false);
|
||||
const openWarning = (id: string) => { setSelectedId(id); setDetailOpen(true); };
|
||||
const closeDetail = () => setDetailOpen(false);
|
||||
const [detailId, setDetailId] = createSignal<string>();
|
||||
const detailWarning = createMemo(() => filteredWarnings().find(item => item.id === detailId()));
|
||||
const closeDetail = () => setDetailId(undefined);
|
||||
|
||||
createEffect(() => {
|
||||
if (!detailOpen()) return;
|
||||
if (!detailId()) return;
|
||||
const onKeyDown = (event: KeyboardEvent) => { if (event.key === 'Escape') closeDetail(); };
|
||||
document.addEventListener('keydown', onKeyDown);
|
||||
onCleanup(() => document.removeEventListener('keydown', onKeyDown));
|
||||
@@ -128,15 +128,18 @@ export function Warnings() {
|
||||
<Show when={!data.loading && !data.error && filteredWarnings().length === 0}><div class="inlineNotice">Izvēlētajam periodam nav aktīvu brīdinājumu. Karti joprojām var priekšskatīt, bet tajā nebūs iekrāsotu teritoriju.</div></Show>
|
||||
|
||||
<Show when={filteredWarnings().length > 0}><div class="warningSummary"><For each={filteredWarnings()}>{warning =>
|
||||
<button type="button" class={`warningCard ${warningSeverity(warning.intensity)}`} classList={{ active: warning.id === selectedId() }} aria-pressed={warning.id === selectedId()} onClick={() => openWarning(warning.id)}>
|
||||
<div class={`warningCard ${warningSeverity(warning.intensity)}`} classList={{ active: warning.id === selectedId() }}>
|
||||
<input type="checkbox" class="warningCardCheck" checked={warning.id === selectedId()} title="Rādīt šo brīdinājumu kartē" aria-label={`Rādīt ${warning.phenomenon || 'šo brīdinājumu'} kartē`} onClick={() => setSelectedId(warning.id)}/>
|
||||
<button type="button" class="warningCardOpen" onClick={() => setDetailId(warning.id)}>
|
||||
<span class="warningCardIcon"><PhenomenonIcon phenomenon={warning.phenomenon}/></span>
|
||||
<span class="warningCardText">{warning.phenomenon || 'Brīdinājums'}</span>
|
||||
</button>
|
||||
</div>
|
||||
}</For></div></Show>
|
||||
|
||||
<section class="warningsPreview"><div class="mapToolbar"><div><strong>3. Kartes priekšskatījums</strong><span>{template().width} × {template().height} px eksports</span></div><button class="primary" disabled={data.loading || Boolean(data.error)} onClick={downloadPng}>Lejupielādēt PNG</button></div><div class="canvasFrame"><canvas ref={canvas} width={template().width} height={template().height}/></div></section>
|
||||
|
||||
<Show when={detailOpen() && selectedWarning()}>{warning =>
|
||||
<Show when={detailWarning()}>{warning =>
|
||||
<Portal>
|
||||
<div class="warningBackdrop" onClick={closeDetail}>
|
||||
<div class="warningModal" onClick={event => event.stopPropagation()}>
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
.warningsPage{max-width:1900px}.warningsHeading{margin-bottom:18px}.warningsSetup{display:grid;grid-template-columns:260px minmax(0,1fr);gap:28px;padding:18px 0 24px;border-top:1px solid var(--border);border-bottom:1px solid var(--border)}.warningsSetup h2{margin:0 0 14px;font-size:20px}.warningFilterGrid{display:grid;grid-template-columns:220px 260px minmax(320px,1fr);gap:12px}.warningFilterGrid label{display:grid;gap:5px}.warningFilterGrid label span{font-size:12px;color:var(--text-muted)}.warningTitle input{width:100%}.warningsPreview{padding-top:24px}.warningsPreview canvas{display:block;width:100%;height:auto}.inlineNotice button{margin-left:14px}
|
||||
|
||||
.warningSummary{display:flex;flex-wrap:wrap;gap:10px;margin:18px 0}
|
||||
.warningCard{position:relative;display:flex;align-items:center;height:44px;flex:0 1 190px;padding:0 16px 0 48px;border:1.5px solid var(--border);border-radius:12px;background:rgba(255,255,255,.65);overflow:hidden;appearance:none;font:inherit;color:var(--text);text-align:left;cursor:pointer;transition:border-color 200ms,box-shadow 200ms,transform 200ms}
|
||||
.warningCard:hover{transform:translateY(-1px)}
|
||||
.warningCardIcon{position:absolute;left:0;top:0;width:40px;height:100%;display:flex;align-items:center;justify-content:center;color:#fff;transition:width 300ms ease}
|
||||
.warningCard{position:relative;display:flex;align-items:center;height:44px;flex:0 1 220px;border:1.5px solid var(--border);border-radius:12px;background:rgba(255,255,255,.65);overflow:hidden;transition:border-color 200ms,box-shadow 200ms}
|
||||
.warningCardCheck{flex:0 0 auto;margin:0 0 0 12px}
|
||||
.warningCardOpen{position:relative;flex:1 1 auto;align-self:stretch;display:flex;align-items:center;padding:0 14px 0 40px;border:none;background:none;appearance:none;font:inherit;color:var(--text);text-align:left;cursor:pointer}
|
||||
.warningCardIcon{position:absolute;left:0;top:0;width:36px;height:100%;display:flex;align-items:center;justify-content:center;color:#fff;transition:width 300ms ease}
|
||||
.warningCardText{position:relative;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:600;transition:color 300ms ease}
|
||||
.warningCard.yellow{border-color:#caa000}
|
||||
.warningCard.orange{border-color:#c1580f}
|
||||
@@ -11,13 +12,13 @@
|
||||
.warningCard.yellow .warningCardIcon{background:#caa000}
|
||||
.warningCard.orange .warningCardIcon{background:#c1580f}
|
||||
.warningCard.red .warningCardIcon{background:#b91c1c}
|
||||
.warningCard:hover .warningCardIcon{width:100%}
|
||||
.warningCard:hover .warningCardText{color:transparent}
|
||||
.warningCard:active .warningCardIcon{filter:brightness(.88)}
|
||||
.warningCardOpen:hover .warningCardIcon{width:100%}
|
||||
.warningCardOpen:hover .warningCardText{color:transparent}
|
||||
.warningCardOpen:active .warningCardIcon{filter:brightness(.88)}
|
||||
.warningCard.active{background:rgba(255,255,255,.95);box-shadow:0 0 0 3px var(--accent-pale)}
|
||||
|
||||
.warningBackdrop{position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center;padding:24px;background:rgba(10,20,35,.55);backdrop-filter:blur(6px);animation:warningFadeIn 180ms ease}
|
||||
.warningModal{position:relative;width:100%;max-width:640px;max-height:85vh;overflow-y:auto;padding:28px;border-radius:20px;background:var(--surface);box-shadow:var(--shadow-md);animation:warningPopIn 200ms ease}
|
||||
.warningModal{position:relative;width:100%;max-width:900px;max-height:85vh;overflow-y:auto;padding:32px 36px;border-radius:20px;background:var(--surface);box-shadow:var(--shadow-md);animation:warningPopIn 200ms ease}
|
||||
.warningModalClose{position:absolute;top:16px;right:16px;display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:none;border-radius:50%;background:var(--surface-strong);color:var(--text-muted);cursor:pointer;transition:background 150ms,color 150ms}
|
||||
.warningModalClose:hover{background:var(--accent-pale);color:var(--accent-strong)}
|
||||
.warningModalHeader{display:flex;align-items:center;gap:14px;padding:0 32px 14px 0;margin-bottom:14px;border-bottom:1px solid var(--border)}
|
||||
|
||||
Reference in New Issue
Block a user