Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Wps value range #7033

Merged
merged 25 commits into from
Apr 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
95ad720
refactor the DateTimeParameterEditor to be a functional component
sixlighthouses Jan 5, 2024
b505800
add the proptypes check to appease the tests
sixlighthouses Jan 5, 2024
015d63a
format and minor code tidy
sixlighthouses Jan 8, 2024
ccef646
update CHANGES.MD
sixlighthouses Jan 8, 2024
f6f2890
add the currentTime from timelineStack as the default date time in WP…
sixlighthouses Jan 10, 2024
60b2929
Merge remote-tracking branch 'origin/main' into wps-default-date
sixlighthouses Jan 10, 2024
f1ff4c1
no need to set dateValue when declaring it with useState
sixlighthouses Jan 10, 2024
a853ffa
Merge remote-tracking branch 'origin/main' into wps-value-range
sixlighthouses Jan 16, 2024
dd6f4ef
Add a NumberParameterEditor to allow for the setting of a min-max range
sixlighthouses Jan 22, 2024
45fbe8f
make NumberParameterEditor a functional component and add the Default…
sixlighthouses Jan 23, 2024
fbead47
Merge remote-tracking branch 'origin/main' into wps-value-range
sixlighthouses Jan 23, 2024
bde6c66
update CHANGES.MD
sixlighthouses Jan 23, 2024
b4bb5bd
Merge remote-tracking branch 'origin/main' into wps-value-range
sixlighthouses Apr 16, 2024
ae0e15b
add entry to CHANGES
sixlighthouses Apr 17, 2024
fbc2a29
set default on load and override isValid in NumberParameter
sixlighthouses Apr 23, 2024
b5195e7
undo ParameterEditor change
sixlighthouses Apr 23, 2024
6954706
run prettier checks
sixlighthouses Apr 23, 2024
9b9ead5
add rangeDescription check to ParameterEditor
sixlighthouses Apr 24, 2024
9f9e96f
use super.isValid in NumberParameter
sixlighthouses Apr 24, 2024
acb3766
remove scss button style and implement PR feedback for NumberParameter
sixlighthouses Apr 30, 2024
089bc87
Merge remote-tracking branch 'origin/main' into wps-value-range
sixlighthouses Apr 30, 2024
83927b8
fix type issue
sixlighthouses Apr 30, 2024
5f26e37
update CHANGES
sixlighthouses Apr 30, 2024
01ff4e0
remove changes to DateTimeParameters.jsx from this branch and reset C…
sixlighthouses Apr 30, 2024
c41c05a
remove entries from CHANGES
sixlighthouses Apr 30, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

#### next release (8.7.2)

- [The next improvement]
- Add NumberParameterEditor to enable WPS AllowedValues Ranges to be set and use DefaultValue

#### 8.7.1 - 2024-04-16

Expand Down
25 changes: 25 additions & 0 deletions lib/Models/Catalog/Ows/WebProcessingServiceCatalogFunction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,18 @@ import RegionTypeParameter from "../../FunctionParameters/RegionTypeParameter";
import StringParameter from "../../FunctionParameters/StringParameter";
import proxyCatalogItemUrl from "../proxyCatalogItemUrl";
import { ModelConstructorParameters } from "../../Definition/Model";

import WebProcessingServiceCatalogFunctionJob from "./WebProcessingServiceCatalogFunctionJob";
import NumberParameter from "../../FunctionParameters/NumberParameter";

type AllowedValues = {
Value?: string | string[];
Range?: Range;
};

type Range = {
MaximumValue?: number;
MinimumValue?: number;
};

