From f1b242720df3786c80fbc6cd17c1d75444841fb3 Mon Sep 17 00:00:00 2001 From: Giorgio Gilestro Date: Wed, 27 May 2026 14:49:43 +0200 Subject: [PATCH] portfolio-edit: edit-mode toggle scaffold --- app/static/js/portfolio_edit.js | 43 +++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 app/static/js/portfolio_edit.js diff --git a/app/static/js/portfolio_edit.js b/app/static/js/portfolio_edit.js new file mode 100644 index 0000000..c165cc5 --- /dev/null +++ b/app/static/js/portfolio_edit.js @@ -0,0 +1,43 @@ +/* Dashboard-native portfolio editing. + * + * Owns: the EDIT button toggle, the add-position form behaviour + * (ticker validation on blur, qty/cost inputs, date-mode historical + * lookup, Add click), and per-row delete via event delegation. + * + * Reads/writes the portfolio via window.CassandraPortfolio.loadPie / + * savePie / mountAndRender — the same surface portfolio.js exposes + * for the CSV-import preview. + */ +(function () { + 'use strict'; + + const panel = document.getElementById('portfolio-panel'); + const editBtn = document.getElementById('pf-edit-btn'); + const doneBtn = document.getElementById('pf-done-btn'); + const form = document.getElementById('pf-add-form'); + if (!panel || !editBtn || !doneBtn || !form) return; + + function enterEditMode() { + panel.classList.add('pf-editing'); + form.hidden = false; + editBtn.hidden = true; + doneBtn.hidden = false; + editBtn.setAttribute('aria-pressed', 'true'); + document.getElementById('pf-add-ticker').focus(); + } + + function exitEditMode() { + panel.classList.remove('pf-editing'); + // Form stays visible when the pie is empty (empty-state UX handled + // by portfolio.js setting the pf-empty class on the panel). + if (!panel.classList.contains('pf-empty')) { + form.hidden = true; + } + editBtn.hidden = false; + doneBtn.hidden = true; + editBtn.setAttribute('aria-pressed', 'false'); + } + + editBtn.addEventListener('click', enterEditMode); + doneBtn.addEventListener('click', exitEditMode); +})();