import { onDestroy, createElement, createFragment, nop } from "../../lib/skeleton/index.js";
import rxjs, { effect, applyMutation, onClick, preventDefault } from "../../lib/rx.js";
import { animate } from "../../lib/animate.js";
import { loadCSS } from "../../helpers/loader.js";
import { qs } from "../../lib/dom.js";
import { getSelection$, clearSelection } from "./model_files.js";
import { setAction } from "./model_action.js";
import componentShare from "./modal_share.js";
import componentEmbed from "./modal_embed.js";
import componentTag from "./modal_tag.js";
import componentRename from "./modal_rename.js";
import componentDelete from "./modal_delete.js";
import "../../components/dropdown.js";
import "../../components/icon.js";
import { createModal } from "../../components/modal.js";
const modalOpt = {
withButtonsRight: "OK",
withButtonsLeft: "CANCEL",
};
export default async function(render) {
const $page = createElement(`
`);
render($page);
onDestroy(() => clearSelection());
// feature1: layout base case
effect(getSelection$().pipe(
rxjs.filter((selections) => selections.length === 0),
rxjs.map(() => createFragment(`
`)),
applyMutation($page, "replaceChildren"),
rxjs.mergeMap(() => rxjs.merge(
rxjs.merge(
onClick(qs($page, `[data-action="new-file"]`)).pipe(rxjs.mapTo("NEW_FILE")),
onClick(qs($page, `[data-action="new-folder"]`)).pipe(rxjs.mapTo("NEW_FOLDER")),
).pipe(rxjs.mergeMap((actionName) => {
$scroll.scrollTo({top: 0, behavior: "smooth"});
setAction(actionName);
return rxjs.EMPTY;
})),
onClick(qs($page, `[data-action="search"]`)).pipe(rxjs.mapTo("SEARCH")),
onClick(qs($page, `[data-action="view"]`)).pipe(rxjs.mapTo("VIEW")),
)),
));
// feature2: update when selection is preset
effect(getSelection$().pipe(
rxjs.filter((selections) => selections.length > 0),
rxjs.tap((selections) => selections.length === 1 && animate($page)),
rxjs.map((selections) => createFragment(`
`)),
applyMutation($page, "replaceChildren"),
rxjs.mergeMap(() => rxjs.merge(
onClick(qs($page, `[data-bind="clear"]`)).pipe(
rxjs.tap(() => clearSelection()),
rxjs.mergeMap(() => rxjs.EMPTY),
),
onClick(qs($page, `[data-action="download"]`)).pipe(
rxjs.mergeMap(() => rxjs.EMPTY),
),
onClick(qs($page, `[data-action="share"]`)).pipe(rxjs.tap(() => {
componentShare(createModal(modalOpt));
})),
onClick(qs($page, `[data-action="embed"]`)).pipe(rxjs.tap(() => {
componentEmbed(createModal(modalOpt));
})),
onClick(qs($page, `[data-action="tag"]`)).pipe(rxjs.tap(() => {
componentTag(createModal(modalOpt))
})),
onClick(qs($page, `[data-action="rename"]`)).pipe(rxjs.tap(() => {
componentRename(createModal(modalOpt));
})),
onClick(qs($page, `[data-action="delete"]`)).pipe(rxjs.tap(() => {
componentDelete(createModal(modalOpt));
})),
)),
));
// feature3: effect on scroll
const $scroll = $page.closest(".scroll-y");
effect(rxjs.fromEvent($scroll, "scroll", { passive: true }).pipe(
rxjs.map((e) => e.target.scrollTop > 30),
rxjs.distinctUntilChanged(),
rxjs.startWith(false),
rxjs.tap((scrolling) => scrolling
? $scroll.classList.add("scrolling")
: $scroll.classList.remove("scrolling")),
));
}
export function init() {
return loadCSS(import.meta.url, "./ctrl_submenu.css");
}