type LiteralDataType = {
Expand All @@ -57,6 +65,7 @@ type LiteralData = {
AllowedValues?: AllowedValues;
AllowedValue?: AllowedValues;
AnyValue?: unknown;
DefaultValue?: unknown;
DataType?: LiteralDataType | string;
dataType?: string;
};
Expand Down Expand Up @@ -364,6 +373,7 @@ const LiteralDataConverter = {

const allowedValues =
input.LiteralData.AllowedValues || input.LiteralData.AllowedValue;

if (isDefined(allowedValues) && isDefined(allowedValues.Value)) {
return new EnumerationParameter(catalogFunction, {
...options,
Expand All @@ -375,6 +385,20 @@ const LiteralDataConverter = {
return { id };
})
});
} else if (isDefined(allowedValues) && isDefined(allowedValues.Range)) {
const np = new NumberParameter(catalogFunction, {
...options
});

np.minimum = isDefined(allowedValues.Range.MinimumValue)
? allowedValues.Range.MinimumValue
: np.minimum;
np.maximum = allowedValues.Range.MaximumValue;
np.defaultValue = isDefined(input.LiteralData.DefaultValue)
? (input.LiteralData.DefaultValue as number)
: np.minimum;

return np;
} else if (isDefined(input.LiteralData.AnyValue)) {
let dtype: string | null = null;
if (isDefined(input.LiteralData["dataType"])) {
Expand Down Expand Up @@ -411,6 +435,7 @@ const LiteralDataConverter = {
dt.variant = "literal";
return dt;
}

// Assume its a string, if no literal datatype given
return new StringParameter(catalogFunction, {
...options
Expand Down
76 changes: 76 additions & 0 deletions lib/Models/FunctionParameters/NumberParameter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
import { computed, makeObservable, override } from "mobx";
import FunctionParameter, {
Options as FunctionParameterOptions
} from "./FunctionParameter";
import CatalogFunctionMixin from "../../ModelMixins/CatalogFunctionMixin";

interface Options extends FunctionParameterOptions {
minimum?: number;
maximum?: number;
defaultValue?: number;
}

export default class NumberParameter
extends FunctionParameter<number>
implements Options
{
static readonly type = "number";
readonly type = "number";
minimum?: number;
maximum?: number;
defaultValue?: number;

@computed
get rangeDescription() {
if (this.minimum !== undefined && this.maximum !== undefined) {
return `: must be between ${this.minimum} to ${this.maximum}`;
} else if (this.minimum !== undefined) {
return `: at least ${this.minimum}`;
} else if (this.maximum !== undefined) {
return `: at most ${this.maximum}`;
} else {
return "";
}
}

@override get value(): number | undefined {
return super.value ?? this.defaultValue;
}

@override
get isValid(): boolean {
return super.value === undefined
? this.isValidRange
: this.isValidRange && super.isValid;
}

get isValidRange(): boolean {
let value =
this.value !== undefined ? this.value : (this.defaultValue as number);

if (typeof value === "string") {
value = parseFloat(value);
}

if (this.minimum !== undefined && value < this.minimum) {
return false;
}

if (this.maximum !== undefined && value > this.maximum) {
return false;
}

return true;
}

constructor(
catalogFunction: CatalogFunctionMixin.Instance,
options: Options
) {
super(catalogFunction, options);
makeObservable(this);
this.minimum = options.minimum;
this.maximum = options.maximum;
this.defaultValue = options.defaultValue;
}
}
2 changes: 2 additions & 0 deletions lib/Models/FunctionParameters/createParameterFromType.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,14 @@ var PolygonParameter = require("./PolygonParameter");
var DateTimeParameter = require("./DateTimeParameter");
var EnumerationParameter = require("./EnumerationParameter");
var StringParameter = require("./StringParameter");
var NumberParameter = require("./NumberParameter");
var PointParameter = require("./PointParameter");
var BooleanParameter = require("./BooleanParameter");
var BooleanParameterGroup = require("./BooleanParameterGroup");

var mapping = {
[StringParameter.prototype.type]: StringParameter,
[NumberParameter.prototype.type]: NumberParameter,
[EnumerationParameter.prototype.type]: EnumerationParameter,
[BooleanParameter.prototype.type]: BooleanParameter,
[BooleanParameterGroup.prototype.type]: BooleanParameterGroup,
Expand Down
39 changes: 39 additions & 0 deletions lib/ReactViews/Analytics/NumberParameterEditor.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import React, { ChangeEvent, useEffect, useState } from "react";
import { observer } from "mobx-react";
import CommonStrata from "../../Models/Definition/CommonStrata";
import NumberParameter from "../../Models/FunctionParameters/NumberParameter";

import Styles from "./parameter-editors.scss";

const NumberParameterEditor: React.FC<{ parameter: NumberParameter }> = ({
parameter
}) => {
const [value, setValue] = useState<number | undefined>(0);

useEffect(() => {
if (parameter.defaultValue !== undefined) {
setValue(parameter.defaultValue);
}
}, [parameter.defaultValue]);

const onChange = (e: ChangeEvent<HTMLInputElement>) => {
setValue(parseFloat(e.target.value));
parameter.setValue(CommonStrata.user, parseFloat(e.target.value));
};

const min = (parameter.minimum || "") as string;
const max = (parameter.maximum || "") as string;

return (
<input
className={Styles.field}
type="number"
onChange={onChange}
value={value}
min={min}
max={max}
/>
);
};

export default observer(NumberParameterEditor);
34 changes: 30 additions & 4 deletions lib/ReactViews/Analytics/ParameterEditor.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import DateParameterEditor from "./DateParameterEditor";
import DateTimeParameterEditor from "./DateTimeParameterEditor";
import EnumerationParameterEditor from "./EnumerationParameterEditor";
import GenericParameterEditor from "./GenericParameterEditor";
import NumberParameterEditor from "./NumberParameterEditor";
import GeoJsonParameterEditor from "./GeoJsonParameterEditor";
import defined from "terriajs-cesium/Source/Core/defined";

Expand Down Expand Up @@ -49,11 +50,18 @@ const ParameterEditor = createReactClass({
{this.props.parameter.isRequired && <span> (required)</span>}
</label>
{typeof this.props.parameter.description === "string" &&
this.props.parameter.description !== ""
? parseCustomMarkdownToReact(this.props.parameter.description, {
this.props.parameter.description !== "" &&
typeof this.props.parameter.rangeDescription === "string" &&
this.props.parameter.rangeDescription !== ""
? parseCustomMarkdownToReact(
`${this.props.parameter.description} ${this.props.parameter.rangeDescription}`,
{
parameter: this.props.parameter
}
)
: parseCustomMarkdownToReact(this.props.parameter.description, {
parameter: this.props.parameter
})
: ""}
})}
</div>
);
},
Expand Down Expand Up @@ -222,6 +230,7 @@ ParameterEditor.parameterTypeConverters = [
previewed={parameterEditor.props.previewed}
parameter={parameterEditor.props.parameter}
parameterViewModel={parameterEditor.props.parameterViewModel}
terria={parameterEditor.props.viewState.terria}
/>
</div>
);
Expand Down Expand Up @@ -370,6 +379,23 @@ ParameterEditor.parameterTypeConverters = [
);
}
}
},
{
id: "number",
parameterTypeToDiv: function NumberParameterToDiv(type, parameterEditor) {
if (type === this.id) {
return (
<div>
{parameterEditor.renderLabel()}
<NumberParameterEditor
previewed={parameterEditor.props.previewed}
parameter={parameterEditor.props.parameter}
parameterViewModel={parameterEditor.props.parameterViewModel}
/>
</div>
);
}
}
}
];

Expand Down
1 change: 0 additions & 1 deletion lib/ReactViews/Analytics/invoke-function.scss
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
@import "~terriajs-variables";
@import "../../Sass/common/mixins";
@import "../../Sass/common/_buttons.scss";

.invoke-function {
padding: $padding-small;
Expand Down
49 changes: 0 additions & 49 deletions lib/ReactViews/Analytics/invoke-function.scss.d.ts
Original file line number Diff line number Diff line change
@@ -1,61 +1,12 @@
// This file is automatically generated.
// Please do not change this file!
interface CssExports {
'_buttons__btn-primary': string;
'btn': string;
'btn--add-to-map': string;
'btn--catalog': string;
'btn--catalog-item': string;
'btn--close-modal': string;
'btn--group-indicator': string;
'btn--loading-on-map': string;
'btn--map': string;
'btn--radio': string;
'btn--remove-from-map': string;
'btn--search-clear': string;
'btn--secondary': string;
'btn--small': string;
'btn--tab': string;
'btn--tertiary': string;
'btn--tertiary-dark': string;
'btn-grey': string;
'btn-large': string;
'btn-primary': string;
'btn-primary--hover': string;
'btn-small': string;
'btn-transparent': string;
'btnAddToMap': string;
'btnCatalog': string;
'btnCatalogItem': string;
'btnCloseModal': string;
'btnGrey': string;
'btnGroupIndicator': string;
'btnLarge': string;
'btnLoadingOnMap': string;
'btnMap': string;
'btnPrimary': string;
'btnPrimaryHover': string;
'btnRadio': string;
'btnRemoveFromMap': string;
'btnSearchClear': string;
'btnSecondary': string;
'btnSmall': string;
'btnTab': string;
'btnTertiary': string;
'btnTertiaryDark': string;
'btnTransparent': string;
'buttonsBtnPrimary': string;
'content': string;
'description': string;
'footer': string;
'invoke-function': string;
'invokeFunction': string;
'is-active': string;
'is-open': string;
'is-previewed': string;
'isActive': string;
'isOpen': string;
'isPreviewed': string;
}
declare var cssExports: CssExports;
export = cssExports;