mirror of
https://github.com/maputnik/editor.git
synced 2026-09-03 10:57:26 +00:00
1730e9cb1c
## Launch Checklist - Resolves #891 This PR upgrades code mirror from version 5 to version 6. It should not change any functionality dramatically. The filter and other expressions have line numbers now as I was not able to remove those without introducing a lot of code, which I preferred not to. Before: <img width="571" height="933" alt="image" src="https://github.com/user-attachments/assets/02f047ee-0857-4eb1-9431-2620099ea025" /> After: <img width="571" height="933" alt="image" src="https://github.com/user-attachments/assets/7cf60155-7cd9-4c06-915e-dec2ae8247fc" /> - [x] Briefly describe the changes in this PR. - [x] Link to related issues. - [x] Include before/after visuals or gifs if this PR includes visual changes. - [x] Write tests for all new functionality. - [x] Add an entry to `CHANGELOG.md` under the `## main` section. --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
96 lines
2.7 KiB
TypeScript
96 lines
2.7 KiB
TypeScript
import React from "react";
|
|
import {MdDelete, MdUndo} from "react-icons/md";
|
|
import { type WithTranslation, withTranslation } from "react-i18next";
|
|
|
|
import Block from "./Block";
|
|
import InputButton from "./InputButton";
|
|
import labelFromFieldName from "../libs/label-from-field-name";
|
|
import FieldJson from "./FieldJson";
|
|
import type { StylePropertySpecification } from "maplibre-gl";
|
|
import { type MappedLayerErrors } from "../libs/definitions";
|
|
|
|
|
|
type ExpressionPropertyInternalProps = {
|
|
fieldName: string
|
|
fieldType?: string
|
|
fieldSpec?: StylePropertySpecification
|
|
value?: any
|
|
errors?: MappedLayerErrors
|
|
onDelete?(...args: unknown[]): unknown
|
|
onChange(value: object): void
|
|
onUndo?(...args: unknown[]): unknown
|
|
canUndo?(...args: unknown[]): unknown
|
|
onFocus?(...args: unknown[]): unknown
|
|
onBlur?(...args: unknown[]): unknown
|
|
} & WithTranslation;
|
|
|
|
class ExpressionPropertyInternal extends React.Component<ExpressionPropertyInternalProps> {
|
|
static defaultProps = {
|
|
errors: {},
|
|
onFocus: () => {},
|
|
onBlur: () => {},
|
|
};
|
|
|
|
constructor(props: ExpressionPropertyInternalProps) {
|
|
super(props);
|
|
this.state = {
|
|
jsonError: false,
|
|
};
|
|
}
|
|
|
|
render() {
|
|
const {t, value, canUndo} = this.props;
|
|
const undoDisabled = canUndo ? !canUndo() : true;
|
|
|
|
const deleteStopBtn = (
|
|
<>
|
|
{this.props.onUndo &&
|
|
<InputButton
|
|
key="undo_action"
|
|
onClick={this.props.onUndo}
|
|
disabled={undoDisabled}
|
|
className="maputnik-delete-stop"
|
|
title={t("Revert from expression")}
|
|
>
|
|
<MdUndo />
|
|
</InputButton>
|
|
}
|
|
<InputButton
|
|
key="delete_action"
|
|
onClick={this.props.onDelete}
|
|
className="maputnik-delete-stop"
|
|
title={t("Delete expression")}
|
|
>
|
|
<MdDelete />
|
|
</InputButton>
|
|
</>
|
|
);
|
|
let error = undefined;
|
|
if (this.props.errors) {
|
|
const fieldKey = this.props.fieldType ? this.props.fieldType + "." + this.props.fieldName : this.props.fieldName;
|
|
error = this.props.errors[fieldKey];
|
|
}
|
|
return <Block
|
|
fieldSpec={this.props.fieldSpec}
|
|
label={t(labelFromFieldName(this.props.fieldName))}
|
|
action={deleteStopBtn}
|
|
wideMode={true}
|
|
error={error}
|
|
>
|
|
<FieldJson
|
|
lintType="expression"
|
|
spec={this.props.fieldSpec}
|
|
className="maputnik-expression-editor"
|
|
onFocus={this.props.onFocus}
|
|
onBlur={this.props.onBlur}
|
|
value={value}
|
|
maxHeight={200}
|
|
onChange={this.props.onChange}
|
|
/>
|
|
</Block>;
|
|
}
|
|
}
|
|
|
|
const ExpressionProperty = withTranslation()(ExpressionPropertyInternal);
|
|
export default ExpressionProperty;
|