@macrostrat/column-components
Version:
React rendering primitives for stratigraphic columns
88 lines (79 loc) • 1.97 kB
text/typescript
/*
* decaffeinate suggestions:
* DS102: Remove unnecessary code created because of implicit returns
* DS206: Consider reworking classes to avoid initClass
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
*/
import { Component } from "react";
import h from "@macrostrat/hyper";
import { SwatchesPicker } from "react-color";
import { Popover } from "@blueprintjs/core";
import { FaciesContext } from "../../context";
interface FaciesColorPickerProps {
facies: {
id: number;
color: string;
};
}
class FaciesColorPicker extends Component<FaciesColorPickerProps> {
static contextType = FaciesContext;
context: any;
render() {
const { setFaciesColor } = this.context;
const { facies: d } = this.props;
return h("div", [
h(SwatchesPicker, {
color: d.color || "black",
onChangeComplete(color) {
return setFaciesColor(d.id, color.hex);
},
styles: {
width: 500,
height: 570,
},
}),
]);
}
}
const BasicFaciesSwatch = ({ facies: d, ...rest }) =>
h("div.color-swatch", {
style: {
backgroundColor: d.color || "black",
width: "2em",
height: "2em",
},
...rest,
});
interface FaciesSwatchProps {
isEditable: boolean;
facies: {
id: number;
color: string;
} | null;
}
class FaciesSwatch extends Component<FaciesSwatchProps> {
static defaultProps = {
isEditable: true,
facies: null,
};
constructor(props) {
super(props);
}
render() {
const { facies, isEditable } = this.props;
const basic = h(BasicFaciesSwatch, { facies });
if (!isEditable) {
return basic;
}
return h(
Popover,
{
// tetherOptions: {
// constraints: [{ attachment: "together", to: "scrollParent" }],
// },
},
[basic, h(FaciesColorPicker, { facies })],
);
}
}
export { FaciesSwatch, BasicFaciesSwatch };