@base-framework/organisms
Version:
This will add default organisms to the base framework.
3 lines (2 loc) • 11.1 kB
JavaScript
import{Atom as G}from"@base-framework/base";import{Div as W}from"@base-framework/atoms";import{Atom as q}from"@base-framework/base";var n=class{constructor(t=0,s=20){this.currentOffset=t,this.limit=s,this.hasMoreData=!0,this.loading=!1}canLoadMore(){return this.hasMoreData}update(t){t<this.limit&&(this.hasMoreData=!1),this.currentOffset+=t}reset(){this.currentOffset=0,this.hasMoreData=!0,this.loading=!1}};var N=100;function S(e){let t=e===globalThis?globalThis.pageYOffset:e.scrollTop,s=e===globalThis?globalThis.innerHeight:e.clientHeight,i=e===globalThis?globalThis.document.documentElement.scrollHeight:e.scrollHeight;return{scrollTop:t,clientHeight:s,scrollHeight:i}}function $(e,t=N){return e.scrollTop+e.clientHeight>=e.scrollHeight-t}var H=(e,t)=>$(e)&&t.canLoadMore(),k=(e,t,s)=>{e&&e.length>0?(s.append(e),t.update(e.length)):t.hasMoreData=!1},c=e=>(t,s,i)=>{let r=a=>{let l=[];a&&(l=a.rows||a.items||[]),i(l)};e.xhr.all("",r,t,s)};var d=(e,t,s)=>{t.reset(),e(t.currentOffset,t.limit,i=>{s.reset(),k(i,t,s)})},M=(e,t,s)=>(i,{list:r},a)=>{let l=S(e);if(H(l,t)){if(t.loading)return;t.loading=!0,s(t.currentOffset,t.limit,o=>{a&&a(),k(o,t,r),t.loading=!1})}},E=(e,t,s)=>(i,r,a)=>{let l=S(e);if(H(l,t)){if(t.loading)return;t.loading=!0,s(t.currentOffset,t.limit,o=>{a&&a(),k(o,t,r),t.loading=!1})}};var J=(e,t,s)=>()=>{d(e,t,s)},K=(e,t,s)=>{s.list.refresh=J(e,t,s.list)},U=q((e,t)=>{let s=new n(e.offset,e.limit),i=e.loadMoreItems||c(e.data);return W({class:e.containerClass??"",onCreated(r,a){K(i,s,a),a.list.refresh()}},t)}),P=U;import{Div as B,On as _}from"@base-framework/atoms";import{Data as Y,Jot as z}from"@base-framework/base";import{Builder as T,Html as R}from"@base-framework/base";var h=class{static first(t){return this.get(t,0)}static last(t){let s=t.childNodes.length-1;return this.get(t,s)}static get(t,s){return t?.childNodes[s]??null}static next(t){return t?.nextSibling??null}static previous(t){return t?.previousSibling??null}static index(t){if(!t||!t.parentNode)return-1;let s=t.parentNode.children;return Array.from(s).indexOf(t)}static getPreviousIndex(t){let s=this.index(t);return s>0?s-1:0}static replace(t,s,i){if(!s)return;R.removeElementData(s);let r=T.build(t,null,i);s.replaceWith(r)}static remove(t){t&&R.removeChild(t)}static append(t,s,i){t&&T.build(t,s,i)}static prepend(t,s,i){if(!t)return;let r=T.build(t,null,i);s.insertBefore(r,s.firstChild)}};var v=(e,t,s)=>({index:e,item:t,status:s}),C=class{static diff(t,s,i){let r=this.arrayToMap(t,i),a=[],l=[];return s.forEach((o,u)=>{let p=o[i];if(!r.has(p)){a.push(v(u,o,"added"));return}let{item:F}=r.get(p);if(!this.deepEqual(F,o)){a.push(v(u,o,"updated"));return}a.push(v(u,o,"unchanged")),r.delete(p)}),r.forEach(({item:o})=>{l.push(o)}),{changes:a,deletedItems:l}}static arrayToMap(t,s){let i=new Map;return t.forEach((r,a)=>{i.set(r[s],{item:r,index:a})}),i}static deepEqual(t,s){if(t===s)return!0;if(typeof t!="object"||t===null||typeof s!="object"||s===null)return!1;let i=Object.keys(t),r=Object.keys(s);if(i.length!==r.length)return!1;for(let a of i)if(!r.includes(a)||!this.deepEqual(t[a],s[a]))return!1;return!0}};var y=class{constructor({layout:t,itemProperty:s,customCompare:i}){this.layout=t,this.itemProperty=s,this.customCompare=i,this.lastAppend=null,this.lastPrepend=null}reset(){this.lastAppend=null,this.lastPrepend=null}setFirstValues(t){let s=this.lastAppend;return s||(this.lastAppend=t),!s}append(t,s){let i=this.getValue(t);this.setFirstValues(i)&&this.addDivider(i,s),this.compare(this.lastAppend,i)&&(this.addDivider(i,s),this.lastAppend=i)}getValue(t){return t[this.itemProperty]??null}prepend(t,s){let i=this.getValue(t);this.setFirstValues(i)&&this.addDivider(i,s),this.compare(this.lastPrepend,i)&&(this.addDivider(this.lastPrepend,s),this.lastPrepend=i)}compare(t,s){return this.customCompare?this.customCompare(t,s):t!==s}addDivider(t,s){if(!this.layout||!s)return;let i=this.layout(t);s.push(i)}};var b=e=>JSON.parse(JSON.stringify(e)),f=z({onCreated(){this.divider&&(this.rowDivider=new y({...this.divider}))},setData(){let e=this.items?b(this.items):[];return new Y({items:e,hasItems:null})},before(){this.linkParentData()},linkParentData(){let e=!1,t=this.parent?.data??this.parent?.context?.data??null;t&&(e=t.get("hasItems"),this.data.link(t,"hasItems"));let s=e||null;if(e!==void 0){let i=this.items||[];s=Array.isArray(i)&&i.length>0,this.data.set("hasItems",s)}this.defaultHasItemValue=s},destroy(){this.data.hasItems=this.defaultHasItemValue},render(){let e=this.row.bind(this);return B({class:"flex flex-auto flex-col"},[_("hasItems",t=>!t&&this.emptyState?this.emptyState():null),B({cache:"listContainer",class:`list ${this.class||""}`,onSet:["hasItems",{hidden:!1}],for:["items",e]})])},row(e,t,s,i){return typeof this.rowItem!="function"?null:(this.rowDivider&&i&&this.rowDivider.append(e,i),this.rowItem(e,t))},delete(e){let t=this.findIndexByKey(e);if(t===-1)return;this.data.delete(`items[${t}]`);let s=h.get(this.listContainer,t);s&&h.remove(s),this.updateHasItems()},replace(e){if(e.status==="unchanged")return;let t=e.item;if(e.status==="added"){this.append(t);return}let s=t[this.key],i=this.findIndexByKey(s);if(i===-1)return;this.data.set(`items[${i}]`,t);let r=h.get(this.listContainer,i),a=this.row(t,i);r&&a&&h.replace(a,r,this)},remove(e){Array.isArray(e)&&(e.forEach(t=>{this.delete(t[this.key])}),this.updateHasItems())},setRows(e){let t=Array.isArray(e)?e:[];this.data.set("items",t),this.updateHasItems()},getRows(){return this.data.get("items")||[]},reset(){this.data.set("items",[]),this.data.set("hasItems",!1),this.rowDivider&&this.rowDivider.reset()},append(e){if(!e)return;Array.isArray(e)||(e=[e]),e=b(e);let t=[],s=this.data.items.length-1;e.forEach(i=>{this.rowDivider&&this.rowDivider.append(i,t);let r=this.row(i,s+1);r&&t.push(r),this.data.set(`items[${++s}]`,i)}),this.updateHasItems(),t.length>0&&h.append(t,this.listContainer,this)},mingle(e,t=!1){if(!Array.isArray(e))return;e=b(e);let s=this.data.get("items")||[],i=C.diff(s,e,this.key);t&&i.deletedItems.length>0&&this.remove(i.deletedItems),i.changes.forEach(r=>{this.replace(r)}),this.updateHasItems()},prepend(e){if(!e)return;Array.isArray(e)||(e=[e]),e=b(e);let t=[],s=e.reverse();s.forEach(a=>{this.rowDivider&&this.rowDivider.prepend(a,t);let l=this.row(a,0);l&&t.push(l)});let i=this.data.get("items")||[],r=s.concat(i);this.data.attributes.items=r,this.data.stage.items=r,this.updateHasItems(),t.length>0&&h.prepend(t,this.listContainer,this)},updateHasItems(){let e=this.data.get("items")||[],t=Array.isArray(e)&&e.length>0;this.data.set("hasItems",t)},findIndexByKey(e){return(this.data.get("items")||[]).findIndex(s=>s&&s[this.key]===e)}});var Q=G(e=>P({loadMoreItems:e.loadMoreItems,offset:e.offset,limit:e.limit,containerClass:e.containerClass??"",data:e.data},[new f({cache:e.cache??"list",key:e.key,items:e.items||[],divider:e.divider,role:"list",class:e.class,rowItem:e.rowItem})]));import{Atom as st}from"@base-framework/base";import{Div as X}from"@base-framework/atoms";import{Atom as Z}from"@base-framework/base";var j=(e,t,s)=>()=>{d(e,t,s)},tt=(e,t,s)=>{s.list.refresh=j(e,t,s.list)},et=Z((e,t)=>{let s=new n(e.offset,e.limit),i=e.scrollContainer||globalThis,r=e.loadMoreItems||c(e.data),a=M(i,s,r);return X({class:e.containerClass??"",onCreated(l,o){tt(r,s,o),a(null,o,()=>{o.list.reset()})},addEvent:["scroll",i,a,{passive:!0}]},t)}),L=et;var it=st(e=>L({scrollContainer:e.scrollContainer,loadMoreItems:e.loadMoreItems,offset:e.offset,limit:e.limit,containerClass:e.containerClass??"",data:e.data},[new f({cache:e.cache??"list",key:e.key,items:e.items||[],divider:e.divider,role:"list",class:e.class,rowItem:e.rowItem})]));import{A as rt}from"@base-framework/atoms";import{Component as at,router as ot}from"@base-framework/base";var O=(e,t)=>({attr:e,value:t}),lt=(e,t)=>new RegExp("^"+e+"($|#|/|\\.).*").test(t),I=class extends at{beforeSetup(){this.selectedClass=this.activeClass||"active"}render(){let t=this.href,s=this.text,i=this.setupWatchers(t,s);return rt({cache:"link",class:this.class||this.className||null,onState:["selected",{[this.selectedClass]:!0}],href:this.getString(t),text:this.getString(s),nest:this.nest||this.children,watch:i})}getLinkPath(){return this?.link?.pathname||null}getString(t){let s=typeof t;return s!=="object"&&s!=="undefined"?t:null}setupWatchers(t,s){let i=this.exact===!0,r=ot.data,a=[];return t&&typeof t=="object"&&a.push(O("href",t)),s&&typeof s=="object"&&a.push(O("text",s)),a.push({value:["[[path]]",r],callBack:(l,o)=>{let u=o.pathname+o.hash,p=i?l===u:lt(o.pathname,l);this.update(p)}}),a}setupStates(){return{selected:!1}}update(t){this.state.selected=t}};import{Tbody as ht}from"@base-framework/atoms";import{Tbody as nt}from"@base-framework/atoms";var m=class extends f{render(){let t=this.row.bind(this);return nt({onCreated:s=>{this.listContainer=s},class:`tbody ${this.class||""}`,for:["items",t]})}};var w=class extends m{declareProps(){this.tracker=null,this.fetchCallback=null}setupPageTracker(){return this.tracker=new n(this.offset,this.limit)}setupFetchCallback(){this.setupPageTracker(),this.fetchCallback=this.loadMoreItems||c(this.tableData)}refresh(){d(this.fetchCallback,this.tracker,this)}render(){let t=this.row.bind(this);return this.setupFetchCallback(),ht({class:`tbody ${this.class||""}`,onCreated:(s,i)=>{this.listContainer=s,this.refresh()},for:["items",t]})}};import{Tbody as ct}from"@base-framework/atoms";var D=class extends m{declareProps(){this.tracker=null,this.scrollContainer=null,this.fetchCallback=null}setupPageTracker(){return this.tracker=new n(this.offset,this.limit)}setupScrollHandler(t){let s=this.setupPageTracker();return this.fetchCallback=this.loadMoreItems||c(this.tableData),E(t,s,this.fetchCallback)}refresh(){d(this.fetchCallback,this.tracker,this)}render(){let t=this.row.bind(this),s=this.scrollContainer||globalThis,i=this.setupScrollHandler(s);return ct({class:`tbody ${this.class||""}`,onCreated:(r,a)=>{this.listContainer=r,i(null,a,()=>{this.reset()})},addEvent:["scroll",s,i,{passive:!0}],for:["items",t]})}};import{Span as dt}from"@base-framework/atoms";import{Component as ft,SimpleData as mt}from"@base-framework/base";var g=class{constructor(t,s){this.timer=null,this.callBack=s,this.duration=t||1e3}createTimer(t){this.timer=globalThis.setTimeout(t,this.duration)}start(){this.stop();let t=this.returnCallBack.bind(this);this.createTimer(t)}stop(){globalThis.clearTimeout(this.timer)}returnCallBack(){let t=this.callBack;typeof t=="function"&&t.call()}};var x=class extends g{createTimer(t){this.timer=globalThis.setInterval(t,this.duration)}stop(){globalThis.clearInterval(this.timer)}};var V=new mt({date:0}),ut=6e4,pt=new x(ut,()=>{V.increment("date")});pt.start();var A=class extends ft{setData(){return V}render(){return dt({class:this.class,text:this.getTime(),onSet:["date",()=>this.getTime()]})}getTime(){let t=this.dateTime;return this.filter?this.filter(t):t}};export{Q as DataList,w as DataTableBody,A as DynamicTime,x as IntervalTimer,f as List,I as NavLink,it as ScrollableList,D as ScrollableTableBody,m as TableBody,g as Timer};
//# sourceMappingURL=organisms.js.map