UNPKG

@eeacms/react-chart-editor

Version:

plotly.js chart editor react component UI

2 lines 10.4 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _reactColorscales=_interopRequireWildcard(require("@eeacms/react-colorscales"));var _Dropdown=_interopRequireDefault(require("./Dropdown"));var _ColorPicker=_interopRequireDefault(require("./ColorPicker"));var _Button=_interopRequireDefault(require("./Button"));var _Info=_interopRequireDefault(require("../fields/Info"));var _propTypes=_interopRequireDefault(require("prop-types"));var _react=_interopRequireWildcard(require("react"));var _reactBeautifulDnd=require("react-beautiful-dnd");var _plotlyIcons=require("plotly-icons");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(_interopRequireWildcard=function _interopRequireWildcard(e,t){if(!t&&e&&e.__esModule)return e;var o,i,f={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return f;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,f)}for(const t in e)"default"!==t&&{}.hasOwnProperty.call(e,t)&&((i=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(i.get||i.set)?o(f,t,i):f[t]=e[t]);return f})(e,t)}(function(){var enterModule=typeof reactHotLoaderGlobal!=="undefined"?reactHotLoaderGlobal.enterModule:undefined;enterModule&&enterModule(module)})();function _extends(){return _extends=Object.assign?Object.assign.bind():function(n){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var r in t)({}).hasOwnProperty.call(t,r)&&(n[r]=t[r])}return n},_extends.apply(null,arguments)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==typeof i?i:i+""}function _toPrimitive(t,r){if("object"!=typeof t||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}var __signature__=typeof reactHotLoaderGlobal!=="undefined"?reactHotLoaderGlobal.default.signature:function(a){return a};const colorscalepickerContainerWidth=240;class Scale extends _react.Component{constructor(props,context){super(props,context);this.state={selectedColorscaleType:props.initialCategory||"sequential",showColorscalePicker:false,showCustomizeColor:false,draggingColorIndex:null,colorComponentVisibility:new Array(props.selected.length).fill(false)};this.onChange=this.onChange.bind(this);this.onClick=this.onClick.bind(this);this.handleColorChange=this.handleColorChange.bind(this);this.handleVisibilityChange=this.handleVisibilityChange.bind(this);this.handleDeleteColor=this.handleDeleteColor.bind(this);this.handleAddColor=this.handleAddColor.bind(this);this.onDragEnd=this.onDragEnd.bind(this);this.onDragStart=this.onDragStart.bind(this)}onClick(){this.setState(prevState=>_objectSpread({showColorscalePicker:!prevState.showColorscalePicker},this.state.showCustomizeColor&&{showCustomizeColor:false}))}onChange(selectedColorscaleType){this.setState({selectedColorscaleType})}handleColorChange(color,index){var newColorscale=[...(this.props.selected||[])];newColorscale[index]=color;this.props.onColorscaleChange(newColorscale,this.state.selectedColorscaleType)}handleVisibilityChange(index,isVisible){this.setState(prevState=>{const newColorComponentVisibility=[...prevState.colorComponentVisibility];newColorComponentVisibility[index]=isVisible;return{colorComponentVisibility:newColorComponentVisibility}})}handleDeleteColor(index){var newColorscale=[...this.props.selected.slice(0,index),...this.props.selected.slice(index+1)];this.props.onColorscaleChange(newColorscale,this.state.selectedColorscaleType)}handleAddColor(){var newColorscale=[...this.props.selected,this.props.selected[this.props.selected.length-1]];this.props.onColorscaleChange(newColorscale,this.state.selectedColorscaleType)}onDragStart(result){this.setState({draggingColorIndex:result.source.index})}onDragEnd(result){this.setState({draggingColorIndex:null});if(!result.destination){return}const newColorscale=Array.from(this.props.selected);const[movedColor]=newColorscale.splice(result.source.index,1);newColorscale.splice(result.destination.index,0,movedColor);this.props.onColorscaleChange(newColorscale,this.state.selectedColorscaleType)}render(){const{onColorscaleChange,selected,disableCategorySwitch}=this.props;const{selectedColorscaleType,showColorscalePicker,showCustomizeColor,colorComponentVisibility}=this.state;const description=_reactColorscales.COLOR_PICKER_CONSTANTS.COLORSCALE_DESCRIPTIONS[selectedColorscaleType];const colorscaleOptions=_reactColorscales.COLOR_PICKER_CONSTANTS.COLORSCALE_TYPES.filter(type=>type!=="custom").map(type=>({label:type+" scales",value:type}));const _=this.context.localize;const Icon=showCustomizeColor?_plotlyIcons.CloseIcon:_plotlyIcons.EditIcon;return _react.default.createElement(_reactBeautifulDnd.DragDropContext,{onDragEnd:this.onDragEnd},_react.default.createElement("div",{className:"customPickerContainer"},_react.default.createElement("div",{className:"customPickerContainer__clickable",style:{display:"flex",alignItems:"flex-start"}},_react.default.createElement(_reactColorscales.Colorscale,{colorscale:selected,onClick:this.onClick}),this.props.editable&&_react.default.createElement(_react.default.Fragment,null,_react.default.createElement(Icon,{size:"20px",onClick:()=>this.setState(prevState=>({showCustomizeColor:!prevState.showCustomizeColor})),color:"var(--color-accent)",style:{cursor:"pointer",marginLeft:"0.5rem"}}),_react.default.createElement(_plotlyIcons.RotateLeftIcon,{size:"20px",onClick:()=>{this.props.onColorscaleChange(selected.reverse(),this.state.selectedColorscaleType)},color:"var(--color-accent)",style:{cursor:"pointer",marginLeft:"0.5rem"}}))),this.props.editable&&showCustomizeColor&&_react.default.createElement(_react.default.Fragment,null,_react.default.createElement(_reactBeautifulDnd.Droppable,{droppableId:"colorList"},provided=>_react.default.createElement("div",_extends({ref:provided.innerRef},provided.droppableProps),(selected===null||selected===void 0?void 0:selected.length)>0&&selected.map((item,index)=>_react.default.createElement(_reactBeautifulDnd.Draggable,{key:index,draggableId:"color-".concat(index),index:index,isDragDisabled:colorComponentVisibility.includes(true),style:{position:"relative"}},(provided,snapshot)=>{if(snapshot.isDragging){const offset={x:20,y:0};const x=provided.draggableProps.style.left-offset.x;const y=provided.draggableProps.style.top-offset.y;provided.draggableProps.style.left=x;provided.draggableProps.style.top=y}return _react.default.createElement("div",_extends({ref:provided.innerRef},provided.draggableProps,provided.dragHandleProps,{style:_objectSpread({position:"relative",margin:"5px 0"},provided.draggableProps.style)}),_react.default.createElement(_ColorPicker.default,{selectedColorscale:selected,selectedColor:item,onColorChange:(color,isVisible)=>this.handleColorChange(color,index,isVisible),onVisibilityChange:isVisible=>{this.handleVisibilityChange(index,isVisible);colorComponentVisibility[index]=false},onDeleteColor:()=>this.handleDeleteColor(index)}))})),provided.placeholder)),_react.default.createElement("div",{className:"color-buttons-container"},_react.default.createElement(_Button.default,{icon:_react.default.createElement(_plotlyIcons.PlusIcon,{size:"18px"}),variant:"primary",title:"Add new color",onClick:()=>this.handleAddColor(),style:{width:"100%"}},"Add"))),showColorscalePicker?_react.default.createElement("div",{className:"customPickerContainer__expanded-content"},disableCategorySwitch?null:_react.default.createElement(_Dropdown.default,{options:colorscaleOptions,value:selectedColorscaleType,onChange:this.onChange,clearable:false,searchable:false,placeholder:_("Select a Colorscale Type"),className:"customPickerContainer__category-dropdown"}),description?_react.default.createElement("div",{className:"customPickerContainer__palettes"},_react.default.createElement(_reactColorscales.default,{onChange:onColorscaleChange,colorscale:selected,width:colorscalepickerContainerWidth,colorscaleType:this.state.selectedColorscaleType,onColorscaleTypeChange:this.onColorscaleTypeChange,customColors:this.context.customColors,scaleLength:7,disableSwatchControls:true}),_react.default.createElement(_Info.default,{className:"customPickerContainer__info"},description)):null):null))}__reactstandin__regenerateByEval(key,code){this[key]=eval(code)}}Scale.propTypes={onColorscaleChange:_propTypes.default.func,selected:_propTypes.default.array,label:_propTypes.default.string,initialCategory:_propTypes.default.string,disableCategorySwitch:_propTypes.default.bool,editable:_propTypes.default.bool};Scale.contextTypes={localize:_propTypes.default.func,customColors:_propTypes.default.array};const _default=Scale;var _default2=exports.default=_default;;(function(){var reactHotLoader=typeof reactHotLoaderGlobal!=="undefined"?reactHotLoaderGlobal.default:undefined;if(!reactHotLoader){return}reactHotLoader.register(colorscalepickerContainerWidth,"colorscalepickerContainerWidth","/react-chart-editor/src/components/widgets/ColorscalePicker.js");reactHotLoader.register(Scale,"Scale","/react-chart-editor/src/components/widgets/ColorscalePicker.js");reactHotLoader.register(_default,"default","/react-chart-editor/src/components/widgets/ColorscalePicker.js")})();;(function(){var leaveModule=typeof reactHotLoaderGlobal!=="undefined"?reactHotLoaderGlobal.leaveModule:undefined;leaveModule&&leaveModule(module)})(); //# sourceMappingURL=ColorscalePicker.js.map