animated transactions pane

This commit is contained in:
Nickiel12 2024-02-09 21:06:09 -08:00
parent 67a2b1c4e2
commit 66b6cc397e
4 changed files with 81 additions and 3 deletions

View file

@ -76,7 +76,7 @@ templ dashboard() {
} }
templ new_transaction_pane() { templ new_transaction_pane() {
<div style="position: absolute; width: 500px; height: 500px" class="c-green"> <div id="new_transaction_pane" style="opacity: 0;" class="cr-all c-base">
</div> </div>
} }

View file

@ -122,3 +122,11 @@ nav {
height: 100%; height: 100%;
border: 2px solid var(--#{$prefix}-surface1); border: 2px solid var(--#{$prefix}-surface1);
} }
#new_transaction_pane {
height: 75vh;
width: 50vw;
position: absolute;
transition: left 0.35s ease-in, top 0.35s ease-in, opacity 0.35s linear;
outline: solid var(--#{$prefix}-surface1);
}

View file

@ -1,5 +1,6 @@
import {fill_chart} from "./chart_functions.js"; import {fill_chart} from "./chart_functions.js";
import {register_dropdowns} from "./dropdowns.js"; import {register_dropdowns} from "./dropdowns.js";
import {open_new_transaction_pane, close_new_transaction_pane} from "./new_transactions.js";
function debounce(func, delay) { function debounce(func, delay) {
@ -14,7 +15,12 @@ function debounce(func, delay) {
}; };
} }
/*
* Change highlighted navbar element
* @param {MouseEvent}
*/
function switch_nav(event) { function switch_nav(event) {
console.log(`It is a: ${event}`);
var active_anchor = document.querySelector("nav a.active"); var active_anchor = document.querySelector("nav a.active");
active_anchor.classList.remove("active"); active_anchor.classList.remove("active");
@ -22,9 +28,21 @@ function switch_nav(event) {
clicked.classList.add("active"); clicked.classList.add("active");
} }
function open_drafts() { /** @type {boolean} */
console.log("Opening drafts panel"); var drafts_is_open = false;
/*
* toggle the new transaction pane
*/
function toggle_drafts() {
if (drafts_is_open) {
close_new_transaction_pane();
drafts_is_open = false;
} else {
open_new_transaction_pane();
drafts_is_open = true;
}
} }
const open_drafts = debounce(toggle_drafts);
function register_nav_links() { function register_nav_links() {
var navAnchors = document.querySelectorAll("nav a"); var navAnchors = document.querySelectorAll("nav a");
@ -40,6 +58,7 @@ function register_handlers() {
//fill_charts(); //fill_charts();
register_dropdowns(); register_dropdowns();
document.querySelector("#open-draft").addEventListener("click", open_drafts); document.querySelector("#open-draft").addEventListener("click", open_drafts);
close_new_transaction_pane();
} }
function load_in_table() { function load_in_table() {

View file

@ -0,0 +1,51 @@
import {
computePosition,
offset,
} from 'https://cdn.jsdelivr.net/npm/@floating-ui/dom@1.5.4/+esm';
const centerOffset = offset(({rects}) => {
return -rects.reference.height / 2 - rects.floating.height / 2;
});
function open_new_transaction_pane() {
let center = document.querySelector("#main-body-content");
let new_tp = document.querySelector("#new_transaction_pane");
new_tp.style.opacity = "1";
let center_width = center.offsetWidth;
center_width = center_width - (center_width / 10);
new_tp.style.width = center_width + "px";
computePosition(center, new_tp, {
placement: "bottom",
middleware: [
centerOffset,
],
}).then(({x, y}) => {
Object.assign(new_tp.style, {
left: `${x}px`,
top: `${y}px`,
});
});
}
function close_new_transaction_pane() {
let right_column = document.querySelector("#right-col");
let new_tp = document.querySelector("#new_transaction_pane");
new_tp.style.opacity = "0";
computePosition(right_column, new_tp, {
placement: "right",
middleware: [
offset(40),
],
}).then(({x, y}) => {
Object.assign(new_tp.style, {
left: `${x}px`,
top: `${y}px`,
});
});
}
export {open_new_transaction_pane, close_new_transaction_pane}