primevue
Version:
[](https://opensource.org/licenses/MIT) [](https://badge.fury.io/js/primevue) [ • 7.68 kB
JavaScript
import e from"primevue/basecomponent";import t from"primevue/icons/chevrondown";import n from"primevue/icons/chevronup";import{DomHandler as o}from"primevue/utils";import{resolveComponent as l,openBlock as i,createElementBlock as s,mergeProps as d,createElementVNode as a,normalizeProps as c,guardReactiveProps as r,createBlock as p,resolveDynamicComponent as h,createCommentVNode as g,Fragment as u,renderList as y,createVNode as m}from"vue";var b={name:"OrganizationChartNode",extends:e,emits:["node-click","node-toggle"],props:{node:{type:null,default:null},templates:{type:null,default:null},collapsible:{type:Boolean,default:!1},collapsedKeys:{type:null,default:null},selectionKeys:{type:null,default:null},selectionMode:{type:String,default:null}},methods:{getPTOptions(e){return this.ptm(e,{context:{expanded:this.expanded,selectable:this.selectable,selected:this.selected,toggleable:this.toggleable,active:this.selected}})},getNodeOptions(e,t){return this.ptm(t,{context:{lineTop:e}})},onNodeClick(e){o.hasClass(e.target,"p-node-toggler")||o.hasClass(e.target,"p-node-toggler-icon")||this.selectionMode&&this.$emit("node-click",this.node)},onChildNodeClick(e){this.$emit("node-click",e)},toggleNode(){this.$emit("node-toggle",this.node)},onChildNodeToggle(e){this.$emit("node-toggle",e)},onKeydown(e){"Enter"!==e.code&&"Space"!==e.code||(this.toggleNode(),e.preventDefault())}},computed:{nodeContentClass(){return["p-organizationchart-node-content",this.node.styleClass,{"p-organizationchart-selectable-node":this.selectable,"p-highlight":this.selected}]},leaf(){return!1!==this.node.leaf&&!(this.node.children&&this.node.children.length)},colspan(){return this.node.children&&this.node.children.length?2*this.node.children.length:null},childStyle(){return{visibility:!this.leaf&&this.expanded?"inherit":"hidden"}},expanded(){return void 0===this.collapsedKeys[this.node.key]},selectable(){return this.selectionMode&&!1!==this.node.selectable},selected(){return this.selectable&&this.selectionKeys&&!0===this.selectionKeys[this.node.key]},toggleable(){return this.collapsible&&!1!==this.node.collapsible&&!this.leaf}},components:{ChevronDownIcon:t,ChevronUpIcon:n}};const C=["colspan"],K=["colspan"],f=["colspan"];b.render=function(e,t,n,o,b,N){const k=l("OrganizationChartNode",!0);return i(),s("table",d({class:"p-organizationchart-table"},e.ptm("table")),[a("tbody",c(r(e.ptm("body"))),[n.node?(i(),s("tr",c(d({key:0},e.ptm("row"))),[a("td",d({colspan:N.colspan},e.ptm("cell")),[a("div",d({class:N.nodeContentClass,onClick:t[2]||(t[2]=(...e)=>N.onNodeClick&&N.onNodeClick(...e))},N.getPTOptions("node")),[(i(),p(h(n.templates[n.node.type]||n.templates.default),{node:n.node},null,8,["node"])),N.toggleable?(i(),s("a",d({key:0,tabindex:"0",class:"p-node-toggler",onClick:t[0]||(t[0]=(...e)=>N.toggleNode&&N.toggleNode(...e)),onKeydown:t[1]||(t[1]=(...e)=>N.onKeydown&&N.onKeydown(...e))},N.getPTOptions("nodeToggler")),[n.templates.togglericon?(i(),p(h(n.templates.togglericon),{key:0,expanded:N.expanded,class:"p-node-toggler-icon"},null,8,["expanded"])):(i(),p(h(N.expanded?"ChevronDownIcon":"ChevronUpIcon"),d({key:1,class:"p-node-toggler-icon"},N.getPTOptions("nodeTogglerIcon")),null,16))],16)):g("",!0)],16)],16,C)],16)):g("",!0),a("tr",d({style:N.childStyle,class:"p-organizationchart-lines"},e.ptm("lines")),[a("td",{colspan:N.colspan},[a("div",d({class:"p-organizationchart-line-down"},e.ptm("lineDown")),null,16)],8,K)],16),a("tr",d({style:N.childStyle,class:"p-organizationchart-lines"},e.ptm("lines")),[n.node.children&&1===n.node.children.length?(i(),s("td",d({key:0,colspan:N.colspan},e.ptm("lineCell")),[a("div",d({class:"p-organizationchart-line-down"},e.ptm("lineDown")),null,16)],16,f)):g("",!0),n.node.children&&n.node.children.length>1?(i(!0),s(u,{key:1},y(n.node.children,((e,t)=>(i(),s(u,{key:e.key},[a("td",d({class:["p-organizationchart-line-left",{"p-organizationchart-line-top":!(0===t)}]},N.getNodeOptions(!(0===t),"lineLeft"))," ",16),a("td",d({class:["p-organizationchart-line-right",{"p-organizationchart-line-top":!(t===n.node.children.length-1)}]},N.getNodeOptions(!(t===n.node.children.length-1),"lineRight"))," ",16)],64)))),128)):g("",!0)],16),a("tr",d({style:N.childStyle,class:"p-organizationchart-nodes"},e.ptm("nodes")),[(i(!0),s(u,null,y(n.node.children,(t=>(i(),s("td",d({key:t.key,colspan:"2"},e.ptm("nodeCell")),[m(k,{node:t,templates:n.templates,collapsedKeys:n.collapsedKeys,onNodeToggle:N.onChildNodeToggle,collapsible:n.collapsible,selectionMode:n.selectionMode,selectionKeys:n.selectionKeys,onNodeClick:N.onChildNodeClick,pt:e.pt},null,8,["node","templates","collapsedKeys","onNodeToggle","collapsible","selectionMode","selectionKeys","onNodeClick","pt"])],16)))),128))],16)],16)],16)};var N={name:"OrganizationChart",extends:e,emits:["node-unselect","node-select","update:selectionKeys","node-expand","node-collapse","update:collapsedKeys"],props:{value:{type:null,default:null},selectionKeys:{type:null,default:null},selectionMode:{type:String,default:null},collapsible:{type:Boolean,default:!1},collapsedKeys:{type:null,default:null}},data(){return{d_collapsedKeys:this.collapsedKeys||{}}},watch:{collapsedKeys(e){this.d_collapsedKeys=e}},methods:{onNodeClick(e){const t=e.key;if(this.selectionMode){let n=this.selectionKeys?{...this.selectionKeys}:{};n[t]?(delete n[t],this.$emit("node-unselect",e)):("single"===this.selectionMode&&(n={}),n[t]=!0,this.$emit("node-select",e)),this.$emit("update:selectionKeys",n)}},onNodeToggle(e){const t=e.key;this.d_collapsedKeys[t]?(delete this.d_collapsedKeys[t],this.$emit("node-expand",e)):(this.d_collapsedKeys[t]=!0,this.$emit("node-collapse",e)),this.d_collapsedKeys={...this.d_collapsedKeys},this.$emit("update:collapsedKeys",this.d_collapsedKeys)}},components:{OrganizationChartNode:b}};!function(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var o=document.head||document.getElementsByTagName("head")[0],l=document.createElement("style");l.type="text/css","top"===n&&o.firstChild?o.insertBefore(l,o.firstChild):o.appendChild(l),l.styleSheet?l.styleSheet.cssText=e:l.appendChild(document.createTextNode(e))}}("\n.p-organizationchart-table {\n border-spacing: 0;\n border-collapse: separate;\n margin: 0 auto;\n}\n.p-organizationchart-table > tbody > tr > td {\n text-align: center;\n vertical-align: top;\n padding: 0 0.75rem;\n}\n.p-organizationchart-node-content {\n display: inline-block;\n position: relative;\n}\n.p-organizationchart-node-content .p-node-toggler {\n position: absolute;\n bottom: -0.75rem;\n margin-left: -0.75rem;\n z-index: 2;\n left: 50%;\n user-select: none;\n cursor: pointer;\n width: 1.5rem;\n height: 1.5rem;\n text-decoration: none;\n}\n.p-organizationchart-node-content .p-node-toggler .p-node-toggler-icon {\n position: relative;\n top: 0.25rem;\n}\n.p-organizationchart-line-down {\n margin: 0 auto;\n height: 20px;\n width: 1px;\n}\n.p-organizationchart-line-right {\n border-radius: 0px;\n}\n.p-organizationchart-line-left {\n border-radius: 0;\n}\n.p-organizationchart-selectable-node {\n cursor: pointer;\n}\n"),N.render=function(e,t,n,o,a,c){const r=l("OrganizationChartNode");return i(),s("div",d({class:"p-organizationchart p-component"},e.ptm("root")),[m(r,{node:n.value,templates:e.$slots,onNodeToggle:c.onNodeToggle,collapsedKeys:a.d_collapsedKeys,collapsible:n.collapsible,onNodeClick:c.onNodeClick,selectionMode:n.selectionMode,selectionKeys:n.selectionKeys,pt:e.pt},null,8,["node","templates","onNodeToggle","collapsedKeys","collapsible","onNodeClick","selectionMode","selectionKeys","pt"])],16)};export{N as default};