vxe-pc-ui
Version:
A vue based PC component library
1 lines • 3.69 kB
JavaScript
Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _vue=require("vue"),_comp=require("../../ui/src/comp"),_ui=require("../../ui"),_vn=require("../../ui/src/vn"),_xeUtils=_interopRequireDefault(require("xe-utils"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}var _default=exports.default=(0,_comp.defineVxeComponent)({name:"VxeCollapse",props:{modelValue:Array,options:Array,padding:{type:Boolean,default:()=>(0,_ui.getConfig)().collapse.padding},expandConfig:Object,size:{type:String,default:()=>(0,_ui.getConfig)().collapse.size||(0,_ui.getConfig)().size}},emits:["update:modelValue","load","change","toggle-expand"],setup(l,e){let{emit:i,slots:n}=e;var a=_xeUtils.default.uniqueId();let u=(0,_ui.useSize)(l).computeSize,c=(0,_vue.ref)(),r=(0,_vue.reactive)({staticPanes:[],activeNames:[],initNames:[],cachePaneMaps:{}}),t={refElem:c},o=(0,_vue.computed)(()=>{var e=l.options;return(e||[]).filter(e=>_(e))}),v=(0,_vue.computed)(()=>{var e=r.staticPanes;return e.filter(e=>_(e))}),p=(0,_vue.computed)(()=>Object.assign({},(0,_ui.getConfig)().collapse.expandConfig,l.expandConfig)),s={},d={xID:a,props:l,context:e,reactData:r,getRefMaps:()=>t,getComputeMaps:()=>s},_=e=>{e=e.permissionCode;return!(e&&!_ui.permission.checkVisible(e))},m=e=>{var a=r.initNames;return!(!e||a.includes(e)||(a.push(e),g("load",{name:e},null),0))},h=e=>{let i=r.activeNames,s={};e&&e.length&&e.forEach(e=>{var a,{name:e,preload:t}=e||{};e&&(a=i.includes(e),s[""+e]={loading:!1},a&&m(e),t)&&!a&&i.push(e)}),r.activeNames=i?i.slice(0):[],r.cachePaneMaps=s},g=(e,a,t)=>{i(e,(0,_ui.createEvent)(t,{$collapse:d},a))};a={dispatchEvent:g};let f=(e,a)=>e&&(_xeUtils.default.isString(e)&&(e=n[e]||null),_xeUtils.default.isFunction(e))?(0,_vn.getSlotVNs)(e(a)):[],x=(a,t)=>{var i=r.activeNames,t=t.name;if(t){var s=i.indexOf(t);let e=!1;-1===s?(e=!0,i.push(t)):i.splice(s,1),m(t),g("change",{value:i,name:t},a),g("toggle-expand",{value:i,name:t,expanded:e},a)}};Object.assign(d,a,{});(0,_vue.watch)(()=>l.modelValue,e=>{r.activeNames=e||[]});let C=(0,_vue.ref)(0),E=((0,_vue.watch)(()=>l.options?l.options.length:-1,()=>{C.value++}),(0,_vue.watch)(()=>l.options,()=>{C.value++}),(0,_vue.watch)(C,()=>{h(l.options)}),(0,_vue.ref)(0));return(0,_vue.watch)(()=>r.staticPanes?r.staticPanes.length:-1,()=>{E.value++}),(0,_vue.watch)(()=>r.staticPanes,()=>{E.value++}),(0,_vue.watch)(E,()=>{h(r.staticPanes)}),r.activeNames=l.modelValue||[],h(r.staticPanes.length?r.staticPanes:l.options),(0,_vue.provide)("$xeCollapse",d),d.renderVN=()=>{var e=l.padding,a=u.value,t=o.value,i=v.value,s=n.default,i=s?i:t;return(0,_vue.h)("div",{ref:c,class:["vxe-collapse",{["size--"+a]:a,"is--padding":e}]},[(0,_vue.h)("div",{class:"vxe-collapse-slots"},s?s({}):[]),(e=>{let{activeNames:u,initNames:c}=r,o=p.value;return e.map(a=>{var{icon:e,name:t,title:i,slots:s}=a,l=s?s.title:null,s=s?s.default:null,n=t&&u.includes(t);return(0,_vue.h)("div",{class:"vxe-collapse-item"},[(0,_vue.h)("div",{class:"vxe-collapse--item-header",onClick(e){x(e,a)}},[o.showIcon?(0,_vue.h)("span",{class:"vxe-collapse--item-switch"},[(0,_vue.h)("i",{class:n?(0,_ui.getIcon)().COLLAPSE_OPEN:(0,_ui.getIcon)().COLLAPSE_CLOSE})]):(0,_ui.renderEmptyElement)(d),e?(0,_vue.h)("span",{class:"vxe-collapse--item-icon"},[(0,_vue.h)("i",{class:e})]):(0,_ui.renderEmptyElement)(d),(0,_vue.h)("span",{class:"vxe-collapse--item-name"},l?f(l,{name:t,title:i}):""+i)]),(0,_vue.h)("div",{class:["vxe-collapse--item-content",{"is--visible":n}]},[t&&c.includes(t)?(0,_vue.h)("div",{class:"vxe-collapse--item-inner"},[s?f(s,{name:t,title:i}):""]):(0,_ui.renderEmptyElement)(d)])])})})(i)])},d},render(){return this.renderVN()}});