UNPKG

@base-framework/organisms

Version:

This will add default organisms to the base framework.

3 lines (2 loc) 7.18 kB
import{a as c}from"./chunk-QSKZOXBV.js";import{a as o}from"./chunk-E5OBFMK5.js";import{a as u}from"./chunk-L2BWIPMB.js";import{Div as f,On as g}from"@base-framework/atoms";import{Component as p,Data as m,Jot as y}from"@base-framework/base";var l=t=>{if(Array.isArray(t))try{return structuredClone(t)}catch{return t.map(s=>s&&typeof s=="object"?{...s}:s)}return t},A=y({onCreated(){this.divider&&(this.rowDivider=new c({...this.divider})),this.elementCache=new Map},setData(){let t=this.items?l(this.items):[],e=this.skeleton&&typeof this.skeleton.row=="function";return this.skeleton&&!e&&t.length===0&&console.warn("[organisms] List skeleton config requires a `row` function. Skeleton disabled.",this.skeleton),e&&t.length===0?new m({items:this.generateSkeletonRows(),hasItems:!0,showSkeleton:!0}):new m({items:t,hasItems:null})},generateSkeletonRows(){let t=this.skeleton,e=t&&typeof t=="object"&&t.number?t.number:3,s=t&&typeof t=="object"&&typeof t.row=="function"?t.row:null;return s?Array.from({length:e},(a,i)=>s(i)):[]},removeSkeleton(){!this.data||!this.data.get("showSkeleton")||(this.data.set("showSkeleton",!1),this.data.attributes.items=[],this.data.stage.items=[],this.listContainer&&o.removeAll(this.listContainer))},before(){this.setupHasItems()},setupHasItems(){if(this.defaultHasItemValue){this.data.set("hasItems",!0);return}let t=this.linkParentData(),e=t||null;if(t!==void 0)if(t===!0)e=!0;else{let s=this.items||[];e=Array.isArray(s)&&s.length>0}this.defaultHasItemValue=e,e===!1&&this.linkParent!==!1&&!this.data.get("showSkeleton")&&this.data.set("hasItems",!1)},linkParentData(){let t=!1,e=this.parent?.data??this.parent?.context?.data??null;if(e&&this.linkParent!==!1)t=e.get("hasItems"),this.data.link(e,"hasItems");else if(this.isDynamic===!0)return;return t},checkHasAddedItems(){if(this.defaultHasItemValue===!0)return;(this.data.get("items")||[]).length>0&&this.persist===!0&&(this.defaultHasItemValue=!0)},destroy(){this.checkHasAddedItems(),this.data.stage.hasItems=this.defaultHasItemValue,this.data.attributes.hasItems=this.defaultHasItemValue,this.persist===!0&&typeof this.resetPagination=="function"&&this.resetPagination()},render(){let t=this.row.bind(this);return f({class:"flex flex-auto flex-col"},[g("hasItems",e=>e===!1&&this.emptyState?this.emptyState():null),f({cache:"listContainer",class:`list ${this.class||""}`,onSet:["hasItems",{hidden:!1}],for:["items",t]})])},row(t,e,s,a){if(this.data&&this.data.get("showSkeleton"))return t;if(typeof this.rowItem!="function")return null;this.rowDivider&&a&&this.isDynamic!==!0&&this.rowDivider.append(t,a);let i=this.rowItem(t,e);if(i&&this.key&&t[this.key]!==void 0){let r=String(t[this.key]);if(i instanceof p||!i.tag)return f({"data-row-key":r},[i]);i["data-row-key"]=r}return i},delete(t){let e=this.findIndexByKey(t);if(e!==-1){if(this.data.delete(`items[${e}]`),this.listContainer){let s=this.findRowElementByKey(t);s&&o.remove(s)}this.elementCache&&this.elementCache.delete(String(t)),this.updateHasItems()}},replace(t,e=!0){if(t.status==="unchanged")return;let s=t.item;if(t.status==="added"){if(e){this.append(s);return}this.prepend(s);return}let a=s[this.key],i=this.findIndexByKey(a);if(i===-1)return;this.data.set(`items[${i}]`,s);let r=this.findRowElementByKey(a),n=this.row(s,i);r&&n&&o.replace(n,r,this)},remove(t){if(!Array.isArray(t))return;let e=t.length;for(let s=0;s<e;s++){let a=t[s];this.delete(a[this.key])}this.updateHasItems()},isEmpty(){return this.data.get("items")?.length===0},setRows(t){this.removeSkeleton();let e=Array.isArray(t)?t:[];this.data.set("items",e),this.updateHasItems()},getRows(){return this.data.get("items")||[]},reset(){this.data.stage.items=[],this.data.attributes.items=[],o.removeAll(this.listContainer),this.data.stage.hasItems=null,this.data.attributes.hasItems=null,this.defaultHasItemValue=null,this.hasTrailingDivider=!1,this.elementCache&&this.elementCache.clear(),this.rowDivider&&this.rowDivider.reset()},append(t){if(!t)return;this.removeSkeleton(),Array.isArray(t)||(t=[t]),t=l(t);let e=[],s=this.data.get("items")||[],a=s.length,i=t.length;for(let n=0;n<i;n++){let h=t[n];this.rowDivider&&this.rowDivider.append(h,e);let d=this.row(h,a+n);d&&e.push(d)}let r=s.concat(t);this.data.attributes.items=r,this.data.stage.items=r,this.data.get("hasItems")!==!0&&this.updateHasItems(),e.length>0&&this.listContainer&&o.append(e,this.listContainer,this)},mingle(t,e=!1){if(!Array.isArray(t))return;this.removeSkeleton(),t=l(t);let s=this.data.get("items")||[],a=u.diff(s,t,this.key);e&&a.deletedItems.length>0&&this.remove(a.deletedItems);let i=a.changes.length;for(let r=0;r<i;r++){let n=a.changes[r];this.replace(n)}this.updateHasItems()},merge(t,e=!0,s=!1){if(!Array.isArray(t))return;this.removeSkeleton(),t=l(t);let a=this.data.get("items")||[],i=u.diff(a,t,this.key),r=i.changes.length;for(let n=0;n<r;n++){let h=i.changes[n];s&&(this.remove([h.item]),h.status="added"),this.replace(h,e)}this.updateHasItems()},modify(t,e=!1){if(!Array.isArray(t))return;this.removeSkeleton();let s=l(t),a=this.data.get("items")||[],i=u.modify(s,a,this.key,e),r=i.length;for(let n=0;n<r;n++){let h=i[n];this.replace(h)}this.updateHasItems()},prepend(t){if(!t)return;if(this.removeSkeleton(),Array.isArray(t)||(t=[t]),t=l(t),this.rowDivider){let n=this.data.get("items")||[];n.length>0&&this.rowDivider.setPrependBoundary(n[0])}if(this.listContainer){let n=this.listContainer.firstChild;n&&n.getAttribute&&n.getAttribute("data-divider")==="true"&&this.listContainer.removeChild(n)}let e=[],s=t.reverse(),a=s.length;for(let n=0;n<a;n++){let h=s[n];this.rowDivider&&this.rowDivider.prepend(h,e);let d=this.row(h,0);d&&e.push(d)}let i=this.data.get("items")||[];if(this.rowDivider&&i.length===0&&s.length>0){let n=s[s.length-1];this.rowDivider.lastAppend=this.rowDivider.getValue(n)}let r=s.concat(i);this.data.attributes.items=r,this.data.stage.items=r,this.data.get("hasItems")!==!0&&this.updateHasItems(),e.length>0&&this.listContainer&&o.prepend(e,this.listContainer,this)},addTrailingDivider(){if(!this.rowDivider||this.hasTrailingDivider||!this.listContainer)return;let t=this.listContainer.firstChild;if(t&&t.getAttribute&&t.getAttribute("data-divider")==="true"){this.hasTrailingDivider=!0;return}let e=this.data.get("items")||[];if(e.length===0)return;let s=e[0],a=this.rowDivider.getValue(s),i=[];this.rowDivider.addDivider(a,i),i.length>0&&(o.prepend(i,this.listContainer,this),this.hasTrailingDivider=!0)},updateHasItems(){let t=this.data.get("items")||[],e=Array.isArray(t)&&t.length>0;this.data.set("hasItems",e)},findIndexByKey(t){return(this.data.get("items")||[]).findIndex(s=>s&&s[this.key]===t)},findRowElementByKey(t){if(!this.listContainer)return null;let e=String(t);if(this.elementCache&&this.elementCache.has(e)){let i=this.elementCache.get(e);if(i&&this.listContainer.contains(i))return i;this.elementCache.delete(e)}let s=this.listContainer.children,a=s.length;for(let i=0;i<a;i++){let r=s[i];if(!(r.hasAttribute&&r.hasAttribute("data-divider"))&&r.hasAttribute&&r.getAttribute("data-row-key")===e)return this.elementCache&&this.elementCache.set(e,r),r}return null}});export{A as a}; //# sourceMappingURL=chunk-YZELTHGR.js.map