primevue
Version:
[](https://opensource.org/licenses/MIT) [](https://badge.fury.io/js/primevue) [ • 12.8 kB
JavaScript
import e from"primevue/button";import{ObjectUtils as t,DomHandler as i,UniqueComponentId as l}from"primevue/utils";import n from"primevue/ripple";import{resolveComponent as o,resolveDirective as s,openBlock as r,createElementBlock as c,normalizeClass as a,createElementVNode as d,renderSlot as p,createVNode as u,createCommentVNode as h,TransitionGroup as m,normalizeStyle as f,withCtx as k,Fragment as g,renderList as v,withDirectives as b}from"vue";var y={name:"PickList",emits:["update:modelValue","reorder","update:selection","selection-change","move-to-target","move-to-source","move-all-to-target","move-all-to-source"],props:{modelValue:{type:Array,default:()=>[[],[]]},selection:{type:Array,default:()=>[[],[]]},dataKey:{type:String,default:null},listStyle:{type:null,default:null},metaKeySelection:{type:Boolean,default:!0},responsive:{type:Boolean,default:!0},breakpoint:{type:String,default:"960px"},stripedRows:{type:Boolean,default:!1}},itemTouched:!1,reorderDirection:null,styleElement:null,data(){return{d_selection:this.selection}},updated(){this.reorderDirection&&(this.updateListScroll(this.$refs.sourceList.$el),this.updateListScroll(this.$refs.targetList.$el),this.reorderDirection=null)},beforeUnmount(){this.destroyStyle()},mounted(){this.responsive&&this.createStyle()},watch:{selection(e){this.d_selection=e}},methods:{getItemKey(e,i){return this.dataKey?t.resolveFieldData(e,this.dataKey):i},isSelected(e,i){return-1!=t.findIndexInList(e,this.d_selection[i])},moveUp(e,i){if(this.d_selection&&this.d_selection[i]){let l=[...this.modelValue[i]],n=this.d_selection[i];for(let e=0;e<n.length;e++){let i=n[e],o=t.findIndexInList(i,l);if(0===o)break;{let e=l[o],t=l[o-1];l[o-1]=e,l[o]=t}}let o=[...this.modelValue];o[i]=l,this.reorderDirection="up",this.$emit("update:modelValue",o),this.$emit("reorder",{originalEvent:e,value:o,direction:this.reorderDirection,listIndex:i})}},moveTop(e,i){if(this.d_selection){let l=[...this.modelValue[i]],n=this.d_selection[i];for(let e=0;e<n.length;e++){let i=n[e],o=t.findIndexInList(i,l);if(0===o)break;{let e=l.splice(o,1)[0];l.unshift(e)}}let o=[...this.modelValue];o[i]=l,this.reorderDirection="top",this.$emit("update:modelValue",o),this.$emit("reorder",{originalEvent:e,value:o,direction:this.reorderDirection,listIndex:i})}},moveDown(e,i){if(this.d_selection){let l=[...this.modelValue[i]],n=this.d_selection[i];for(let e=n.length-1;e>=0;e--){let i=n[e],o=t.findIndexInList(i,l);if(o===l.length-1)break;{let e=l[o],t=l[o+1];l[o+1]=e,l[o]=t}}let o=[...this.modelValue];o[i]=l,this.reorderDirection="down",this.$emit("update:modelValue",o),this.$emit("reorder",{originalEvent:e,value:o,direction:this.reorderDirection,listIndex:i})}},moveBottom(e,i){if(this.d_selection){let l=[...this.modelValue[i]],n=this.d_selection[i];for(let e=n.length-1;e>=0;e--){let i=n[e],o=t.findIndexInList(i,l);if(o===l.length-1)break;{let e=l.splice(o,1)[0];l.push(e)}}let o=[...this.modelValue];o[i]=l,this.reorderDirection="bottom",this.$emit("update:modelValue",o),this.$emit("reorder",{originalEvent:e,value:o,direction:this.reorderDirection,listIndex:i})}},moveToTarget(e){let i=this.d_selection&&this.d_selection[0]?this.d_selection[0]:null,l=[...this.modelValue[0]],n=[...this.modelValue[1]];if(i){for(let e=0;e<i.length;e++){let o=i[e];-1==t.findIndexInList(o,n)&&n.push(l.splice(t.findIndexInList(o,l),1)[0])}let o=[...this.modelValue];o[0]=l,o[1]=n,this.$emit("update:modelValue",o),this.$emit("move-to-target",{originalEvent:e,items:i}),this.d_selection[0]=[],this.$emit("update:selection",this.d_selection),this.$emit("selection-change",{originalEvent:e,value:this.d_selection})}},moveAllToTarget(e){if(this.modelValue[0]){let t=[...this.modelValue[0]],i=[...this.modelValue[1]];this.$emit("move-all-to-target",{originalEvent:e,items:t}),i=[...i,...t],t=[];let l=[...this.modelValue];l[0]=t,l[1]=i,this.$emit("update:modelValue",l),this.d_selection[0]=[],this.$emit("update:selection",this.d_selection),this.$emit("selection-change",{originalEvent:e,value:this.d_selection})}},moveToSource(e){let i=this.d_selection&&this.d_selection[1]?this.d_selection[1]:null,l=[...this.modelValue[0]],n=[...this.modelValue[1]];if(i){for(let e=0;e<i.length;e++){let o=i[e];-1==t.findIndexInList(o,l)&&l.push(n.splice(t.findIndexInList(o,n),1)[0])}let o=[...this.modelValue];o[0]=l,o[1]=n,this.$emit("update:modelValue",o),this.$emit("move-to-source",{originalEvent:e,items:i}),this.d_selection[1]=[],this.$emit("update:selection",this.d_selection),this.$emit("selection-change",{originalEvent:e,value:this.d_selection})}},moveAllToSource(e){if(this.modelValue[1]){let t=[...this.modelValue[0]],i=[...this.modelValue[1]];this.$emit("move-all-to-source",{originalEvent:e,items:i}),t=[...t,...i],i=[];let l=[...this.modelValue];l[0]=t,l[1]=i,this.$emit("update:modelValue",l),this.d_selection[1]=[],this.$emit("update:selection",this.d_selection),this.$emit("selection-change",{originalEvent:e,value:this.d_selection})}},onItemClick(e,i,l){this.itemTouched=!1;const n=this.d_selection[l],o=t.findIndexInList(i,n),s=-1!=o;let r;if(!this.itemTouched&&this.metaKeySelection){let t=e.metaKey||e.ctrlKey;s&&t?r=n.filter(((e,t)=>t!==o)):(r=t&&n?[...n]:[],r.push(i))}else s?r=n.filter(((e,t)=>t!==o)):(r=n?[...n]:[],r.push(i));let c=[...this.d_selection];c[l]=r,this.d_selection=c,this.$emit("update:selection",this.d_selection),this.$emit("selection-change",{originalEvent:e,value:this.d_selection})},onItemDblClick(e,t,i){0===i?this.moveToTarget(e):1===i&&this.moveToSource(e)},onItemTouchEnd(){this.itemTouched=!0},onItemKeyDown(e,t,i){let l=e.currentTarget;switch(e.which){case 40:var n=this.findNextItem(l);n&&n.focus(),e.preventDefault();break;case 38:var o=this.findPrevItem(l);o&&o.focus(),e.preventDefault();break;case 13:this.onItemClick(e,t,i),e.preventDefault()}},findNextItem(e){let t=e.nextElementSibling;return t?i.hasClass(t,"p-picklist-item")?t:this.findNextItem(t):null},findPrevItem(e){let t=e.previousElementSibling;return t?i.hasClass(t,"p-picklist-item")?t:this.findPrevItem(t):null},updateListScroll(e){const t=i.find(e,".p-picklist-item.p-highlight");if(t&&t.length)switch(this.reorderDirection){case"up":i.scrollInView(e,t[0]);break;case"top":e.scrollTop=0;break;case"down":i.scrollInView(e,t[t.length-1]);break;case"bottom":e.scrollTop=e.scrollHeight}},createStyle(){if(!this.styleElement){this.$el.setAttribute(this.attributeSelector,""),this.styleElement=document.createElement("style"),this.styleElement.type="text/css",document.head.appendChild(this.styleElement);let e=`\n@media screen and (max-width: ${this.breakpoint}) {\n .p-picklist[${this.attributeSelector}] {\n flex-direction: column;\n }\n\n .p-picklist[${this.attributeSelector}] .p-picklist-buttons {\n padding: var(--content-padding);\n flex-direction: row;\n }\n\n .p-picklist[${this.attributeSelector}] .p-picklist-buttons .p-button {\n margin-right: var(--inline-spacing);\n margin-bottom: 0;\n }\n\n .p-picklist[${this.attributeSelector}] .p-picklist-buttons .p-button:last-child {\n margin-right: 0;\n }\n\n .p-picklist[${this.attributeSelector}] .pi-angle-right:before {\n content: "\\e930"\n }\n\n .p-picklist[${this.attributeSelector}] .pi-angle-double-right:before {\n content: "\\e92c"\n }\n\n .p-picklist[${this.attributeSelector}] .pi-angle-left:before {\n content: "\\e933"\n }\n\n .p-picklist[${this.attributeSelector}] .pi-angle-double-left:before {\n content: "\\e92f"\n }\n}\n`;this.styleElement.innerHTML=e}},destroyStyle(){this.styleElement&&(document.head.removeChild(this.styleElement),this.styleElement=null)}},computed:{containerClass(){return["p-picklist p-component",{"p-picklist-striped":this.stripedRows}]},sourceList(){return this.modelValue&&this.modelValue[0]?this.modelValue[0]:null},targetList(){return this.modelValue&&this.modelValue[1]?this.modelValue[1]:null},attributeSelector:()=>l()},components:{PLButton:e},directives:{ripple:n}};const x={class:"p-picklist-buttons p-picklist-source-controls"},$={class:"p-picklist-list-wrapper p-picklist-source-wrapper"},I={key:0,class:"p-picklist-header"},w=["onClick","onDblclick","onKeydown","aria-selected"],V={class:"p-picklist-buttons p-picklist-transfer-buttons"},S={class:"p-picklist-list-wrapper p-picklist-target-wrapper"},C={key:0,class:"p-picklist-header"},_=["onClick","onDblclick","onKeydown","aria-selected"],T={class:"p-picklist-buttons p-picklist-target-controls"};!function(e,t){void 0===t&&(t={});var i=t.insertAt;if(e&&"undefined"!=typeof document){var l=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css","top"===i&&l.firstChild?l.insertBefore(n,l.firstChild):l.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}}("\n.p-picklist {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n}\n.p-picklist-buttons {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n}\n.p-picklist-list-wrapper {\n -webkit-box-flex: 1;\n -ms-flex: 1 1 50%;\n flex: 1 1 50%;\n}\n.p-picklist-list {\n list-style-type: none;\n margin: 0;\n padding: 0;\n overflow: auto;\n min-height: 12rem;\n max-height: 24rem;\n}\n.p-picklist-item {\n cursor: pointer;\n overflow: hidden;\n position: relative;\n}\n.p-picklist-item.p-picklist-flip-enter-active.p-picklist-flip-enter-to,\n.p-picklist-item.p-picklist-flip-leave-active.p-picklist-flip-leave-to {\n -webkit-transition: none !important;\n transition: none !important;\n}\n"),y.render=function(e,t,i,l,n,y){const E=o("PLButton"),D=s("ripple");return r(),c("div",{class:a(y.containerClass)},[d("div",x,[p(e.$slots,"sourcecontrolsstart"),u(E,{type:"button",icon:"pi pi-angle-up",onClick:t[0]||(t[0]=e=>y.moveUp(e,0))}),u(E,{type:"button",icon:"pi pi-angle-double-up",onClick:t[1]||(t[1]=e=>y.moveTop(e,0))}),u(E,{type:"button",icon:"pi pi-angle-down",onClick:t[2]||(t[2]=e=>y.moveDown(e,0))}),u(E,{type:"button",icon:"pi pi-angle-double-down",onClick:t[3]||(t[3]=e=>y.moveBottom(e,0))}),p(e.$slots,"sourcecontrolsend")]),d("div",$,[e.$slots.sourceheader?(r(),c("div",I,[p(e.$slots,"sourceheader")])):h("",!0),u(m,{ref:"sourceList",name:"p-picklist-flip",tag:"ul",class:"p-picklist-list p-picklist-source",style:f(i.listStyle),role:"listbox","aria-multiselectable":"multiple"},{default:k((()=>[(r(!0),c(g,null,v(y.sourceList,((i,l)=>b((r(),c("li",{key:y.getItemKey(i,l),tabindex:"0",class:a(["p-picklist-item",{"p-highlight":y.isSelected(i,0)}]),onClick:e=>y.onItemClick(e,i,0),onDblclick:e=>y.onItemDblClick(e,i,0),onKeydown:e=>y.onItemKeyDown(e,i,0),onTouchend:t[4]||(t[4]=(...e)=>y.onItemTouchEnd&&y.onItemTouchEnd(...e)),role:"option","aria-selected":y.isSelected(i,0)},[p(e.$slots,"item",{item:i,index:l})],42,w)),[[D]]))),128))])),_:3},8,["style"])]),d("div",V,[p(e.$slots,"movecontrolsstart"),u(E,{type:"button",icon:"pi pi-angle-right",onClick:y.moveToTarget},null,8,["onClick"]),u(E,{type:"button",icon:"pi pi-angle-double-right",onClick:y.moveAllToTarget},null,8,["onClick"]),u(E,{type:"button",icon:"pi pi-angle-left",onClick:y.moveToSource},null,8,["onClick"]),u(E,{type:"button",icon:"pi pi-angle-double-left",onClick:y.moveAllToSource},null,8,["onClick"]),p(e.$slots,"movecontrolsend")]),d("div",S,[e.$slots.targetheader?(r(),c("div",C,[p(e.$slots,"targetheader")])):h("",!0),u(m,{ref:"targetList",name:"p-picklist-flip",tag:"ul",class:"p-picklist-list p-picklist-target",style:f(i.listStyle),role:"listbox","aria-multiselectable":"multiple"},{default:k((()=>[(r(!0),c(g,null,v(y.targetList,((i,l)=>b((r(),c("li",{key:y.getItemKey(i,l),tabindex:"0",class:a(["p-picklist-item",{"p-highlight":y.isSelected(i,1)}]),onClick:e=>y.onItemClick(e,i,1),onDblclick:e=>y.onItemDblClick(e,i,1),onKeydown:e=>y.onItemKeyDown(e,i,1),onTouchend:t[5]||(t[5]=(...e)=>y.onItemTouchEnd&&y.onItemTouchEnd(...e)),role:"option","aria-selected":y.isSelected(i,1)},[p(e.$slots,"item",{item:i,index:l})],42,_)),[[D]]))),128))])),_:3},8,["style"])]),d("div",T,[p(e.$slots,"targetcontrolsstart"),u(E,{type:"button",icon:"pi pi-angle-up",onClick:t[6]||(t[6]=e=>y.moveUp(e,1))}),u(E,{type:"button",icon:"pi pi-angle-double-up",onClick:t[7]||(t[7]=e=>y.moveTop(e,1))}),u(E,{type:"button",icon:"pi pi-angle-down",onClick:t[8]||(t[8]=e=>y.moveDown(e,1))}),u(E,{type:"button",icon:"pi pi-angle-double-down",onClick:t[9]||(t[9]=e=>y.moveBottom(e,1))}),p(e.$slots,"targetcontrolsend")])],2)};export{y as default};