@tripetto/block-dropdown
Version:
Dropdown block for Tripetto.
3 lines (2 loc) • 3.63 kB
JavaScript
/*! Tripetto Dropdown Block 7.0.0 - Copyright (C) 2023 Tripetto B.V. - All Rights Reserved */
import{tripetto as e,condition as t,ConditionBlock as o,isString as i,Slots as r,isNumberFinite as s,Num as n,NodeBlock as a,assert as l,findFirst as d,markdownifyToString as p}from"@tripetto/runner";function u(e,t,o,i){var r,s=arguments.length,n=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(s<3?r(n):s>3?r(t,o,n):r(t,o))||n);return s>3&&n&&Object.defineProperty(t,o,n),n}let c=class extends o{isSelected(){const e=this.valueOf();return e&&(e.reference===this.props.option||!this.props.option&&!e.reference)||!1}};u([t],c.prototype,"isSelected",null),c=u([e({type:"condition",legacyBlock:!0,identifier:"@tripetto/block-dropdown"})],c);let h=class extends o{getValue(e,t){if(i(t)&&e instanceof r.Numeric){const o=this.variableFor(t);return o&&o.hasValue?e.toValue(o.value):void 0}return s(t)?t:void 0}verify(){const e=this.valueOf();if(e){const t=this.getValue(e.slot,this.props.value);switch(this.props.mode){case"equal":return(e.hasValue?e.value:void 0)===t;case"not-equal":return(e.hasValue?e.value:void 0)!==t;case"below":return s(t)&&e.hasValue&&e.value<t;case"above":return s(t)&&e.hasValue&&e.value>t;case"between":case"not-between":const o=this.getValue(e.slot,this.props.to);return s(t)&&s(o)&&(e.hasValue&&e.value>=n.min(t,o)&&e.value<=n.max(t,o))===("between"===this.props.mode);case"defined":return e.hasValue;case"undefined":return!e.hasValue}}return!1}};u([t],h.prototype,"verify",null),h=u([e({type:"condition",legacyBlock:!0,identifier:"@tripetto/block-dropdown:score"})],h);class v extends a{constructor(){super(...arguments),this.scoreSlot=this.valueOf("score","feature"),this.dropdownSlot=l(this.valueOf("option","static",{confirm:!0,modifier:e=>{if(e.value){if(!e.reference){const t=d(this.props.options,(t=>t.value===e.value))||d(this.props.options,(t=>t.id===e.value))||d(this.props.options,(t=>t.name===e.value))||d(this.props.options,(t=>t.name.toLowerCase()===e.value.toLowerCase()));return{value:t&&(t.value||t.name),reference:t&&t.id,display:null==t?void 0:t.name}}if(!d(this.props.options,(t=>t.id===e.reference)))return{value:void 0,reference:void 0,display:void 0}}},onChange:e=>{if(this.scoreSlot){const t=d(this.props.options,(t=>t.id===e.reference));this.scoreSlot.set(t&&((null==t?void 0:t.score)||0))}}})),this.required=this.dropdownSlot.slot.required||!1}get options(){var e;const t=(null===(e=this.props.options)||void 0===e?void 0:e.map((e=>Object.assign(Object.assign({},e),{name:p(e.name,this.context)}))))||[];if(this.props.randomize&&t.length>1){if(!this.randomized||this.randomized.length!==t.length||d(this.randomized,(e=>{var o;return(null===(o=t[e.index])||void 0===o?void 0:o.id)!==e.id}))){this.randomized=t.map(((e,t)=>({index:t,id:e.id})));let e=this.randomized.length;for(;--e;){const t=Math.floor(Math.random()*e),o=this.randomized[e];this.randomized[e]=this.randomized[t],this.randomized[t]=o}}return this.randomized.map((e=>t[e.index]))}return this.randomized&&(this.randomized=void 0),t}get value(){const e=d(this.props.options,(e=>e.id===this.dropdownSlot.reference));if(!e&&!this.node.placeholder){const e=d(this.props.options,(e=>!!e.name));return this.dropdownSlot.default(e&&(e.value||e.name),e&&e.id),e&&e.id||""}return e&&e.id||""}set value(e){this.select(d(this.props.options,(t=>t.id===e)))}select(e){return this.dropdownSlot.set(e&&(e.value||e.name),e&&e.id,null==e?void 0:e.name),e&&e.id||""}}export{v as Dropdown};