@axdspub/axiom-ui-forms 0.3.3 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/library/axiom-ui-forms.d.ts +56 -26
- package/library/esm/_virtual/index10.js +2 -2
- package/library/esm/_virtual/index3.js +2 -2
- package/library/esm/_virtual/index4.js +2 -2
- package/library/esm/_virtual/index9.js +2 -2
- package/library/esm/node_modules/@axdspub/axiom-maps/library/index.js +1 -1
- package/library/esm/node_modules/@axdspub/axiom-maps/library/openlayers/index.esm.js +1 -1
- package/library/esm/node_modules/@axdspub/axiom-maps/node_modules/@axdspub/axiom-ui-utilities/library/index.js +15219 -0
- package/library/esm/node_modules/@axdspub/axiom-maps/node_modules/@axdspub/axiom-ui-utilities/library/index.js.map +1 -0
- package/library/esm/node_modules/@axdspub/axiom-ui-utilities/library/index.js +122 -90
- package/library/esm/node_modules/@axdspub/axiom-ui-utilities/library/index.js.map +1 -1
- package/library/esm/node_modules/@radix-ui/react-icons/dist/react-icons.esm.js +23 -1
- package/library/esm/node_modules/@radix-ui/react-icons/dist/react-icons.esm.js.map +1 -1
- package/library/esm/node_modules/ajv/dist/compile/validate/index.js +1 -1
- package/library/esm/node_modules/ajv/dist/vocabularies/core/index.js +1 -1
- package/library/esm/node_modules/ajv/dist/vocabularies/discriminator/index.js +1 -1
- package/library/esm/node_modules/ajv/dist/vocabularies/format/index.js +1 -1
- package/library/esm/node_modules/lodash-es/_SetCache.js +28 -0
- package/library/esm/node_modules/lodash-es/_SetCache.js.map +1 -0
- package/library/esm/node_modules/lodash-es/_arrayLikeKeys.js +8 -1
- package/library/esm/node_modules/lodash-es/_arrayLikeKeys.js.map +1 -1
- package/library/esm/node_modules/lodash-es/_arraySome.js +24 -0
- package/library/esm/node_modules/lodash-es/_arraySome.js.map +1 -0
- package/library/esm/node_modules/lodash-es/_baseIsEqual.js +29 -0
- package/library/esm/node_modules/lodash-es/_baseIsEqual.js.map +1 -0
- package/library/esm/node_modules/lodash-es/_baseIsEqualDeep.js +84 -0
- package/library/esm/node_modules/lodash-es/_baseIsEqualDeep.js.map +1 -0
- package/library/esm/node_modules/lodash-es/_baseKeys.js +31 -0
- package/library/esm/node_modules/lodash-es/_baseKeys.js.map +1 -0
- package/library/esm/node_modules/lodash-es/_baseTrim.js +20 -0
- package/library/esm/node_modules/lodash-es/_baseTrim.js.map +1 -0
- package/library/esm/node_modules/lodash-es/_cacheHas.js +14 -0
- package/library/esm/node_modules/lodash-es/_cacheHas.js.map +1 -0
- package/library/esm/node_modules/lodash-es/_equalArrays.js +85 -0
- package/library/esm/node_modules/lodash-es/_equalArrays.js.map +1 -0
- package/library/esm/node_modules/lodash-es/_equalByTag.js +113 -0
- package/library/esm/node_modules/lodash-es/_equalByTag.js.map +1 -0
- package/library/esm/node_modules/lodash-es/_equalObjects.js +91 -0
- package/library/esm/node_modules/lodash-es/_equalObjects.js.map +1 -0
- package/library/esm/node_modules/lodash-es/_getAllKeys.js +17 -0
- package/library/esm/node_modules/lodash-es/_getAllKeys.js.map +1 -0
- package/library/esm/node_modules/lodash-es/_mapToArray.js +19 -0
- package/library/esm/node_modules/lodash-es/_mapToArray.js.map +1 -0
- package/library/esm/node_modules/lodash-es/_nativeKeys.js +7 -0
- package/library/esm/node_modules/lodash-es/_nativeKeys.js.map +1 -0
- package/library/esm/node_modules/lodash-es/_setCacheAdd.js +20 -0
- package/library/esm/node_modules/lodash-es/_setCacheAdd.js.map +1 -0
- package/library/esm/node_modules/lodash-es/_setCacheHas.js +15 -0
- package/library/esm/node_modules/lodash-es/_setCacheHas.js.map +1 -0
- package/library/esm/node_modules/lodash-es/_setToArray.js +19 -0
- package/library/esm/node_modules/lodash-es/_setToArray.js.map +1 -0
- package/library/esm/node_modules/lodash-es/_trimmedEndIndex.js +20 -0
- package/library/esm/node_modules/lodash-es/_trimmedEndIndex.js.map +1 -0
- package/library/esm/node_modules/lodash-es/debounce.js +192 -0
- package/library/esm/node_modules/lodash-es/debounce.js.map +1 -0
- package/library/esm/node_modules/lodash-es/isEqual.js +36 -0
- package/library/esm/node_modules/lodash-es/isEqual.js.map +1 -0
- package/library/esm/node_modules/lodash-es/keys.js +38 -0
- package/library/esm/node_modules/lodash-es/keys.js.map +1 -0
- package/library/esm/node_modules/lodash-es/keysIn.js +1 -1
- package/library/esm/node_modules/lodash-es/keysIn.js.map +1 -1
- package/library/esm/node_modules/lodash-es/now.js +24 -0
- package/library/esm/node_modules/lodash-es/now.js.map +1 -0
- package/library/esm/node_modules/lodash-es/toNumber.js +65 -0
- package/library/esm/node_modules/lodash-es/toNumber.js.map +1 -0
- package/library/esm/src/Form/Components/FieldCreator.js +86 -31
- package/library/esm/src/Form/Components/FieldCreator.js.map +1 -1
- package/library/esm/src/Form/Components/FieldLabel.js +90 -19
- package/library/esm/src/Form/Components/FieldLabel.js.map +1 -1
- package/library/esm/src/Form/Components/InlineMarkdown.js +4 -0
- package/library/esm/src/Form/Components/InlineMarkdown.js.map +1 -1
- package/library/esm/src/Form/Components/Inputs/Boolean.js +8 -6
- package/library/esm/src/Form/Components/Inputs/Boolean.js.map +1 -1
- package/library/esm/src/Form/Components/Inputs/Constant.js +2 -2
- package/library/esm/src/Form/Components/Inputs/Constant.js.map +1 -1
- package/library/esm/src/Form/Components/Inputs/Date.js +3 -4
- package/library/esm/src/Form/Components/Inputs/Date.js.map +1 -1
- package/library/esm/src/Form/Components/Inputs/DateTime.js +3 -4
- package/library/esm/src/Form/Components/Inputs/DateTime.js.map +1 -1
- package/library/esm/src/Form/Components/Inputs/GeoJSON.js +5 -4
- package/library/esm/src/Form/Components/Inputs/GeoJSON.js.map +1 -1
- package/library/esm/src/Form/Components/Inputs/Geometry.js +20 -11
- package/library/esm/src/Form/Components/Inputs/Geometry.js.map +1 -1
- package/library/esm/src/Form/Components/Inputs/JSON.js +6 -5
- package/library/esm/src/Form/Components/Inputs/JSON.js.map +1 -1
- package/library/esm/src/Form/Components/Inputs/LongString.js +5 -5
- package/library/esm/src/Form/Components/Inputs/LongString.js.map +1 -1
- package/library/esm/src/Form/Components/Inputs/Number.js +49 -35
- package/library/esm/src/Form/Components/Inputs/Number.js.map +1 -1
- package/library/esm/src/Form/Components/Inputs/Object.js +46 -11
- package/library/esm/src/Form/Components/Inputs/Object.js.map +1 -1
- package/library/esm/src/Form/Components/Inputs/RadioGroup.js +2 -3
- package/library/esm/src/Form/Components/Inputs/RadioGroup.js.map +1 -1
- package/library/esm/src/Form/Components/Inputs/SingleSelect.js +2 -3
- package/library/esm/src/Form/Components/Inputs/SingleSelect.js.map +1 -1
- package/library/esm/src/Form/Components/Inputs/String.js +5 -11
- package/library/esm/src/Form/Components/Inputs/String.js.map +1 -1
- package/library/esm/src/Form/Components/Inputs/Time.js +2 -3
- package/library/esm/src/Form/Components/Inputs/Time.js.map +1 -1
- package/library/esm/src/Form/Creator/FormCreator.js +6 -6
- package/library/esm/src/Form/Creator/FormCreator.js.map +1 -1
- package/library/esm/src/Form/Creator/FormFields.js +1 -1
- package/library/esm/src/Form/Creator/FormFields.js.map +1 -1
- package/library/esm/src/Form/Creator/FormHeader.js +2 -1
- package/library/esm/src/Form/Creator/FormHeader.js.map +1 -1
- package/library/esm/src/Form/Creator/FormSection.js +1 -1
- package/library/esm/src/Form/Creator/FormSection.js.map +1 -1
- package/library/esm/src/Form/Creator/Page.js +7 -2
- package/library/esm/src/Form/Creator/Page.js.map +1 -1
- package/library/esm/src/Form/Creator/Wizard.js +6 -6
- package/library/esm/src/Form/Creator/Wizard.js.map +1 -1
- package/library/esm/src/utils/getters.js +36 -6
- package/library/esm/src/utils/getters.js.map +1 -1
- package/library/esm/src/utils/helpers.js +11 -0
- package/library/esm/src/utils/helpers.js.map +1 -0
- package/library/esm/src/utils/manipulators.js +30 -11
- package/library/esm/src/utils/manipulators.js.map +1 -1
- package/library/esm/src/utils/schemaToFormHelpers.js +2 -2
- package/library/esm/src/utils/schemaToFormHelpers.js.map +1 -1
- package/library/esm/src/utils/validators.js +94 -15
- package/library/esm/src/utils/validators.js.map +1 -1
- package/package.json +5 -3
@@ -1,10 +1,9 @@
|
|
1
|
-
import { __assign } from '../../../../node_modules/tslib/tslib.es6.js';
|
2
1
|
import FieldLabel from '../FieldLabel.js';
|
3
2
|
import React__default, { useState } from 'react';
|
4
3
|
|
5
4
|
var DateInput = function (_a) {
|
6
5
|
var _b;
|
7
|
-
var field = _a.field, onChange = _a.onChange, value = _a.value;
|
6
|
+
var field = _a.field, onChange = _a.onChange, value = _a.value, disabled = _a.disabled;
|
8
7
|
if (field.type !== 'date') {
|
9
8
|
return React__default.createElement("p", null,
|
10
9
|
"Field config for ",
|
@@ -81,9 +80,9 @@ var DateInput = function (_a) {
|
|
81
80
|
return (React__default.createElement("div", null,
|
82
81
|
React__default.createElement("div", { className: "flex flex-wrap items-baseline gap-2" },
|
83
82
|
React__default.createElement("label", { htmlFor: field.id, className: "flex-1 min-w-[200px]" },
|
84
|
-
React__default.createElement(FieldLabel,
|
83
|
+
React__default.createElement(FieldLabel, { field: field, disabled: disabled, value: value, onChange: onChange })),
|
85
84
|
constraintMessage && (React__default.createElement("span", { className: "text-sm text-slate-500 italic" }, constraintMessage))),
|
86
|
-
React__default.createElement("input", { id: field.id, className: "border ".concat(error ? 'border-red-500' : 'border-slate-300', " p-2 w-full"), "data-testid": field.id, type: "date", value: inputValue, onChange: handleChange, min: minDate ? formatValue(minDate) : undefined, max: maxDate ? formatValue(maxDate) : undefined }),
|
85
|
+
React__default.createElement("input", { id: field.id, disabled: disabled, className: "border ".concat(error ? 'border-red-500' : 'border-slate-300', " p-2 w-full").concat(disabled ? ' opacity-50 cursor-not-allowed' : ''), "data-testid": field.id, type: "date", value: inputValue, onChange: handleChange, min: minDate ? formatValue(minDate) : undefined, max: maxDate ? formatValue(maxDate) : undefined }),
|
87
86
|
error && React__default.createElement("p", { className: "text-red-500 text-sm mt-1" }, error)));
|
88
87
|
};
|
89
88
|
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Date.js","sources":["../../../../../../src/Form/Components/Inputs/Date.tsx"],"sourcesContent":["import FieldLabel from '@/Form/Components/FieldLabel'\r\nimport { type IFieldInputProps } from '@/Form/Creator/FormCreatorTypes'\r\nimport React, { type ReactElement, useState } from 'react'\r\n\r\nconst DateInput = ({ field, onChange, value }: IFieldInputProps): ReactElement => {\r\n if (field.type !== 'date') {\r\n return <p>Field config for {field.id} is missing 'options'</p>\r\n }\r\n\r\n const [error, setError] = useState<string | null>(null)\r\n const { minDate, maxDate } = field.constraints ?? {}\r\n\r\n // Convert the value to the format expected by date input (YYYY-MM-DD)\r\n const formatValue = (val: string | undefined | null): string => {\r\n if (!val) return ''\r\n try {\r\n // Ensure the value is in the correct format\r\n const date = new Date(val)\r\n if (isNaN(date.getTime())) return ''\r\n\r\n // Format to YYYY-MM-DD using UTC to avoid timezone issues\r\n const year = date.getUTCFullYear()\r\n const month = String(date.getUTCMonth() + 1).padStart(2, '0')\r\n const day = String(date.getUTCDate()).padStart(2, '0')\r\n\r\n return `${year}-${month}-${day}`\r\n } catch {\r\n return ''\r\n }\r\n }\r\n\r\n const inputValue = formatValue(value as string)\r\n\r\n const validateDate = (dateStr: string): string | null => {\r\n if (!minDate && !maxDate) return null\r\n\r\n const inputDate = new Date(dateStr + 'T00:00:00Z')\r\n const minDateObj = minDate ? new Date(minDate) : null\r\n const maxDateObj = maxDate ? new Date(maxDate) : null\r\n\r\n if (minDateObj && inputDate < minDateObj) {\r\n return `Date must be after ${formatValue(minDate)}`\r\n }\r\n if (maxDateObj && inputDate > maxDateObj) {\r\n return `Date must be before ${formatValue(maxDate)}`\r\n }\r\n return null\r\n }\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>): void => {\r\n const newValue = e.target.value\r\n // Only notify parent of change if we have a complete valid date\r\n if (newValue) {\r\n // Create date in UTC by appending T00:00:00Z to the input value\r\n const date = new Date(newValue + 'T00:00:00Z')\r\n // Check if it's a valid date and the year is reasonable (4 digits)\r\n if (!isNaN(date.getTime()) && date.getUTCFullYear() > 999) {\r\n const validationError = validateDate(newValue)\r\n setError(validationError)\r\n if (!validationError) {\r\n onChange(date.toISOString())\r\n }\r\n }\r\n } else {\r\n setError(null)\r\n onChange(undefined)\r\n }\r\n }\r\n\r\n const getConstraintMessage = (): string | null => {\r\n if (!minDate && !maxDate) return null\r\n const parts = []\r\n if (minDate) parts.push(`after ${formatValue(minDate)}`)\r\n if (maxDate) parts.push(`before ${formatValue(maxDate)}`)\r\n return `Must be ${parts.join(' and ')}`\r\n }\r\n\r\n const constraintMessage = getConstraintMessage()\r\n\r\n return (\r\n <div>\r\n <div className=\"flex flex-wrap items-baseline gap-2\">\r\n <label htmlFor={field.id} className=\"flex-1 min-w-[200px]\">\r\n <FieldLabel {
|
1
|
+
{"version":3,"file":"Date.js","sources":["../../../../../../src/Form/Components/Inputs/Date.tsx"],"sourcesContent":["import FieldLabel from '@/Form/Components/FieldLabel'\r\nimport { type IFieldInputProps } from '@/Form/Creator/FormCreatorTypes'\r\nimport React, { type ReactElement, useState } from 'react'\r\n\r\nconst DateInput = ({ field, onChange, value, disabled }: IFieldInputProps): ReactElement => {\r\n if (field.type !== 'date') {\r\n return <p>Field config for {field.id} is missing 'options'</p>\r\n }\r\n\r\n const [error, setError] = useState<string | null>(null)\r\n const { minDate, maxDate } = field.constraints ?? {}\r\n\r\n // Convert the value to the format expected by date input (YYYY-MM-DD)\r\n const formatValue = (val: string | undefined | null): string => {\r\n if (!val) return ''\r\n try {\r\n // Ensure the value is in the correct format\r\n const date = new Date(val)\r\n if (isNaN(date.getTime())) return ''\r\n\r\n // Format to YYYY-MM-DD using UTC to avoid timezone issues\r\n const year = date.getUTCFullYear()\r\n const month = String(date.getUTCMonth() + 1).padStart(2, '0')\r\n const day = String(date.getUTCDate()).padStart(2, '0')\r\n\r\n return `${year}-${month}-${day}`\r\n } catch {\r\n return ''\r\n }\r\n }\r\n\r\n const inputValue = formatValue(value as string)\r\n\r\n const validateDate = (dateStr: string): string | null => {\r\n if (!minDate && !maxDate) return null\r\n\r\n const inputDate = new Date(dateStr + 'T00:00:00Z')\r\n const minDateObj = minDate ? new Date(minDate) : null\r\n const maxDateObj = maxDate ? new Date(maxDate) : null\r\n\r\n if (minDateObj && inputDate < minDateObj) {\r\n return `Date must be after ${formatValue(minDate)}`\r\n }\r\n if (maxDateObj && inputDate > maxDateObj) {\r\n return `Date must be before ${formatValue(maxDate)}`\r\n }\r\n return null\r\n }\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>): void => {\r\n const newValue = e.target.value\r\n // Only notify parent of change if we have a complete valid date\r\n if (newValue) {\r\n // Create date in UTC by appending T00:00:00Z to the input value\r\n const date = new Date(newValue + 'T00:00:00Z')\r\n // Check if it's a valid date and the year is reasonable (4 digits)\r\n if (!isNaN(date.getTime()) && date.getUTCFullYear() > 999) {\r\n const validationError = validateDate(newValue)\r\n setError(validationError)\r\n if (!validationError) {\r\n onChange(date.toISOString())\r\n }\r\n }\r\n } else {\r\n setError(null)\r\n onChange(undefined)\r\n }\r\n }\r\n\r\n const getConstraintMessage = (): string | null => {\r\n if (!minDate && !maxDate) return null\r\n const parts = []\r\n if (minDate) parts.push(`after ${formatValue(minDate)}`)\r\n if (maxDate) parts.push(`before ${formatValue(maxDate)}`)\r\n return `Must be ${parts.join(' and ')}`\r\n }\r\n\r\n const constraintMessage = getConstraintMessage()\r\n\r\n return (\r\n <div>\r\n <div className=\"flex flex-wrap items-baseline gap-2\">\r\n <label htmlFor={field.id} className=\"flex-1 min-w-[200px]\">\r\n <FieldLabel field={field} disabled={disabled} value={value} onChange={onChange} />\r\n </label>\r\n {constraintMessage && (\r\n <span className=\"text-sm text-slate-500 italic\">\r\n {constraintMessage}\r\n </span>\r\n )}\r\n </div>\r\n <input\r\n id={field.id}\r\n disabled={disabled}\r\n className={`border ${error ? 'border-red-500' : 'border-slate-300'} p-2 w-full${disabled ? ' opacity-50 cursor-not-allowed' : ''}`}\r\n data-testid={field.id}\r\n type=\"date\"\r\n value={inputValue}\r\n onChange={handleChange}\r\n min={minDate ? formatValue(minDate) : undefined}\r\n max={maxDate ? formatValue(maxDate) : undefined}\r\n />\r\n {error && <p className=\"text-red-500 text-sm mt-1\">{error}</p>}\r\n </div>\r\n )\r\n}\r\n\r\nexport default DateInput\r\n"],"names":["React"],"mappings":"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"}
|
@@ -1,10 +1,9 @@
|
|
1
|
-
import { __assign } from '../../../../node_modules/tslib/tslib.es6.js';
|
2
1
|
import FieldLabel from '../FieldLabel.js';
|
3
2
|
import React__default, { useState } from 'react';
|
4
3
|
|
5
4
|
var DateTimeInput = function (_a) {
|
6
5
|
var _b;
|
7
|
-
var field = _a.field, onChange = _a.onChange, value = _a.value;
|
6
|
+
var field = _a.field, onChange = _a.onChange, value = _a.value, disabled = _a.disabled;
|
8
7
|
var _c = useState(null), error = _c[0], setError = _c[1];
|
9
8
|
if (field.type !== 'datetime') {
|
10
9
|
return React__default.createElement("p", null,
|
@@ -78,9 +77,9 @@ var DateTimeInput = function (_a) {
|
|
78
77
|
return (React__default.createElement("div", null,
|
79
78
|
React__default.createElement("div", { className: "flex flex-wrap items-baseline gap-2" },
|
80
79
|
React__default.createElement("label", { htmlFor: field.id, className: "flex-1 min-w-[200px]" },
|
81
|
-
React__default.createElement(FieldLabel,
|
80
|
+
React__default.createElement(FieldLabel, { field: field, disabled: disabled, value: value, onChange: onChange })),
|
82
81
|
constraintMessage && (React__default.createElement("span", { className: "text-sm text-slate-500 italic" }, constraintMessage))),
|
83
|
-
React__default.createElement("input", { id: field.id, className: "border ".concat(error ? 'border-red-500' : 'border-slate-300', " p-2 w-full"), "data-testid": field.id, type: "datetime-local", value: formatValue(value), onChange: handleChange, min: minDateTime ? formatValue(minDateTime) : undefined, max: maxDateTime ? formatValue(maxDateTime) : undefined }),
|
82
|
+
React__default.createElement("input", { id: field.id, disabled: disabled, className: "border ".concat(error ? 'border-red-500' : 'border-slate-300', " p-2 w-full").concat(disabled ? ' opacity-50 cursor-not-allowed' : ''), "data-testid": field.id, type: "datetime-local", value: formatValue(value), onChange: handleChange, min: minDateTime ? formatValue(minDateTime) : undefined, max: maxDateTime ? formatValue(maxDateTime) : undefined }),
|
84
83
|
error && React__default.createElement("p", { className: "text-red-500 text-sm mt-1" }, error)));
|
85
84
|
};
|
86
85
|
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"DateTime.js","sources":["../../../../../../src/Form/Components/Inputs/DateTime.tsx"],"sourcesContent":["import FieldLabel from '@/Form/Components/FieldLabel'\r\nimport { type IFieldInputProps } from '@/Form/Creator/FormCreatorTypes'\r\nimport React, { type ReactElement, useState } from 'react'\r\n\r\nconst DateTimeInput = ({ field, onChange, value }: IFieldInputProps): ReactElement => {\r\n const [error, setError] = useState<string | null>(null)\r\n\r\n if (field.type !== 'datetime') {\r\n return <p>Field config for {field.id} is missing 'options'</p>\r\n }\r\n const { minDateTime, maxDateTime } = field.constraints ?? {}\r\n\r\n // Convert the value to the format expected by datetime-local input (YYYY-MM-DDThh:mm)\r\n const formatValue = (val: string | undefined | null): string => {\r\n if (!val) return ''\r\n try {\r\n // Ensure the value is in the correct format\r\n const date = new Date(val)\r\n if (isNaN(date.getTime())) return ''\r\n\r\n // Format to YYYY-MM-DDThh:mm\r\n const year = date.getFullYear()\r\n const month = String(date.getMonth() + 1).padStart(2, '0')\r\n const day = String(date.getDate()).padStart(2, '0')\r\n const hours = String(date.getHours()).padStart(2, '0')\r\n const minutes = String(date.getMinutes()).padStart(2, '0')\r\n\r\n return `${year}-${month}-${day}T${hours}:${minutes}`\r\n } catch {\r\n return ''\r\n }\r\n }\r\n\r\n const validateDateTime = (date: Date): string | null => {\r\n if (minDateTime && date < new Date(minDateTime)) {\r\n return `Date must be after ${new Date(minDateTime).toLocaleString()}`\r\n }\r\n if (maxDateTime && date > new Date(maxDateTime)) {\r\n return `Date must be before ${new Date(maxDateTime).toLocaleString()}`\r\n }\r\n return null\r\n }\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>): void => {\r\n const inputValue = e.target.value\r\n\r\n // If we have a partial datetime (e.g., just started typing), don't update\r\n if (inputValue && inputValue.length < 16) { // 16 is the length of a complete datetime-local value\r\n return\r\n }\r\n\r\n if (inputValue) {\r\n const date = new Date(inputValue)\r\n if (!isNaN(date.getTime())) {\r\n const validationError = validateDateTime(date)\r\n setError(validationError)\r\n if (!validationError) {\r\n onChange(date.toISOString())\r\n }\r\n }\r\n } else {\r\n setError(null)\r\n onChange(undefined)\r\n }\r\n }\r\n\r\n const getConstraintMessage = (): string | null => {\r\n if (!minDateTime && !maxDateTime) return null\r\n const parts = []\r\n if (minDateTime) parts.push(`after ${new Date(minDateTime).toLocaleString()}`)\r\n if (maxDateTime) parts.push(`before ${new Date(maxDateTime).toLocaleString()}`)\r\n return `Must be ${parts.join(' and ')}`\r\n }\r\n\r\n const constraintMessage = getConstraintMessage()\r\n\r\n return (\r\n <div>\r\n <div className=\"flex flex-wrap items-baseline gap-2\">\r\n <label htmlFor={field.id} className=\"flex-1 min-w-[200px]\">\r\n <FieldLabel {
|
1
|
+
{"version":3,"file":"DateTime.js","sources":["../../../../../../src/Form/Components/Inputs/DateTime.tsx"],"sourcesContent":["import FieldLabel from '@/Form/Components/FieldLabel'\r\nimport { type IFieldInputProps } from '@/Form/Creator/FormCreatorTypes'\r\nimport React, { type ReactElement, useState } from 'react'\r\n\r\nconst DateTimeInput = ({ field, onChange, value, disabled }: IFieldInputProps): ReactElement => {\r\n const [error, setError] = useState<string | null>(null)\r\n\r\n if (field.type !== 'datetime') {\r\n return <p>Field config for {field.id} is missing 'options'</p>\r\n }\r\n const { minDateTime, maxDateTime } = field.constraints ?? {}\r\n\r\n // Convert the value to the format expected by datetime-local input (YYYY-MM-DDThh:mm)\r\n const formatValue = (val: string | undefined | null): string => {\r\n if (!val) return ''\r\n try {\r\n // Ensure the value is in the correct format\r\n const date = new Date(val)\r\n if (isNaN(date.getTime())) return ''\r\n\r\n // Format to YYYY-MM-DDThh:mm\r\n const year = date.getFullYear()\r\n const month = String(date.getMonth() + 1).padStart(2, '0')\r\n const day = String(date.getDate()).padStart(2, '0')\r\n const hours = String(date.getHours()).padStart(2, '0')\r\n const minutes = String(date.getMinutes()).padStart(2, '0')\r\n\r\n return `${year}-${month}-${day}T${hours}:${minutes}`\r\n } catch {\r\n return ''\r\n }\r\n }\r\n\r\n const validateDateTime = (date: Date): string | null => {\r\n if (minDateTime && date < new Date(minDateTime)) {\r\n return `Date must be after ${new Date(minDateTime).toLocaleString()}`\r\n }\r\n if (maxDateTime && date > new Date(maxDateTime)) {\r\n return `Date must be before ${new Date(maxDateTime).toLocaleString()}`\r\n }\r\n return null\r\n }\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>): void => {\r\n const inputValue = e.target.value\r\n\r\n // If we have a partial datetime (e.g., just started typing), don't update\r\n if (inputValue && inputValue.length < 16) { // 16 is the length of a complete datetime-local value\r\n return\r\n }\r\n\r\n if (inputValue) {\r\n const date = new Date(inputValue)\r\n if (!isNaN(date.getTime())) {\r\n const validationError = validateDateTime(date)\r\n setError(validationError)\r\n if (!validationError) {\r\n onChange(date.toISOString())\r\n }\r\n }\r\n } else {\r\n setError(null)\r\n onChange(undefined)\r\n }\r\n }\r\n\r\n const getConstraintMessage = (): string | null => {\r\n if (!minDateTime && !maxDateTime) return null\r\n const parts = []\r\n if (minDateTime) parts.push(`after ${new Date(minDateTime).toLocaleString()}`)\r\n if (maxDateTime) parts.push(`before ${new Date(maxDateTime).toLocaleString()}`)\r\n return `Must be ${parts.join(' and ')}`\r\n }\r\n\r\n const constraintMessage = getConstraintMessage()\r\n\r\n return (\r\n <div>\r\n <div className=\"flex flex-wrap items-baseline gap-2\">\r\n <label htmlFor={field.id} className=\"flex-1 min-w-[200px]\">\r\n <FieldLabel field={field} disabled={disabled} value={value} onChange={onChange} />\r\n </label>\r\n {constraintMessage && (\r\n <span className=\"text-sm text-slate-500 italic\">\r\n {constraintMessage}\r\n </span>\r\n )}\r\n </div>\r\n <input\r\n id={field.id}\r\n disabled={disabled}\r\n className={`border ${error ? 'border-red-500' : 'border-slate-300'} p-2 w-full${disabled ? ' opacity-50 cursor-not-allowed' : ''}`}\r\n data-testid={field.id}\r\n type=\"datetime-local\"\r\n value={formatValue(value as string)}\r\n onChange={handleChange}\r\n min={minDateTime ? formatValue(minDateTime) : undefined}\r\n max={maxDateTime ? formatValue(maxDateTime) : undefined}\r\n />\r\n {error && <p className=\"text-red-500 text-sm mt-1\">{error}</p>}\r\n </div>\r\n )\r\n}\r\n\r\nexport default DateTimeInput\r\n"],"names":["React"],"mappings":"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"}
|
@@ -87,7 +87,7 @@ var calculateCenterFromGeoJSON = function (geo) {
|
|
87
87
|
};
|
88
88
|
};
|
89
89
|
var GeoJSONInput = function (_a) {
|
90
|
-
var field = _a.field, onChange = _a.onChange, value = _a.value;
|
90
|
+
var field = _a.field, onChange = _a.onChange, value = _a.value, disabled = _a.disabled;
|
91
91
|
console.log('INITIAL VALUE', value);
|
92
92
|
var initialGeoJSON = value;
|
93
93
|
var initialMapConfig = calculateCenterFromGeoJSON(initialGeoJSON);
|
@@ -402,7 +402,7 @@ var GeoJSONInput = function (_a) {
|
|
402
402
|
// setShowShapeTypeButtons(false)
|
403
403
|
};
|
404
404
|
return React__default.createElement("div", null,
|
405
|
-
React__default.createElement(FieldLabel,
|
405
|
+
React__default.createElement(FieldLabel, { field: field, disabled: disabled }),
|
406
406
|
React__default.createElement("div", { className: "relative" },
|
407
407
|
React__default.createElement("div", { className: "absolute z-20 top-12 right-4 flex flex-col gap-2" },
|
408
408
|
React__default.createElement("div", { className: "tooltip-container relative group" },
|
@@ -427,6 +427,7 @@ var GeoJSONInput = function (_a) {
|
|
427
427
|
React__default.createElement(Button, { onClick: clearShape, className: "p-2 rounded-lg shadow-lg bg-red-500 hover:bg-red-600 text-white w-10 h-10 flex items-center justify-center" },
|
428
428
|
React__default.createElement(TrashIcon, { className: "w-5 h-5" }),
|
429
429
|
React__default.createElement("span", { className: "tooltip absolute right-full mr-2 px-2 py-1 bg-gray-800 text-white text-sm rounded whitespace-nowrap opacity-0 group-hover:opacity-100 pointer-events-none" }, "Clear Shape"))))),
|
430
|
+
disabled && (React__default.createElement("div", { className: "absolute z-50 bg-white bg-opacity-20 cursor-not-allowed top-0 right-0 left-0 bottom-0" })),
|
430
431
|
React__default.createElement(OpenLayersMapComponent, __assign({}, MAP_CONFIG, { setState: setMapState })),
|
431
432
|
React__default.createElement("div", { className: "mt-4" },
|
432
433
|
React__default.createElement("div", { className: "flex justify-between items-center mb-2" },
|
@@ -440,8 +441,8 @@ var GeoJSONInput = function (_a) {
|
|
440
441
|
React__default.createElement(Button, { onClick: function () { applyShapeType(EMapShape.polygon); }, className: "px-4 py-1 bg-white hover:bg-gray-50 text-black rounded-lg shadow-sm border border-gray-200 text-sm flex items-center gap-2" },
|
441
442
|
React__default.createElement(SquareIcon, { className: "w-4 h-4 rotate-45" }),
|
442
443
|
"Create Polygon")))),
|
443
|
-
React__default.createElement(TextArea, { error: error, className: 'min-h-[100px] bg-slate-50 rounded-lg shadow-inner', id: "".concat(field.id, "-coordinates"), testId: "".concat(field.id, "-coordinates"), value: coordinates, onChange: handleCoordinatesChange, placeholder: "61.2181, -149.9003\n61.2182, -149.9004\n61.2183, -149.9005" })),
|
444
|
-
showGeoJSONInput && React__default.createElement(TextArea, { error: error, className: 'min-h-[500px] bg-slate-50 rounded-lg shadow-inner', id: field.id, testId: field.id, label: React__default.createElement(FieldLabel,
|
444
|
+
React__default.createElement(TextArea, { disabled: disabled, error: error, className: 'min-h-[100px] bg-slate-50 rounded-lg shadow-inner', id: "".concat(field.id, "-coordinates"), testId: "".concat(field.id, "-coordinates"), value: coordinates, onChange: handleCoordinatesChange, placeholder: "61.2181, -149.9003\n61.2182, -149.9004\n61.2183, -149.9005" })),
|
445
|
+
showGeoJSONInput && React__default.createElement(TextArea, { error: error, className: 'min-h-[500px] bg-slate-50 rounded-lg shadow-inner', id: field.id, testId: field.id, label: React__default.createElement(FieldLabel, { field: field, disabled: disabled }), value: getValue(), onChange: function (e) {
|
445
446
|
try {
|
446
447
|
JSON.parse(e !== null && e !== void 0 ? e : '');
|
447
448
|
onChange(JSON.parse(e !== null && e !== void 0 ? e : ''));
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"GeoJSON.js","sources":["../../../../../../src/Form/Components/Inputs/GeoJSON.tsx"],"sourcesContent":["import { Button, TextArea } from '@axdspub/axiom-ui-utilities'\r\nimport FieldLabel from '@/Form/Components/FieldLabel'\r\nimport { type IFieldInputProps } from '@/Form/Creator/FormCreatorTypes'\r\n\r\nimport { EMapShape, type IMap, type IMapDrawEvent, type IStyleableMapProps } from '@axdspub/axiom-maps'\r\nimport { OpenLayersMap as Map } from '@axdspub/axiom-maps/library/openlayers'\r\nimport { type GeoJSON } from 'geojson'\r\nimport React, { useEffect, useState, type ReactElement } from 'react'\r\nimport { TrashIcon, SquareIcon, BorderSolidIcon, DrawingPinFilledIcon } from '@radix-ui/react-icons'\r\n\r\n/*\r\nList of coordinates for testing. Around Anchorage.\r\n61.44480592425796, -150.3785489314675\r\n61.26059021199541, -150.7356022485971\r\n61.05235501381105, -150.61435734866856\r\n61.06014246374005, -149.9221328461051\r\n61.441517540302925, -149.16102284579276\r\n61.44480592425796, -150.3785489314675\r\n*/\r\n\r\nconst calculateCenterFromGeoJSON = (geo: GeoJSON | undefined): { lat: number, lon: number, zoom: number } => {\r\n if (!geo || !('features' in geo) || !Array.isArray(geo.features) || geo.features.length === 0) {\r\n return { lat: 61.2181, lon: -149.9003, zoom: 8 } // Default to Anchorage\r\n }\r\n\r\n const feature = geo.features[0]\r\n if (!feature?.geometry) {\r\n return { lat: 61.2181, lon: -149.9003, zoom: 8 }\r\n }\r\n\r\n const geometry = feature.geometry\r\n let coordinates: GeoJSON.Position[] = []\r\n\r\n switch (geometry.type) {\r\n case 'Polygon':\r\n coordinates = geometry.coordinates[0] // Get first ring (ignore holes)\r\n break\r\n case 'LineString':\r\n coordinates = geometry.coordinates\r\n break\r\n case 'Point':\r\n coordinates = [geometry.coordinates]\r\n break\r\n default:\r\n return { lat: 61.2181, lon: -149.9003, zoom: 8 }\r\n }\r\n\r\n if (!Array.isArray(coordinates) || coordinates.length === 0) {\r\n return { lat: 61.2181, lon: -149.9003, zoom: 8 }\r\n }\r\n\r\n // Calculate bounds\r\n let minLat = Infinity\r\n let maxLat = -Infinity\r\n let minLon = Infinity\r\n let maxLon = -Infinity\r\n let sumLat = 0\r\n let sumLon = 0\r\n let count = 0\r\n\r\n coordinates.forEach((coord: GeoJSON.Position) => {\r\n const [lon, lat] = coord\r\n minLat = Math.min(minLat, lat)\r\n maxLat = Math.max(maxLat, lat)\r\n minLon = Math.min(minLon, lon)\r\n maxLon = Math.max(maxLon, lon)\r\n sumLat += lat\r\n sumLon += lon\r\n count++\r\n })\r\n\r\n // Calculate center\r\n const centerLat = sumLat / count\r\n const centerLon = sumLon / count\r\n\r\n // Calculate zoom level based on bounds\r\n const latDiff = maxLat - minLat\r\n const lonDiff = maxLon - minLon\r\n const maxDiff = Math.max(latDiff, lonDiff)\r\n\r\n // Adjust zoom based on the size of the shape\r\n let zoom = 8 // default zoom\r\n if (maxDiff < 0.1) zoom = 12 // very small shape\r\n else if (maxDiff < 0.5) zoom = 10 // small shape\r\n else if (maxDiff < 1) zoom = 9 // medium shape\r\n else if (maxDiff < 2) zoom = 8 // large shape\r\n else if (maxDiff < 5) zoom = 7 // very large shape\r\n else zoom = 6 // huge shape\r\n\r\n return {\r\n lat: centerLat,\r\n lon: centerLon,\r\n zoom\r\n }\r\n}\r\n\r\nexport const GeoJSONInput = ({ field, onChange, value }: IFieldInputProps): ReactElement => {\r\n console.log('INITIAL VALUE', value)\r\n const initialGeoJSON = value as unknown as GeoJSON\r\n const initialMapConfig = calculateCenterFromGeoJSON(initialGeoJSON)\r\n const [currentDrawType, setCurrentDrawType] = useState<EMapShape>(EMapShape.polygon)\r\n const [isDrawing, setIsDrawing] = useState<boolean>(false)\r\n\r\n const MAP_CONFIG: IStyleableMapProps = {\r\n baseLayerKey: 'hybrid',\r\n height: '500px',\r\n width: '100%',\r\n style: {\r\n left: '0px',\r\n top: '0px',\r\n right: '0px',\r\n bottom: '0px',\r\n padding: '0'\r\n },\r\n center: { lat: initialMapConfig.lat, lon: initialMapConfig.lon },\r\n zoom: initialMapConfig.zoom,\r\n tools: {\r\n draw: {\r\n shape: currentDrawType,\r\n enabled: true\r\n }\r\n }\r\n }\r\n\r\n const [map, setMapState] = useState<IMap | undefined>(undefined)\r\n const [error, setError] = useState<string | undefined>(undefined)\r\n const [geojson, setGeojson] = useState<GeoJSON | undefined>(() => {\r\n if (!value) return undefined\r\n return value as unknown as GeoJSON\r\n })\r\n const [showGeoJSONInput] = useState<boolean>(false) // For debugging purposes\r\n const [coordinates, setCoordinates] = useState<string>(() => {\r\n if (!value) return ''\r\n const geoValue = value as unknown as GeoJSON.FeatureCollection\r\n if (geoValue?.type === 'FeatureCollection' && Array.isArray(geoValue.features) && geoValue.features.length > 0) {\r\n const feature = geoValue.features[0]\r\n const geometry = feature?.geometry\r\n if (!geometry) return ''\r\n\r\n if (geometry.type === 'Polygon') {\r\n const coords = geometry.coordinates[0]\r\n return coords.map((pos: GeoJSON.Position) => `${pos[1]}, ${pos[0]}`).join('\\n')\r\n } else if (geometry.type === 'LineString') {\r\n const coords = geometry.coordinates\r\n return coords.map((pos: GeoJSON.Position) => `${pos[1]}, ${pos[0]}`).join('\\n')\r\n } else if (geometry.type === 'Point') {\r\n const coords = geometry.coordinates\r\n return `${coords[1]}, ${coords[0]}`\r\n }\r\n }\r\n return ''\r\n })\r\n\r\n const getValue = (): string => {\r\n return geojson !== undefined && geojson !== null\r\n ? typeof geojson === 'object'\r\n ? JSON.stringify(geojson, null, 2)\r\n : String(geojson)\r\n : ''\r\n }\r\n\r\n const createGeoJSONFromCoordinates = (coordString: string, forceType?: EMapShape): GeoJSON | undefined => {\r\n if (!coordString.trim()) {\r\n setError(undefined)\r\n return undefined\r\n }\r\n\r\n try {\r\n const points = coordString\r\n .split('\\n')\r\n .map(line => line.trim())\r\n .filter(line => line.length > 0)\r\n .map(line => {\r\n const [lat, lon] = line.split(',').map(coord => parseFloat(coord.trim()))\r\n if (isNaN(lat) || isNaN(lon)) {\r\n throw new Error('Invalid coordinate format')\r\n }\r\n return [lon, lat]\r\n })\r\n\r\n if (points.length === 0) {\r\n throw new Error('No valid coordinates found')\r\n }\r\n\r\n // Single point\r\n if (points.length === 1) {\r\n return {\r\n type: 'FeatureCollection',\r\n features: [{\r\n type: 'Feature',\r\n properties: {},\r\n geometry: {\r\n type: 'Point',\r\n coordinates: points[0]\r\n }\r\n }]\r\n }\r\n }\r\n\r\n // For polygon or line, based on forceType or number of points\r\n if (forceType === EMapShape.polygon || (!forceType && points.length >= 3)) {\r\n // Close the polygon by adding the first point at the end if not already closed\r\n if (JSON.stringify(points[0]) !== JSON.stringify(points[points.length - 1])) {\r\n points.push(points[0])\r\n }\r\n return {\r\n type: 'FeatureCollection',\r\n features: [{\r\n type: 'Feature',\r\n properties: {},\r\n geometry: {\r\n type: 'Polygon',\r\n coordinates: [points]\r\n }\r\n }]\r\n }\r\n }\r\n\r\n // LineString\r\n return {\r\n type: 'FeatureCollection',\r\n features: [{\r\n type: 'Feature',\r\n properties: {},\r\n geometry: {\r\n type: 'LineString',\r\n coordinates: points\r\n }\r\n }]\r\n }\r\n } catch (e) {\r\n setError('Invalid coordinate format. Use \"lat, lon\" format, one per line')\r\n return undefined\r\n }\r\n }\r\n\r\n const [showShapeTypeButtons, setShowShapeTypeButtons] = useState<boolean>(() => {\r\n // Show buttons if initial value has 2+ coordinates\r\n if (!value) return false\r\n const geoValue = value as unknown as GeoJSON.FeatureCollection\r\n if (geoValue?.type === 'FeatureCollection' && Array.isArray(geoValue.features) && geoValue.features.length > 0) {\r\n const feature = geoValue.features[0]\r\n const geometry = feature?.geometry\r\n if (!geometry) return false\r\n\r\n if (geometry.type === 'Polygon' || geometry.type === 'LineString') {\r\n return geometry.coordinates.length >= 2\r\n }\r\n }\r\n return false\r\n })\r\n\r\n const updateCoordinatesFromGeoJSON = (geo: GeoJSON | undefined): void => {\r\n if (!geo || geo.type !== 'FeatureCollection' || !geo.features?.[0]?.geometry) return\r\n\r\n const feature = geo.features[0]\r\n const geometry = feature.geometry\r\n let newCoords = ''\r\n\r\n if (geometry.type === 'Polygon') {\r\n const coords = geometry.coordinates[0]\r\n newCoords = coords.map((pos: GeoJSON.Position) => `${pos[1]}, ${pos[0]}`).join('\\n')\r\n } else if (geometry.type === 'LineString') {\r\n const coords = geometry.coordinates\r\n newCoords = coords.map((pos: GeoJSON.Position) => `${pos[1]}, ${pos[0]}`).join('\\n')\r\n } else if (geometry.type === 'Point') {\r\n const coords = geometry.coordinates\r\n newCoords = `${coords[1]}, ${coords[0]}`\r\n }\r\n\r\n setCoordinates(newCoords)\r\n setShowShapeTypeButtons(shouldShowShapeButtons(newCoords))\r\n }\r\n\r\n useEffect(() => {\r\n if (map === undefined) return\r\n\r\n map.onDrawComplete((e: IMapDrawEvent) => {\r\n console.log('draw complete', e)\r\n setGeojson(e.data?.geojson)\r\n updateCoordinatesFromGeoJSON(e.data?.geojson)\r\n setIsDrawing(false)\r\n // Disable drawing after shape is completed\r\n map.disableDraw(currentDrawType)\r\n })\r\n\r\n // On modify drawing\r\n map.onDrawUpdate((e: IMapDrawEvent) => {\r\n console.log('draw update', e)\r\n setGeojson(e.data?.geojson)\r\n updateCoordinatesFromGeoJSON(e.data?.geojson)\r\n })\r\n }, [map])\r\n\r\n useEffect(() => {\r\n if (geojson !== undefined) {\r\n onChange(geojson)\r\n }\r\n }, [geojson])\r\n\r\n const hasValidShape = (geo: GeoJSON | undefined): boolean => {\r\n return geo !== undefined &&\r\n 'features' in geo &&\r\n Array.isArray(geo.features) &&\r\n geo.features.length > 0\r\n }\r\n\r\n const clearShape = (): void => {\r\n setGeojson(undefined)\r\n onChange(undefined)\r\n setCoordinates('')\r\n if (map) {\r\n map.setDrawGeojson({\r\n type: 'FeatureCollection',\r\n features: []\r\n })\r\n map.enableDraw(currentDrawType) // Re-enable drawing when shape is cleared\r\n setIsDrawing(true)\r\n }\r\n }\r\n\r\n const handleDrawTypeChange = (shapeType: EMapShape): void => {\r\n if (map) {\r\n // Clear existing shape if any\r\n map.setDrawGeojson({\r\n type: 'FeatureCollection',\r\n features: []\r\n })\r\n setGeojson(undefined)\r\n onChange(undefined)\r\n setCoordinates('')\r\n setShowShapeTypeButtons(false)\r\n setCurrentDrawType(shapeType)\r\n map.enableDraw(shapeType)\r\n setIsDrawing(true)\r\n }\r\n }\r\n\r\n const shouldShowShapeButtons = (coords: string): boolean => {\r\n const validLines = coords.trim().split('\\n')\r\n .map(line => line.trim())\r\n .filter(line => line.length > 0)\r\n .filter(line => {\r\n try {\r\n const [lat, lon] = line.split(',').map(coord => parseFloat(coord.trim()))\r\n return !isNaN(lat) && !isNaN(lon)\r\n } catch {\r\n return false\r\n }\r\n })\r\n return validLines.length >= 3\r\n }\r\n\r\n const handleCoordinatesChange = (e: string | undefined): void => {\r\n const newCoords = e ?? ''\r\n setCoordinates(newCoords)\r\n setShowShapeTypeButtons(shouldShowShapeButtons(newCoords))\r\n\r\n try {\r\n const newGeoJSON = createGeoJSONFromCoordinates(newCoords)\r\n if (newGeoJSON) {\r\n setGeojson(newGeoJSON)\r\n setError(undefined)\r\n if (map) {\r\n map.setDrawGeojson({\r\n type: 'FeatureCollection',\r\n features: []\r\n })\r\n map.setDrawGeojson(newGeoJSON as GeoJSON.FeatureCollection)\r\n map.disableDraw(currentDrawType) // Disable drawing when coordinates are entered\r\n }\r\n } else {\r\n setGeojson(undefined)\r\n onChange(undefined)\r\n if (map) {\r\n map.setDrawGeojson({\r\n type: 'FeatureCollection',\r\n features: []\r\n })\r\n }\r\n }\r\n } catch (e) {\r\n setError('Invalid coordinate format')\r\n }\r\n }\r\n\r\n // Reload shape on the map\r\n useEffect(() => {\r\n if (map === undefined) return\r\n\r\n if (geojson !== undefined && 'features' in geojson) {\r\n map.setDrawGeojson(geojson)\r\n map.disableDraw(currentDrawType) // Disable drawing when there's a shape\r\n setIsDrawing(false)\r\n // Update coordinates display and shape type buttons\r\n updateCoordinatesFromGeoJSON(geojson)\r\n setShowShapeTypeButtons(shouldShowShapeButtons(coordinates))\r\n } else {\r\n map.enableDraw(currentDrawType)\r\n setIsDrawing(true)\r\n }\r\n }, [map, currentDrawType])\r\n\r\n const applyShapeType = (shapeType: EMapShape): void => {\r\n const newGeoJSON = createGeoJSONFromCoordinates(coordinates, shapeType)\r\n if (newGeoJSON) {\r\n setGeojson(newGeoJSON)\r\n setError(undefined)\r\n if (map) {\r\n map.setDrawGeojson({\r\n type: 'FeatureCollection',\r\n features: []\r\n })\r\n map.setDrawGeojson(newGeoJSON as GeoJSON.FeatureCollection)\r\n }\r\n }\r\n // Don't hide the buttons anymore\r\n // setShowShapeTypeButtons(false)\r\n }\r\n\r\n return <div>\r\n <FieldLabel {...field} />\r\n <div className=\"relative\">\r\n <div className=\"absolute z-20 top-12 right-4 flex flex-col gap-2\">\r\n <div className=\"tooltip-container relative group\">\r\n <Button\r\n onClick={() => { handleDrawTypeChange(EMapShape.polygon) }}\r\n className={`p-2 rounded-lg shadow-lg ${\r\n currentDrawType === EMapShape.polygon && isDrawing\r\n ? 'bg-white hover:bg-gray-50 ring-2 ring-yellow-200 shadow-[0_0_10px_rgba(253,224,71,0.5)]'\r\n : 'bg-gray-100 hover:bg-gray-50'\r\n } text-black w-10 h-10 flex items-center justify-center`}\r\n >\r\n <SquareIcon className=\"w-5 h-5 rotate-45\" />\r\n <span className=\"tooltip absolute right-full mr-2 px-2 py-1 bg-gray-800 text-white text-sm rounded whitespace-nowrap opacity-0 group-hover:opacity-100 pointer-events-none\">\r\n Draw Polygon\r\n </span>\r\n </Button>\r\n </div>\r\n <div className=\"tooltip-container relative group\">\r\n <Button\r\n onClick={() => { handleDrawTypeChange(EMapShape.linestring) }}\r\n className={`p-2 rounded-lg shadow-lg ${\r\n currentDrawType === EMapShape.linestring && isDrawing\r\n ? 'bg-white hover:bg-gray-50 ring-2 ring-yellow-200 shadow-[0_0_10px_rgba(253,224,71,0.5)]'\r\n : 'bg-gray-100 hover:bg-gray-50'\r\n } text-black w-10 h-10 flex items-center justify-center`}\r\n >\r\n <BorderSolidIcon className=\"w-5 h-5\" />\r\n <span className=\"tooltip absolute right-full mr-2 px-2 py-1 bg-gray-800 text-white text-sm rounded whitespace-nowrap opacity-0 group-hover:opacity-100 pointer-events-none\">\r\n Draw Path\r\n </span>\r\n </Button>\r\n </div>\r\n <div className=\"tooltip-container relative group\">\r\n <Button\r\n onClick={() => { handleDrawTypeChange(EMapShape.point) }}\r\n className={`p-2 rounded-lg shadow-lg ${\r\n currentDrawType === EMapShape.point && isDrawing\r\n ? 'bg-white hover:bg-gray-50 ring-2 ring-yellow-200 shadow-[0_0_10px_rgba(253,224,71,0.5)]'\r\n : 'bg-gray-100 hover:bg-gray-50'\r\n } text-black w-10 h-10 flex items-center justify-center`}\r\n >\r\n <DrawingPinFilledIcon className=\"w-5 h-5\" />\r\n <span className=\"tooltip absolute right-full mr-2 px-2 py-1 bg-gray-800 text-white text-sm rounded whitespace-nowrap opacity-0 group-hover:opacity-100 pointer-events-none\">\r\n Draw Point\r\n </span>\r\n </Button>\r\n </div>\r\n {hasValidShape(geojson) && (\r\n <div className=\"tooltip-container relative group\">\r\n <Button\r\n onClick={clearShape}\r\n className=\"p-2 rounded-lg shadow-lg bg-red-500 hover:bg-red-600 text-white w-10 h-10 flex items-center justify-center\"\r\n >\r\n <TrashIcon className=\"w-5 h-5\" />\r\n <span className=\"tooltip absolute right-full mr-2 px-2 py-1 bg-gray-800 text-white text-sm rounded whitespace-nowrap opacity-0 group-hover:opacity-100 pointer-events-none\">\r\n Clear Shape\r\n </span>\r\n </Button>\r\n </div>\r\n )}\r\n </div>\r\n <Map {...MAP_CONFIG} setState={setMapState} />\r\n <div className=\"mt-4\">\r\n <div className=\"flex justify-between items-center mb-2\">\r\n <span>Draw on map or enter coordinates <pre className=\"inline-block text-sm\">(latitude, longitude)</pre></span>\r\n {showShapeTypeButtons && (\r\n <div className=\"flex gap-2\">\r\n <Button\r\n onClick={() => { applyShapeType(EMapShape.linestring) }}\r\n className=\"px-4 py-1 bg-white hover:bg-gray-50 text-black rounded-lg shadow-sm border border-gray-200 text-sm flex items-center gap-2\"\r\n >\r\n <BorderSolidIcon className=\"w-4 h-4\" />\r\n Create Path\r\n </Button>\r\n <Button\r\n onClick={() => { applyShapeType(EMapShape.polygon) }}\r\n className=\"px-4 py-1 bg-white hover:bg-gray-50 text-black rounded-lg shadow-sm border border-gray-200 text-sm flex items-center gap-2\"\r\n >\r\n <SquareIcon className=\"w-4 h-4 rotate-45\" />\r\n Create Polygon\r\n </Button>\r\n </div>\r\n )}\r\n </div>\r\n <TextArea\r\n error={error}\r\n className='min-h-[100px] bg-slate-50 rounded-lg shadow-inner'\r\n id={`${field.id}-coordinates`}\r\n testId={`${field.id}-coordinates`}\r\n value={coordinates}\r\n onChange={handleCoordinatesChange}\r\n placeholder=\"61.2181, -149.9003 61.2182, -149.9004 61.2183, -149.9005\"\r\n />\r\n </div>\r\n {showGeoJSONInput && <TextArea\r\n error={error}\r\n className='min-h-[500px] bg-slate-50 rounded-lg shadow-inner'\r\n id={field.id}\r\n testId={field.id}\r\n label={<FieldLabel {...field} />}\r\n value={getValue()}\r\n onChange={(e) => {\r\n try {\r\n JSON.parse(e ?? '')\r\n onChange(JSON.parse(e ?? ''))\r\n setError(undefined)\r\n } catch (e) {\r\n setError('Invalid JSON')\r\n }\r\n }} />}\r\n </div>\r\n </div>\r\n}\r\n\r\nexport default GeoJSONInput\r\n"],"names":["React","Map"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"GeoJSON.js","sources":["../../../../../../src/Form/Components/Inputs/GeoJSON.tsx"],"sourcesContent":["import { Button, TextArea } from '@axdspub/axiom-ui-utilities'\r\nimport FieldLabel from '@/Form/Components/FieldLabel'\r\nimport { type IFieldInputProps } from '@/Form/Creator/FormCreatorTypes'\r\n\r\nimport { EMapShape, type IMap, type IMapDrawEvent, type IStyleableMapProps } from '@axdspub/axiom-maps'\r\nimport { OpenLayersMap as Map } from '@axdspub/axiom-maps/library/openlayers'\r\nimport { type GeoJSON } from 'geojson'\r\nimport React, { useEffect, useState, type ReactElement } from 'react'\r\nimport { TrashIcon, SquareIcon, BorderSolidIcon, DrawingPinFilledIcon } from '@radix-ui/react-icons'\r\n\r\n/*\r\nList of coordinates for testing. Around Anchorage.\r\n61.44480592425796, -150.3785489314675\r\n61.26059021199541, -150.7356022485971\r\n61.05235501381105, -150.61435734866856\r\n61.06014246374005, -149.9221328461051\r\n61.441517540302925, -149.16102284579276\r\n61.44480592425796, -150.3785489314675\r\n*/\r\n\r\nconst calculateCenterFromGeoJSON = (geo: GeoJSON | undefined): { lat: number, lon: number, zoom: number } => {\r\n if (!geo || !('features' in geo) || !Array.isArray(geo.features) || geo.features.length === 0) {\r\n return { lat: 61.2181, lon: -149.9003, zoom: 8 } // Default to Anchorage\r\n }\r\n\r\n const feature = geo.features[0]\r\n if (!feature?.geometry) {\r\n return { lat: 61.2181, lon: -149.9003, zoom: 8 }\r\n }\r\n\r\n const geometry = feature.geometry\r\n let coordinates: GeoJSON.Position[] = []\r\n\r\n switch (geometry.type) {\r\n case 'Polygon':\r\n coordinates = geometry.coordinates[0] // Get first ring (ignore holes)\r\n break\r\n case 'LineString':\r\n coordinates = geometry.coordinates\r\n break\r\n case 'Point':\r\n coordinates = [geometry.coordinates]\r\n break\r\n default:\r\n return { lat: 61.2181, lon: -149.9003, zoom: 8 }\r\n }\r\n\r\n if (!Array.isArray(coordinates) || coordinates.length === 0) {\r\n return { lat: 61.2181, lon: -149.9003, zoom: 8 }\r\n }\r\n\r\n // Calculate bounds\r\n let minLat = Infinity\r\n let maxLat = -Infinity\r\n let minLon = Infinity\r\n let maxLon = -Infinity\r\n let sumLat = 0\r\n let sumLon = 0\r\n let count = 0\r\n\r\n coordinates.forEach((coord: GeoJSON.Position) => {\r\n const [lon, lat] = coord\r\n minLat = Math.min(minLat, lat)\r\n maxLat = Math.max(maxLat, lat)\r\n minLon = Math.min(minLon, lon)\r\n maxLon = Math.max(maxLon, lon)\r\n sumLat += lat\r\n sumLon += lon\r\n count++\r\n })\r\n\r\n // Calculate center\r\n const centerLat = sumLat / count\r\n const centerLon = sumLon / count\r\n\r\n // Calculate zoom level based on bounds\r\n const latDiff = maxLat - minLat\r\n const lonDiff = maxLon - minLon\r\n const maxDiff = Math.max(latDiff, lonDiff)\r\n\r\n // Adjust zoom based on the size of the shape\r\n let zoom = 8 // default zoom\r\n if (maxDiff < 0.1) zoom = 12 // very small shape\r\n else if (maxDiff < 0.5) zoom = 10 // small shape\r\n else if (maxDiff < 1) zoom = 9 // medium shape\r\n else if (maxDiff < 2) zoom = 8 // large shape\r\n else if (maxDiff < 5) zoom = 7 // very large shape\r\n else zoom = 6 // huge shape\r\n\r\n return {\r\n lat: centerLat,\r\n lon: centerLon,\r\n zoom\r\n }\r\n}\r\n\r\nexport const GeoJSONInput = ({ field, onChange, value, disabled }: IFieldInputProps): ReactElement => {\r\n console.log('INITIAL VALUE', value)\r\n const initialGeoJSON = value as unknown as GeoJSON\r\n const initialMapConfig = calculateCenterFromGeoJSON(initialGeoJSON)\r\n const [currentDrawType, setCurrentDrawType] = useState<EMapShape>(EMapShape.polygon)\r\n const [isDrawing, setIsDrawing] = useState<boolean>(false)\r\n\r\n const MAP_CONFIG: IStyleableMapProps = {\r\n baseLayerKey: 'hybrid',\r\n height: '500px',\r\n width: '100%',\r\n style: {\r\n left: '0px',\r\n top: '0px',\r\n right: '0px',\r\n bottom: '0px',\r\n padding: '0'\r\n },\r\n center: { lat: initialMapConfig.lat, lon: initialMapConfig.lon },\r\n zoom: initialMapConfig.zoom,\r\n tools: {\r\n draw: {\r\n shape: currentDrawType,\r\n enabled: true\r\n }\r\n }\r\n }\r\n\r\n const [map, setMapState] = useState<IMap | undefined>(undefined)\r\n const [error, setError] = useState<string | undefined>(undefined)\r\n const [geojson, setGeojson] = useState<GeoJSON | undefined>(() => {\r\n if (!value) return undefined\r\n return value as unknown as GeoJSON\r\n })\r\n const [showGeoJSONInput] = useState<boolean>(false) // For debugging purposes\r\n const [coordinates, setCoordinates] = useState<string>(() => {\r\n if (!value) return ''\r\n const geoValue = value as unknown as GeoJSON.FeatureCollection\r\n if (geoValue?.type === 'FeatureCollection' && Array.isArray(geoValue.features) && geoValue.features.length > 0) {\r\n const feature = geoValue.features[0]\r\n const geometry = feature?.geometry\r\n if (!geometry) return ''\r\n\r\n if (geometry.type === 'Polygon') {\r\n const coords = geometry.coordinates[0]\r\n return coords.map((pos: GeoJSON.Position) => `${pos[1]}, ${pos[0]}`).join('\\n')\r\n } else if (geometry.type === 'LineString') {\r\n const coords = geometry.coordinates\r\n return coords.map((pos: GeoJSON.Position) => `${pos[1]}, ${pos[0]}`).join('\\n')\r\n } else if (geometry.type === 'Point') {\r\n const coords = geometry.coordinates\r\n return `${coords[1]}, ${coords[0]}`\r\n }\r\n }\r\n return ''\r\n })\r\n\r\n const getValue = (): string => {\r\n return geojson !== undefined && geojson !== null\r\n ? typeof geojson === 'object'\r\n ? JSON.stringify(geojson, null, 2)\r\n : String(geojson)\r\n : ''\r\n }\r\n\r\n const createGeoJSONFromCoordinates = (coordString: string, forceType?: EMapShape): GeoJSON | undefined => {\r\n if (!coordString.trim()) {\r\n setError(undefined)\r\n return undefined\r\n }\r\n\r\n try {\r\n const points = coordString\r\n .split('\\n')\r\n .map(line => line.trim())\r\n .filter(line => line.length > 0)\r\n .map(line => {\r\n const [lat, lon] = line.split(',').map(coord => parseFloat(coord.trim()))\r\n if (isNaN(lat) || isNaN(lon)) {\r\n throw new Error('Invalid coordinate format')\r\n }\r\n return [lon, lat]\r\n })\r\n\r\n if (points.length === 0) {\r\n throw new Error('No valid coordinates found')\r\n }\r\n\r\n // Single point\r\n if (points.length === 1) {\r\n return {\r\n type: 'FeatureCollection',\r\n features: [{\r\n type: 'Feature',\r\n properties: {},\r\n geometry: {\r\n type: 'Point',\r\n coordinates: points[0]\r\n }\r\n }]\r\n }\r\n }\r\n\r\n // For polygon or line, based on forceType or number of points\r\n if (forceType === EMapShape.polygon || (!forceType && points.length >= 3)) {\r\n // Close the polygon by adding the first point at the end if not already closed\r\n if (JSON.stringify(points[0]) !== JSON.stringify(points[points.length - 1])) {\r\n points.push(points[0])\r\n }\r\n return {\r\n type: 'FeatureCollection',\r\n features: [{\r\n type: 'Feature',\r\n properties: {},\r\n geometry: {\r\n type: 'Polygon',\r\n coordinates: [points]\r\n }\r\n }]\r\n }\r\n }\r\n\r\n // LineString\r\n return {\r\n type: 'FeatureCollection',\r\n features: [{\r\n type: 'Feature',\r\n properties: {},\r\n geometry: {\r\n type: 'LineString',\r\n coordinates: points\r\n }\r\n }]\r\n }\r\n } catch (e) {\r\n setError('Invalid coordinate format. Use \"lat, lon\" format, one per line')\r\n return undefined\r\n }\r\n }\r\n\r\n const [showShapeTypeButtons, setShowShapeTypeButtons] = useState<boolean>(() => {\r\n // Show buttons if initial value has 2+ coordinates\r\n if (!value) return false\r\n const geoValue = value as unknown as GeoJSON.FeatureCollection\r\n if (geoValue?.type === 'FeatureCollection' && Array.isArray(geoValue.features) && geoValue.features.length > 0) {\r\n const feature = geoValue.features[0]\r\n const geometry = feature?.geometry\r\n if (!geometry) return false\r\n\r\n if (geometry.type === 'Polygon' || geometry.type === 'LineString') {\r\n return geometry.coordinates.length >= 2\r\n }\r\n }\r\n return false\r\n })\r\n\r\n const updateCoordinatesFromGeoJSON = (geo: GeoJSON | undefined): void => {\r\n if (!geo || geo.type !== 'FeatureCollection' || !geo.features?.[0]?.geometry) return\r\n\r\n const feature = geo.features[0]\r\n const geometry = feature.geometry\r\n let newCoords = ''\r\n\r\n if (geometry.type === 'Polygon') {\r\n const coords = geometry.coordinates[0]\r\n newCoords = coords.map((pos: GeoJSON.Position) => `${pos[1]}, ${pos[0]}`).join('\\n')\r\n } else if (geometry.type === 'LineString') {\r\n const coords = geometry.coordinates\r\n newCoords = coords.map((pos: GeoJSON.Position) => `${pos[1]}, ${pos[0]}`).join('\\n')\r\n } else if (geometry.type === 'Point') {\r\n const coords = geometry.coordinates\r\n newCoords = `${coords[1]}, ${coords[0]}`\r\n }\r\n\r\n setCoordinates(newCoords)\r\n setShowShapeTypeButtons(shouldShowShapeButtons(newCoords))\r\n }\r\n\r\n useEffect(() => {\r\n if (map === undefined) return\r\n\r\n map.onDrawComplete((e: IMapDrawEvent) => {\r\n console.log('draw complete', e)\r\n setGeojson(e.data?.geojson)\r\n updateCoordinatesFromGeoJSON(e.data?.geojson)\r\n setIsDrawing(false)\r\n // Disable drawing after shape is completed\r\n map.disableDraw(currentDrawType)\r\n })\r\n\r\n // On modify drawing\r\n map.onDrawUpdate((e: IMapDrawEvent) => {\r\n console.log('draw update', e)\r\n setGeojson(e.data?.geojson)\r\n updateCoordinatesFromGeoJSON(e.data?.geojson)\r\n })\r\n }, [map])\r\n\r\n useEffect(() => {\r\n if (geojson !== undefined) {\r\n onChange(geojson)\r\n }\r\n }, [geojson])\r\n\r\n const hasValidShape = (geo: GeoJSON | undefined): boolean => {\r\n return geo !== undefined &&\r\n 'features' in geo &&\r\n Array.isArray(geo.features) &&\r\n geo.features.length > 0\r\n }\r\n\r\n const clearShape = (): void => {\r\n setGeojson(undefined)\r\n onChange(undefined)\r\n setCoordinates('')\r\n if (map) {\r\n map.setDrawGeojson({\r\n type: 'FeatureCollection',\r\n features: []\r\n })\r\n map.enableDraw(currentDrawType) // Re-enable drawing when shape is cleared\r\n setIsDrawing(true)\r\n }\r\n }\r\n\r\n const handleDrawTypeChange = (shapeType: EMapShape): void => {\r\n if (map) {\r\n // Clear existing shape if any\r\n map.setDrawGeojson({\r\n type: 'FeatureCollection',\r\n features: []\r\n })\r\n setGeojson(undefined)\r\n onChange(undefined)\r\n setCoordinates('')\r\n setShowShapeTypeButtons(false)\r\n setCurrentDrawType(shapeType)\r\n map.enableDraw(shapeType)\r\n setIsDrawing(true)\r\n }\r\n }\r\n\r\n const shouldShowShapeButtons = (coords: string): boolean => {\r\n const validLines = coords.trim().split('\\n')\r\n .map(line => line.trim())\r\n .filter(line => line.length > 0)\r\n .filter(line => {\r\n try {\r\n const [lat, lon] = line.split(',').map(coord => parseFloat(coord.trim()))\r\n return !isNaN(lat) && !isNaN(lon)\r\n } catch {\r\n return false\r\n }\r\n })\r\n return validLines.length >= 3\r\n }\r\n\r\n const handleCoordinatesChange = (e: string | undefined): void => {\r\n const newCoords = e ?? ''\r\n setCoordinates(newCoords)\r\n setShowShapeTypeButtons(shouldShowShapeButtons(newCoords))\r\n\r\n try {\r\n const newGeoJSON = createGeoJSONFromCoordinates(newCoords)\r\n if (newGeoJSON) {\r\n setGeojson(newGeoJSON)\r\n setError(undefined)\r\n if (map) {\r\n map.setDrawGeojson({\r\n type: 'FeatureCollection',\r\n features: []\r\n })\r\n map.setDrawGeojson(newGeoJSON as GeoJSON.FeatureCollection)\r\n map.disableDraw(currentDrawType) // Disable drawing when coordinates are entered\r\n }\r\n } else {\r\n setGeojson(undefined)\r\n onChange(undefined)\r\n if (map) {\r\n map.setDrawGeojson({\r\n type: 'FeatureCollection',\r\n features: []\r\n })\r\n }\r\n }\r\n } catch (e) {\r\n setError('Invalid coordinate format')\r\n }\r\n }\r\n\r\n // Reload shape on the map\r\n useEffect(() => {\r\n if (map === undefined) return\r\n\r\n if (geojson !== undefined && 'features' in geojson) {\r\n map.setDrawGeojson(geojson)\r\n map.disableDraw(currentDrawType) // Disable drawing when there's a shape\r\n setIsDrawing(false)\r\n // Update coordinates display and shape type buttons\r\n updateCoordinatesFromGeoJSON(geojson)\r\n setShowShapeTypeButtons(shouldShowShapeButtons(coordinates))\r\n } else {\r\n map.enableDraw(currentDrawType)\r\n setIsDrawing(true)\r\n }\r\n }, [map, currentDrawType])\r\n\r\n const applyShapeType = (shapeType: EMapShape): void => {\r\n const newGeoJSON = createGeoJSONFromCoordinates(coordinates, shapeType)\r\n if (newGeoJSON) {\r\n setGeojson(newGeoJSON)\r\n setError(undefined)\r\n if (map) {\r\n map.setDrawGeojson({\r\n type: 'FeatureCollection',\r\n features: []\r\n })\r\n map.setDrawGeojson(newGeoJSON as GeoJSON.FeatureCollection)\r\n }\r\n }\r\n // Don't hide the buttons anymore\r\n // setShowShapeTypeButtons(false)\r\n }\r\n\r\n return <div>\r\n <FieldLabel field={field} disabled={disabled} />\r\n <div className=\"relative\">\r\n <div className=\"absolute z-20 top-12 right-4 flex flex-col gap-2\">\r\n <div className=\"tooltip-container relative group\">\r\n <Button\r\n onClick={() => { handleDrawTypeChange(EMapShape.polygon) }}\r\n className={`p-2 rounded-lg shadow-lg ${\r\n currentDrawType === EMapShape.polygon && isDrawing\r\n ? 'bg-white hover:bg-gray-50 ring-2 ring-yellow-200 shadow-[0_0_10px_rgba(253,224,71,0.5)]'\r\n : 'bg-gray-100 hover:bg-gray-50'\r\n } text-black w-10 h-10 flex items-center justify-center`}\r\n >\r\n <SquareIcon className=\"w-5 h-5 rotate-45\" />\r\n <span className=\"tooltip absolute right-full mr-2 px-2 py-1 bg-gray-800 text-white text-sm rounded whitespace-nowrap opacity-0 group-hover:opacity-100 pointer-events-none\">\r\n Draw Polygon\r\n </span>\r\n </Button>\r\n </div>\r\n <div className=\"tooltip-container relative group\">\r\n <Button\r\n onClick={() => { handleDrawTypeChange(EMapShape.linestring) }}\r\n className={`p-2 rounded-lg shadow-lg ${\r\n currentDrawType === EMapShape.linestring && isDrawing\r\n ? 'bg-white hover:bg-gray-50 ring-2 ring-yellow-200 shadow-[0_0_10px_rgba(253,224,71,0.5)]'\r\n : 'bg-gray-100 hover:bg-gray-50'\r\n } text-black w-10 h-10 flex items-center justify-center`}\r\n >\r\n <BorderSolidIcon className=\"w-5 h-5\" />\r\n <span className=\"tooltip absolute right-full mr-2 px-2 py-1 bg-gray-800 text-white text-sm rounded whitespace-nowrap opacity-0 group-hover:opacity-100 pointer-events-none\">\r\n Draw Path\r\n </span>\r\n </Button>\r\n </div>\r\n <div className=\"tooltip-container relative group\">\r\n <Button\r\n onClick={() => { handleDrawTypeChange(EMapShape.point) }}\r\n className={`p-2 rounded-lg shadow-lg ${\r\n currentDrawType === EMapShape.point && isDrawing\r\n ? 'bg-white hover:bg-gray-50 ring-2 ring-yellow-200 shadow-[0_0_10px_rgba(253,224,71,0.5)]'\r\n : 'bg-gray-100 hover:bg-gray-50'\r\n } text-black w-10 h-10 flex items-center justify-center`}\r\n >\r\n <DrawingPinFilledIcon className=\"w-5 h-5\" />\r\n <span className=\"tooltip absolute right-full mr-2 px-2 py-1 bg-gray-800 text-white text-sm rounded whitespace-nowrap opacity-0 group-hover:opacity-100 pointer-events-none\">\r\n Draw Point\r\n </span>\r\n </Button>\r\n </div>\r\n {hasValidShape(geojson) && (\r\n <div className=\"tooltip-container relative group\">\r\n <Button\r\n onClick={clearShape}\r\n className=\"p-2 rounded-lg shadow-lg bg-red-500 hover:bg-red-600 text-white w-10 h-10 flex items-center justify-center\"\r\n >\r\n <TrashIcon className=\"w-5 h-5\" />\r\n <span className=\"tooltip absolute right-full mr-2 px-2 py-1 bg-gray-800 text-white text-sm rounded whitespace-nowrap opacity-0 group-hover:opacity-100 pointer-events-none\">\r\n Clear Shape\r\n </span>\r\n </Button>\r\n </div>\r\n )}\r\n </div>\r\n {\r\n disabled && (\r\n <div className=\"absolute z-50 bg-white bg-opacity-20 cursor-not-allowed top-0 right-0 left-0 bottom-0\"></div>\r\n )\r\n }\r\n <Map {...MAP_CONFIG} setState={setMapState} />\r\n\r\n <div className=\"mt-4\">\r\n <div className=\"flex justify-between items-center mb-2\">\r\n <span>Draw on map or enter coordinates <pre className=\"inline-block text-sm\">(latitude, longitude)</pre></span>\r\n {showShapeTypeButtons && (\r\n <div className=\"flex gap-2\">\r\n <Button\r\n onClick={() => { applyShapeType(EMapShape.linestring) }}\r\n className=\"px-4 py-1 bg-white hover:bg-gray-50 text-black rounded-lg shadow-sm border border-gray-200 text-sm flex items-center gap-2\"\r\n >\r\n <BorderSolidIcon className=\"w-4 h-4\" />\r\n Create Path\r\n </Button>\r\n <Button\r\n onClick={() => { applyShapeType(EMapShape.polygon) }}\r\n className=\"px-4 py-1 bg-white hover:bg-gray-50 text-black rounded-lg shadow-sm border border-gray-200 text-sm flex items-center gap-2\"\r\n >\r\n <SquareIcon className=\"w-4 h-4 rotate-45\" />\r\n Create Polygon\r\n </Button>\r\n </div>\r\n )}\r\n </div>\r\n <TextArea\r\n disabled={disabled}\r\n error={error}\r\n className='min-h-[100px] bg-slate-50 rounded-lg shadow-inner'\r\n id={`${field.id}-coordinates`}\r\n testId={`${field.id}-coordinates`}\r\n value={coordinates}\r\n onChange={handleCoordinatesChange}\r\n placeholder=\"61.2181, -149.9003 61.2182, -149.9004 61.2183, -149.9005\"\r\n />\r\n </div>\r\n {showGeoJSONInput && <TextArea\r\n error={error}\r\n className='min-h-[500px] bg-slate-50 rounded-lg shadow-inner'\r\n id={field.id}\r\n testId={field.id}\r\n label={<FieldLabel field={field} disabled={disabled} />}\r\n value={getValue()}\r\n onChange={(e) => {\r\n try {\r\n JSON.parse(e ?? '')\r\n onChange(JSON.parse(e ?? ''))\r\n setError(undefined)\r\n } catch (e) {\r\n setError('Invalid JSON')\r\n }\r\n }} />}\r\n </div>\r\n </div>\r\n}\r\n\r\nexport default GeoJSONInput\r\n"],"names":["React","Map"],"mappings":"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"}
|
@@ -3,8 +3,9 @@ import { Button, TextArea } from '../../../../node_modules/@axdspub/axiom-ui-uti
|
|
3
3
|
import FieldLabel from '../FieldLabel.js';
|
4
4
|
import { EMapShape } from '../../../../node_modules/@axdspub/axiom-maps/library/index.js';
|
5
5
|
import { OpenLayersMap as OpenLayersMapComponent } from '../../../../node_modules/@axdspub/axiom-maps/library/openlayers/index.esm.js';
|
6
|
-
import React__default, { useState,
|
6
|
+
import React__default, { useState, useEffect, useCallback } from 'react';
|
7
7
|
import { DrawingPinFilledIcon, BorderSolidIcon, SquareIcon, TrashIcon } from '../../../../node_modules/@radix-ui/react-icons/dist/react-icons.esm.js';
|
8
|
+
import isEqual from '../../../../node_modules/lodash-es/isEqual.js';
|
8
9
|
|
9
10
|
/*
|
10
11
|
List of coordinates for testing. Around Anchorage.
|
@@ -130,19 +131,26 @@ var getInitialDrawType = function (field) {
|
|
130
131
|
};
|
131
132
|
var GeometryInput = function (_a) {
|
132
133
|
var _b, _c, _d, _e, _f, _g, _h, _j;
|
133
|
-
var field = _a.field, onChange = _a.onChange, value = _a.value;
|
134
|
+
var field = _a.field, onChange = _a.onChange, value = _a.value, disabled = _a.disabled;
|
134
135
|
var _k = useState(undefined), map = _k[0], setMapState = _k[1];
|
135
136
|
var _l = useState(undefined), error = _l[0], setError = _l[1];
|
136
137
|
var showGeoJSONInput = useState(false)[0];
|
137
|
-
var
|
138
|
-
if (
|
139
|
-
return { type: 'Feature', properties: {}, geometry:
|
138
|
+
var convertToGeoJSON = function (geo) {
|
139
|
+
if (geo && typeof geo === 'object' && 'type' in geo && geo.type !== 'FeatureCollection' && geo.type !== 'Feature') {
|
140
|
+
return { type: 'Feature', properties: {}, geometry: geo };
|
140
141
|
}
|
141
|
-
if (
|
142
|
-
return
|
142
|
+
if (geo && typeof geo === 'object' && 'type' in geo && geo.type === 'Feature') {
|
143
|
+
return geo;
|
143
144
|
}
|
144
145
|
return undefined;
|
145
|
-
}
|
146
|
+
};
|
147
|
+
var _m = useState(convertToGeoJSON(value)), geojson = _m[0], setGeojson = _m[1];
|
148
|
+
useEffect(function () {
|
149
|
+
if (!isEqual(geojson, convertToGeoJSON(value))) {
|
150
|
+
console.log('SETTING GEOJSON');
|
151
|
+
setGeojson(convertToGeoJSON(value));
|
152
|
+
}
|
153
|
+
}, [value]);
|
146
154
|
var geomField = field;
|
147
155
|
var drawEnabled = ((_b = geomField.settings) === null || _b === void 0 ? void 0 : _b.drawEnabled) !== false;
|
148
156
|
var drawPointEnabled = ((_c = geomField.settings) === null || _c === void 0 ? void 0 : _c.drawPointEnabled) === true && drawEnabled;
|
@@ -385,7 +393,7 @@ var GeometryInput = function (_a) {
|
|
385
393
|
};
|
386
394
|
// ---- JSX Return (Reverting Button ClassNames and removing disabled) ----
|
387
395
|
return (React__default.createElement("div", null,
|
388
|
-
React__default.createElement(FieldLabel,
|
396
|
+
React__default.createElement(FieldLabel, { field: field, disabled: disabled, value: value, onChange: onChange }),
|
389
397
|
React__default.createElement("div", { className: "relative z-0" },
|
390
398
|
drawEnabled && (drawPolygonEnabled || drawPathEnabled || drawPointEnabled) && (React__default.createElement("div", { className: "absolute z-20 top-4 right-4 flex flex-col gap-2" },
|
391
399
|
drawPointEnabled && (React__default.createElement("div", { className: "tooltip-container relative group" },
|
@@ -416,6 +424,7 @@ var GeometryInput = function (_a) {
|
|
416
424
|
React__default.createElement(Button, { onClick: clearShape, className: "p-2 rounded-lg shadow-lg bg-red-500 hover:bg-red-600 text-white w-10 h-10 flex items-center justify-center", "aria-label": "Clear Shape" },
|
417
425
|
React__default.createElement(TrashIcon, { className: "w-5 h-5" }),
|
418
426
|
React__default.createElement("span", { className: "tooltip absolute right-full mr-2 px-2 py-1 bg-gray-800 text-white text-sm rounded whitespace-nowrap opacity-0 group-hover:opacity-100 pointer-events-none" }, "Clear Shape")))))),
|
427
|
+
disabled && (React__default.createElement("div", { className: "absolute z-50 bg-white bg-opacity-20 cursor-not-allowed top-0 right-0 left-0 bottom-0" })),
|
419
428
|
React__default.createElement(OpenLayersMapComponent, __assign({}, MAP_CONFIG, { setState: setMapState })),
|
420
429
|
showCoordinateInput && (React__default.createElement("div", { className: "mt-4" },
|
421
430
|
React__default.createElement("div", { className: "flex justify-between items-center mb-2 flex-wrap gap-y-2" },
|
@@ -430,9 +439,9 @@ var GeometryInput = function (_a) {
|
|
430
439
|
drawPolygonEnabled && React__default.createElement(Button, { onClick: function () { applyShapeType(EMapShape.polygon); }, className: "px-3 py-1 bg-white hover:bg-gray-50 text-black rounded-lg shadow-sm border border-gray-200 text-xs flex items-center gap-1" },
|
431
440
|
React__default.createElement(SquareIcon, { className: "w-3 h-3 rotate-45" }),
|
432
441
|
"Create Polygon")))),
|
433
|
-
React__default.createElement(TextArea, { error: error, className: 'min-h-[100px] bg-slate-50 rounded-lg shadow-inner font-mono text-sm', id: "".concat(field.id, "-coordinates"), testId: "".concat(field.id, "-coordinates"), value: coordinates, onChange: handleCoordinatesChange, placeholder: '...', "aria-label": "Coordinates Input" }),
|
442
|
+
React__default.createElement(TextArea, { error: error, disabled: disabled, className: 'min-h-[100px] bg-slate-50 rounded-lg shadow-inner font-mono text-sm', id: "".concat(field.id, "-coordinates"), testId: "".concat(field.id, "-coordinates"), value: coordinates, onChange: handleCoordinatesChange, placeholder: '...', "aria-label": "Coordinates Input" }),
|
434
443
|
error && React__default.createElement("p", { className: "text-red-600 text-xs mt-1" }, error))),
|
435
|
-
showGeoJSONInput && React__default.createElement(TextArea, { error: error, className: '...', id: field.id + '-debug', testId: field.id + '-debug', label: React__default.createElement(FieldLabel, __assign({}, field, { label:
|
444
|
+
showGeoJSONInput && React__default.createElement(TextArea, { error: error, className: '...', id: field.id + '-debug', testId: field.id + '-debug', label: React__default.createElement(FieldLabel, { field: __assign(__assign({}, field), { label: 'Debug GeoJSON Feature State' }), disabled: disabled }), value: JSON.stringify(value, null, 2) }))));
|
436
445
|
};
|
437
446
|
|
438
447
|
export { GeometryInput, GeometryInput as default };
|