@axdspub/axiom-ui-forms 0.2.4 → 0.2.6
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 +17 -29
- package/library/esm/_virtual/index2.js +2 -2
- package/library/esm/_virtual/index3.js +2 -2
- package/library/esm/_virtual/index8.js +2 -2
- package/library/esm/_virtual/index9.js +2 -2
- package/library/esm/node_modules/ajv/dist/compile/codegen/index.js +1 -1
- package/library/esm/node_modules/ajv/dist/compile/validate/index.js +1 -1
- package/library/esm/node_modules/ajv/dist/vocabularies/applicator/index.js +1 -1
- package/library/esm/node_modules/ajv/dist/vocabularies/format/index.js +1 -1
- package/library/esm/src/Form/Components/FieldCreator.js +16 -21
- package/library/esm/src/Form/Components/FieldCreator.js.map +1 -1
- package/library/esm/src/Form/Components/FieldLabel.js +6 -6
- package/library/esm/src/Form/Components/FieldLabel.js.map +1 -1
- package/library/esm/src/Form/Components/Inputs/Date.js +8 -12
- package/library/esm/src/Form/Components/Inputs/Date.js.map +1 -1
- package/library/esm/src/Form/Components/Inputs/GeoJSON.js +49 -48
- package/library/esm/src/Form/Components/Inputs/GeoJSON.js.map +1 -1
- package/library/esm/src/Form/Components/Inputs/Geometry.js +81 -59
- package/library/esm/src/Form/Components/Inputs/Geometry.js.map +1 -1
- package/library/esm/src/Form/Components/Inputs/Object.js +3 -3
- package/library/esm/src/Form/Components/Inputs/Object.js.map +1 -1
- package/library/esm/src/Form/Creator/FormContextProvider.js +17 -0
- package/library/esm/src/Form/Creator/FormContextProvider.js.map +1 -0
- package/library/esm/src/Form/Creator/FormCreator.js +39 -22
- package/library/esm/src/Form/Creator/FormCreator.js.map +1 -1
- package/library/esm/src/Form/Creator/FormFields.js +2 -2
- package/library/esm/src/Form/Creator/FormFields.js.map +1 -1
- package/library/esm/src/Form/Creator/FormSection.js +4 -4
- package/library/esm/src/Form/Creator/FormSection.js.map +1 -1
- package/library/esm/src/Form/Creator/FormSectionContextProvider.js +23 -0
- package/library/esm/src/Form/Creator/FormSectionContextProvider.js.map +1 -0
- package/library/esm/src/Form/Creator/Page.js +23 -34
- package/library/esm/src/Form/Creator/Page.js.map +1 -1
- package/library/esm/src/Form/Creator/Wizard.js +38 -48
- package/library/esm/src/Form/Creator/Wizard.js.map +1 -1
- package/library/esm/src/Form/helpers.js +25 -8
- package/library/esm/src/Form/helpers.js.map +1 -1
- package/library/esm/src/Form/resolveRefs.js.map +1 -1
- package/library/esm/src/Form/schemaToFormHelpers.js +45 -25
- package/library/esm/src/Form/schemaToFormHelpers.js.map +1 -1
- package/library/esm/src/library.js +1 -1
- package/package.json +14 -7
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Geometry.js","sources":["../../../../../../src/Form/Components/Inputs/Geometry.tsx"],"sourcesContent":["import { Button, TextArea } from '@axdspub/axiom-ui-utilities'\nimport FieldLabel from '@/Form/Components/FieldLabel'\nimport { type IFieldInputProps } from '@/Form/Creator/FormCreatorTypes'\n\nimport { EMapShape, type IMap, type IMapDrawEvent, type IStyleableMapProps } from '@axdspub/axiom-maps'\nimport { OpenLayersMap as Map } from '@axdspub/axiom-maps/library/openlayers'\nimport { type Feature, type GeoJSON } from 'geojson'\nimport React, { useEffect, useState, type ReactElement } from 'react'\nimport { TrashIcon, SquareIcon, BorderSolidIcon, DrawingPinFilledIcon } from '@radix-ui/react-icons'\n\n/*\nList of coordinates for testing. Around Anchorage.\n61.44480592425796, -150.3785489314675\n61.26059021199541, -150.7356022485971\n61.05235501381105, -150.61435734866856\n61.06014246374005, -149.9221328461051\n61.441517540302925, -149.16102284579276\n61.44480592425796, -150.3785489314675\n*/\n\nconst calculateCenterFromGeoJSON = (geo: GeoJSON | undefined): { lat: number, lon: number, zoom: number } => {\n if (!geo || !('features' in geo) || !Array.isArray(geo.features) || geo.features.length === 0) {\n return { lat: 61.2181, lon: -149.9003, zoom: 8 } // Default to Anchorage\n }\n\n const feature = geo.features[0]\n if (!feature?.geometry) {\n return { lat: 61.2181, lon: -149.9003, zoom: 8 }\n }\n\n const geometry = feature.geometry\n let coordinates: GeoJSON.Position[] = []\n\n switch (geometry.type) {\n case 'Polygon':\n coordinates = geometry.coordinates[0] // Get first ring (ignore holes)\n break\n case 'LineString':\n coordinates = geometry.coordinates\n break\n case 'Point':\n coordinates = [geometry.coordinates]\n break\n default:\n return { lat: 61.2181, lon: -149.9003, zoom: 8 }\n }\n\n if (!Array.isArray(coordinates) || coordinates.length === 0) {\n return { lat: 61.2181, lon: -149.9003, zoom: 8 }\n }\n\n // Calculate bounds\n let minLat = Infinity\n let maxLat = -Infinity\n let minLon = Infinity\n let maxLon = -Infinity\n let sumLat = 0\n let sumLon = 0\n let count = 0\n\n coordinates.forEach((coord: GeoJSON.Position) => {\n const [lon, lat] = coord\n minLat = Math.min(minLat, lat)\n maxLat = Math.max(maxLat, lat)\n minLon = Math.min(minLon, lon)\n maxLon = Math.max(maxLon, lon)\n sumLat += lat\n sumLon += lon\n count++\n })\n\n // Calculate center\n const centerLat = sumLat / count\n const centerLon = sumLon / count\n\n // Calculate zoom level based on bounds\n const latDiff = maxLat - minLat\n const lonDiff = maxLon - minLon\n const maxDiff = Math.max(latDiff, lonDiff)\n\n // Adjust zoom based on the size of the shape\n let zoom = 8 // default zoom\n if (maxDiff < 0.1) zoom = 12 // very small shape\n else if (maxDiff < 0.5) zoom = 10 // small shape\n else if (maxDiff < 1) zoom = 9 // medium shape\n else if (maxDiff < 2) zoom = 8 // large shape\n else if (maxDiff < 5) zoom = 7 // very large shape\n else zoom = 6 // huge shape\n\n return {\n lat: centerLat,\n lon: centerLon,\n zoom\n }\n}\n\nexport const GeoJSONInput = ({ field, onChange, value }: IFieldInputProps): ReactElement => {\n console.log('INITIAL VALUE', value)\n const initialGeoJSON = value as unknown as GeoJSON\n const initialMapConfig = calculateCenterFromGeoJSON(initialGeoJSON)\n const [currentDrawType, setCurrentDrawType] = useState<EMapShape>(EMapShape.polygon)\n const [isDrawing, setIsDrawing] = useState<boolean>(false)\n\n const MAP_CONFIG: IStyleableMapProps = {\n baseLayerKey: 'hybrid',\n height: '500px',\n width: '100%',\n style: {\n left: '0px',\n top: '0px',\n right: '0px',\n bottom: '0px',\n padding: '0'\n },\n center: { lat: initialMapConfig.lat, lon: initialMapConfig.lon },\n zoom: initialMapConfig.zoom,\n tools: {\n draw: {\n shape: currentDrawType,\n enabled: true\n }\n }\n }\n\n const [map, setMapState] = useState<IMap | undefined>(undefined)\n const [error, setError] = useState<string | undefined>(undefined)\n const [geojson, setGeojson] = useState<Feature | undefined>(() => {\n if (!value) return undefined\n return value as unknown as Feature\n })\n const [showGeoJSONInput] = useState<boolean>(false) // For debugging purposes\n const [coordinates, setCoordinates] = useState<string>(() => {\n if (!value) return ''\n const geoValue = value as unknown as GeoJSON.FeatureCollection\n if (geoValue?.type === 'FeatureCollection' && Array.isArray(geoValue.features) && geoValue.features.length > 0) {\n const feature = geoValue.features[0]\n const geometry = feature?.geometry\n if (!geometry) return ''\n\n if (geometry.type === 'Polygon') {\n const coords = geometry.coordinates[0]\n return coords.map((pos: GeoJSON.Position) => `${pos[1]}, ${pos[0]}`).join('\\n')\n } else if (geometry.type === 'LineString') {\n const coords = geometry.coordinates\n return coords.map((pos: GeoJSON.Position) => `${pos[1]}, ${pos[0]}`).join('\\n')\n } else if (geometry.type === 'Point') {\n const coords = geometry.coordinates\n return `${coords[1]}, ${coords[0]}`\n }\n }\n return ''\n })\n\n const getValue = (): string => {\n return geojson !== undefined && geojson !== null\n ? typeof geojson === 'object'\n ? JSON.stringify(geojson, null, 2)\n : String(geojson)\n : ''\n }\n\n const createGeoJSONFromCoordinates = (coordString: string, forceType?: EMapShape): Feature | undefined => {\n if (!coordString.trim()) {\n setError(undefined)\n return undefined\n }\n\n try {\n const points = coordString\n .split('\\n')\n .map(line => line.trim())\n .filter(line => line.length > 0)\n .map(line => {\n const [lat, lon] = line.split(',').map(coord => parseFloat(coord.trim()))\n if (isNaN(lat) || isNaN(lon)) {\n throw new Error('Invalid coordinate format')\n }\n return [lon, lat]\n })\n\n if (points.length === 0) {\n throw new Error('No valid coordinates found')\n }\n\n // Single point\n if (points.length === 1) {\n return {\n type: 'Feature',\n properties: {},\n geometry: {\n type: 'Point',\n coordinates: points[0]\n }\n }\n }\n\n // For polygon or line, based on forceType or number of points\n if (forceType === EMapShape.polygon || (!forceType && points.length >= 3)) {\n // Close the polygon by adding the first point at the end if not already closed\n if (JSON.stringify(points[0]) !== JSON.stringify(points[points.length - 1])) {\n points.push(points[0])\n }\n return {\n type: 'Feature',\n properties: {},\n geometry: {\n type: 'Polygon',\n coordinates: [points]\n }\n }\n }\n\n // LineString\n return {\n\n type: 'Feature',\n properties: {},\n geometry: {\n type: 'LineString',\n coordinates: points\n }\n\n }\n } catch (e) {\n setError('Invalid coordinate format. Use \"lat, lon\" format, one per line')\n return undefined\n }\n }\n\n const [showShapeTypeButtons, setShowShapeTypeButtons] = useState<boolean>(() => {\n // Show buttons if initial value has 2+ coordinates\n if (!value) return false\n const geoValue = value as unknown as GeoJSON.FeatureCollection\n if (geoValue?.type === 'FeatureCollection' && Array.isArray(geoValue.features) && geoValue.features.length > 0) {\n const feature = geoValue.features[0]\n const geometry = feature?.geometry\n if (!geometry) return false\n\n if (geometry.type === 'Polygon' || geometry.type === 'LineString') {\n return geometry.coordinates.length >= 2\n }\n }\n return false\n })\n\n const updateCoordinatesFromGeoJSON = (geo: GeoJSON | undefined): void => {\n if (!geo || geo.type !== 'FeatureCollection' || !geo.features?.[0]?.geometry) return\n\n const feature = geo.features[0]\n const geometry = feature.geometry\n let newCoords = ''\n\n if (geometry.type === 'Polygon') {\n const coords = geometry.coordinates[0]\n newCoords = coords.map((pos: GeoJSON.Position) => `${pos[1]}, ${pos[0]}`).join('\\n')\n } else if (geometry.type === 'LineString') {\n const coords = geometry.coordinates\n newCoords = coords.map((pos: GeoJSON.Position) => `${pos[1]}, ${pos[0]}`).join('\\n')\n } else if (geometry.type === 'Point') {\n const coords = geometry.coordinates\n newCoords = `${coords[1]}, ${coords[0]}`\n }\n\n setCoordinates(newCoords)\n setShowShapeTypeButtons(shouldShowShapeButtons(newCoords))\n }\n\n useEffect(() => {\n if (map === undefined) return\n\n map.onDrawComplete((e: IMapDrawEvent) => {\n console.log('draw complete', e)\n setGeojson(e.data?.geojson.features?.[0])\n updateCoordinatesFromGeoJSON(e.data?.geojson)\n setIsDrawing(false)\n // Disable drawing after shape is completed\n map.disableDraw(currentDrawType)\n })\n\n // On modify drawing\n map.onDrawUpdate((e: IMapDrawEvent) => {\n console.log('draw update', e)\n setGeojson(e.data?.geojson?.features?.[0])\n updateCoordinatesFromGeoJSON(e.data?.geojson)\n })\n }, [map])\n\n useEffect(() => {\n if (geojson !== undefined) {\n onChange(geojson.geometry)\n }\n }, [geojson])\n\n const hasValidShape = (geo: GeoJSON | undefined): boolean => {\n return geo !== undefined &&\n 'features' in geo &&\n Array.isArray(geo.features) &&\n geo.features.length > 0\n }\n\n const clearShape = (): void => {\n setGeojson(undefined)\n onChange(undefined)\n setCoordinates('')\n if (map) {\n map.setDrawGeojson({\n type: 'FeatureCollection',\n features: []\n })\n map.enableDraw(currentDrawType) // Re-enable drawing when shape is cleared\n setIsDrawing(true)\n }\n }\n\n const handleDrawTypeChange = (shapeType: EMapShape): void => {\n if (map) {\n // Clear existing shape if any\n map.setDrawGeojson({\n type: 'FeatureCollection',\n features: []\n })\n setGeojson(undefined)\n onChange(undefined)\n setCoordinates('')\n setShowShapeTypeButtons(false)\n setCurrentDrawType(shapeType)\n map.enableDraw(shapeType)\n setIsDrawing(true)\n }\n }\n\n const shouldShowShapeButtons = (coords: string): boolean => {\n const validLines = coords.trim().split('\\n')\n .map(line => line.trim())\n .filter(line => line.length > 0)\n .filter(line => {\n try {\n const [lat, lon] = line.split(',').map(coord => parseFloat(coord.trim()))\n return !isNaN(lat) && !isNaN(lon)\n } catch {\n return false\n }\n })\n return validLines.length >= 3\n }\n\n const handleCoordinatesChange = (e: string | undefined): void => {\n const newCoords = e ?? ''\n setCoordinates(newCoords)\n setShowShapeTypeButtons(shouldShowShapeButtons(newCoords))\n\n try {\n const newGeoJSON = createGeoJSONFromCoordinates(newCoords)\n if (newGeoJSON) {\n setGeojson(newGeoJSON)\n setError(undefined)\n if (map) {\n map.setDrawGeojson({\n type: 'FeatureCollection',\n features: []\n })\n map.setDrawGeojson({ type: 'FeatureCollection', features: [newGeoJSON] } satisfies GeoJSON.FeatureCollection)\n map.disableDraw(currentDrawType) // Disable drawing when coordinates are entered\n }\n } else {\n setGeojson(undefined)\n onChange(undefined)\n if (map) {\n map.setDrawGeojson({\n type: 'FeatureCollection',\n features: []\n })\n }\n }\n } catch (e) {\n setError('Invalid coordinate format')\n }\n }\n\n // Reload shape on the map\n useEffect(() => {\n if (map === undefined) return\n\n if (geojson !== undefined && 'features' in geojson) {\n map.setDrawGeojson({\n type: 'FeatureCollection',\n features: [geojson]\n } satisfies GeoJSON.FeatureCollection)\n map.disableDraw(currentDrawType) // Disable drawing when there's a shape\n setIsDrawing(false)\n // Update coordinates display and shape type buttons\n updateCoordinatesFromGeoJSON(geojson)\n setShowShapeTypeButtons(shouldShowShapeButtons(coordinates))\n } else {\n map.enableDraw(currentDrawType)\n setIsDrawing(true)\n }\n }, [map, currentDrawType])\n\n const applyShapeType = (shapeType: EMapShape): void => {\n const newGeoJSON = createGeoJSONFromCoordinates(coordinates, shapeType)\n if (newGeoJSON) {\n setGeojson(newGeoJSON)\n setError(undefined)\n if (map) {\n map.setDrawGeojson({\n type: 'FeatureCollection',\n features: []\n })\n map.setDrawGeojson({ type: 'FeatureCollection', features: [newGeoJSON] } satisfies GeoJSON.FeatureCollection)\n }\n }\n // Don't hide the buttons anymore\n // setShowShapeTypeButtons(false)\n }\n\n return <div className=\"relative\">\n <FieldLabel {...field} />\n <div className=\"absolute z-20 top-12 right-4 flex flex-col gap-2\">\n <div className=\"tooltip-container relative group\">\n <Button\n onClick={() => { handleDrawTypeChange(EMapShape.polygon) }}\n className={`p-2 rounded-lg shadow-lg ${\n currentDrawType === EMapShape.polygon && isDrawing\n ? 'bg-white hover:bg-gray-50 ring-2 ring-yellow-200 shadow-[0_0_10px_rgba(253,224,71,0.5)]'\n : 'bg-gray-100 hover:bg-gray-50'\n } text-black w-10 h-10 flex items-center justify-center`}\n >\n <SquareIcon className=\"w-5 h-5 rotate-45\" />\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\">\n Draw Polygon\n </span>\n </Button>\n </div>\n <div className=\"tooltip-container relative group\">\n <Button\n onClick={() => { handleDrawTypeChange(EMapShape.linestring) }}\n className={`p-2 rounded-lg shadow-lg ${\n currentDrawType === EMapShape.linestring && isDrawing\n ? 'bg-white hover:bg-gray-50 ring-2 ring-yellow-200 shadow-[0_0_10px_rgba(253,224,71,0.5)]'\n : 'bg-gray-100 hover:bg-gray-50'\n } text-black w-10 h-10 flex items-center justify-center`}\n >\n <BorderSolidIcon className=\"w-5 h-5\" />\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\">\n Draw Path\n </span>\n </Button>\n </div>\n <div className=\"tooltip-container relative group\">\n <Button\n onClick={() => { handleDrawTypeChange(EMapShape.point) }}\n className={`p-2 rounded-lg shadow-lg ${\n currentDrawType === EMapShape.point && isDrawing\n ? 'bg-white hover:bg-gray-50 ring-2 ring-yellow-200 shadow-[0_0_10px_rgba(253,224,71,0.5)]'\n : 'bg-gray-100 hover:bg-gray-50'\n } text-black w-10 h-10 flex items-center justify-center`}\n >\n <DrawingPinFilledIcon className=\"w-5 h-5\" />\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\">\n Draw Point\n </span>\n </Button>\n </div>\n {hasValidShape(geojson) && (\n <div className=\"tooltip-container relative group\">\n <Button\n onClick={clearShape}\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\"\n >\n <TrashIcon className=\"w-5 h-5\" />\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\">\n Clear Shape\n </span>\n </Button>\n </div>\n )}\n </div>\n <Map {...MAP_CONFIG} setState={setMapState} />\n <div className=\"mt-4\">\n <div className=\"flex justify-between items-center mb-2\">\n <span>Draw on map or enter coordinates <pre className=\"inline-block text-sm\">(latitude, longitude)</pre></span>\n {showShapeTypeButtons && (\n <div className=\"flex gap-2\">\n <Button\n onClick={() => { applyShapeType(EMapShape.linestring) }}\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\"\n >\n <BorderSolidIcon className=\"w-4 h-4\" />\n Create Path\n </Button>\n <Button\n onClick={() => { applyShapeType(EMapShape.polygon) }}\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\"\n >\n <SquareIcon className=\"w-4 h-4 rotate-45\" />\n Create Polygon\n </Button>\n </div>\n )}\n </div>\n <TextArea\n error={error}\n className='min-h-[100px] bg-slate-50 rounded-lg shadow-inner'\n id={`${field.id}-coordinates`}\n testId={`${field.id}-coordinates`}\n value={coordinates}\n onChange={handleCoordinatesChange}\n placeholder=\"61.2181, -149.9003 61.2182, -149.9004 61.2183, -149.9005\"\n />\n </div>\n {showGeoJSONInput && <TextArea\n error={error}\n className='min-h-[500px] bg-slate-50 rounded-lg shadow-inner'\n id={field.id}\n testId={field.id}\n label={<FieldLabel {...field} />}\n value={getValue()}\n onChange={(e) => {\n try {\n JSON.parse(e ?? '')\n onChange(JSON.parse(e ?? ''))\n setError(undefined)\n } catch (e) {\n setError('Invalid JSON')\n }\n }} />}\n </div>\n}\n\nexport default GeoJSONInput\n"],"names":["React","Map"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"Geometry.js","sources":["../../../../../../src/Form/Components/Inputs/Geometry.tsx"],"sourcesContent":["import { Button, TextArea } from '@axdspub/axiom-ui-utilities'\nimport FieldLabel from '@/Form/Components/FieldLabel'\nimport { type IFieldInputProps } from '@/Form/Creator/FormCreatorTypes'\n\nimport { EMapShape, type IMap, type IMapDrawEvent, type IStyleableMapProps } from '@axdspub/axiom-maps'\nimport { OpenLayersMap as Map } from '@axdspub/axiom-maps/library/openlayers'\nimport { type Feature, type GeoJSON } from 'geojson'\nimport React, { useEffect, useState, type ReactElement } from 'react'\nimport { TrashIcon, SquareIcon, BorderSolidIcon, DrawingPinFilledIcon } from '@radix-ui/react-icons'\n\n/*\nList of coordinates for testing. Around Anchorage.\n61.44480592425796, -150.3785489314675\n61.26059021199541, -150.7356022485971\n61.05235501381105, -150.61435734866856\n61.06014246374005, -149.9221328461051\n61.441517540302925, -149.16102284579276\n61.44480592425796, -150.3785489314675\n*/\n\nconst calculateCenterFromGeoJSON = (geo: GeoJSON | undefined): { lat: number, lon: number, zoom: number } => {\n if (!geo || !('features' in geo) || !Array.isArray(geo.features) || geo.features.length === 0) {\n return { lat: 61.2181, lon: -149.9003, zoom: 8 } // Default to Anchorage\n }\n\n const feature = geo.features[0]\n if (!feature?.geometry) {\n return { lat: 61.2181, lon: -149.9003, zoom: 8 }\n }\n\n const geometry = feature.geometry\n let coordinates: GeoJSON.Position[] = []\n\n switch (geometry.type) {\n case 'Polygon':\n coordinates = geometry.coordinates[0] // Get first ring (ignore holes)\n break\n case 'LineString':\n coordinates = geometry.coordinates\n break\n case 'Point':\n coordinates = [geometry.coordinates]\n break\n default:\n return { lat: 61.2181, lon: -149.9003, zoom: 8 }\n }\n\n if (!Array.isArray(coordinates) || coordinates.length === 0) {\n return { lat: 61.2181, lon: -149.9003, zoom: 8 }\n }\n\n // Calculate bounds\n let minLat = Infinity\n let maxLat = -Infinity\n let minLon = Infinity\n let maxLon = -Infinity\n let sumLat = 0\n let sumLon = 0\n let count = 0\n\n coordinates.forEach((coord: GeoJSON.Position) => {\n const [lon, lat] = coord\n minLat = Math.min(minLat, lat)\n maxLat = Math.max(maxLat, lat)\n minLon = Math.min(minLon, lon)\n maxLon = Math.max(maxLon, lon)\n sumLat += lat\n sumLon += lon\n count++\n })\n\n // Calculate center\n const centerLat = sumLat / count\n const centerLon = sumLon / count\n\n // Calculate zoom level based on bounds\n const latDiff = maxLat - minLat\n const lonDiff = maxLon - minLon\n const maxDiff = Math.max(latDiff, lonDiff)\n\n // Adjust zoom based on the size of the shape\n let zoom = 8 // default zoom\n if (maxDiff < 0.1) zoom = 12 // very small shape\n else if (maxDiff < 0.5) zoom = 10 // small shape\n else if (maxDiff < 1) zoom = 9 // medium shape\n else if (maxDiff < 2) zoom = 8 // large shape\n else if (maxDiff < 5) zoom = 7 // very large shape\n else zoom = 6 // huge shape\n\n return {\n lat: centerLat,\n lon: centerLon,\n zoom\n }\n}\n\nexport const GeoJSONInput = ({ field, onChange, value }: IFieldInputProps): ReactElement => {\n console.log('INITIAL VALUE', value)\n const initialGeoJSON = value as unknown as GeoJSON\n const initialMapConfig = calculateCenterFromGeoJSON(initialGeoJSON)\n const [currentDrawType, setCurrentDrawType] = useState<EMapShape>(EMapShape.polygon)\n const [isDrawing, setIsDrawing] = useState<boolean>(false)\n\n // Draw settings\n const drawEnabled = field.settings?.drawEnabled !== false // Default to true if not specified\n const drawPolygonEnabled = field.settings?.drawPolygonEnabled !== false && drawEnabled // Default to true if drawEnabled and not specified\n const drawPathEnabled = field.settings?.drawPathEnabled !== false && drawEnabled // Default to true if drawEnabled and not specified\n const drawPointEnabled = field.settings?.drawPointEnabled !== false && drawEnabled // Default to true if drawEnabled and not specified\n const showCoordinateInput = field.settings?.showCoordinateInput !== false // Default to true if not specified\n\n // Set initial draw type based on enabled tools\n useEffect(() => {\n if (drawPolygonEnabled) {\n setCurrentDrawType(EMapShape.polygon)\n } else if (drawPathEnabled) {\n setCurrentDrawType(EMapShape.linestring)\n } else if (drawPointEnabled) {\n setCurrentDrawType(EMapShape.point)\n }\n }, [drawPolygonEnabled, drawPathEnabled, drawPointEnabled])\n\n const MAP_CONFIG: IStyleableMapProps = {\n baseLayerKey: 'hybrid',\n height: '500px',\n width: '100%',\n style: {\n left: '0px',\n top: '0px',\n right: '0px',\n bottom: '0px',\n padding: '0'\n },\n center: { lat: initialMapConfig.lat, lon: initialMapConfig.lon },\n zoom: initialMapConfig.zoom,\n tools: {\n draw: {\n shape: currentDrawType,\n enabled: drawEnabled && (drawPolygonEnabled || drawPathEnabled || drawPointEnabled)\n }\n }\n }\n\n const [map, setMapState] = useState<IMap | undefined>(undefined)\n const [error, setError] = useState<string | undefined>(undefined)\n const [geojson, setGeojson] = useState<Feature | undefined>(() => {\n if (!value) return undefined\n return value as unknown as Feature\n })\n const [showGeoJSONInput] = useState<boolean>(false) // For debugging purposes\n const [coordinates, setCoordinates] = useState<string>(() => {\n if (!value) return ''\n const geoValue = value as unknown as GeoJSON.FeatureCollection\n if (geoValue?.type === 'FeatureCollection' && Array.isArray(geoValue.features) && geoValue.features.length > 0) {\n const feature = geoValue.features[0]\n const geometry = feature?.geometry\n if (!geometry) return ''\n\n if (geometry.type === 'Polygon') {\n const coords = geometry.coordinates[0]\n return coords.map((pos: GeoJSON.Position) => `${pos[1]}, ${pos[0]}`).join('\\n')\n } else if (geometry.type === 'LineString') {\n const coords = geometry.coordinates\n return coords.map((pos: GeoJSON.Position) => `${pos[1]}, ${pos[0]}`).join('\\n')\n } else if (geometry.type === 'Point') {\n const coords = geometry.coordinates\n return `${coords[1]}, ${coords[0]}`\n }\n }\n return ''\n })\n\n const getValue = (): string => {\n return geojson !== undefined && geojson !== null\n ? typeof geojson === 'object'\n ? JSON.stringify(geojson, null, 2)\n : String(geojson)\n : ''\n }\n\n const createGeoJSONFromCoordinates = (coordString: string, forceType?: EMapShape): Feature | undefined => {\n if (!coordString.trim()) {\n setError(undefined)\n return undefined\n }\n\n try {\n const points = coordString\n .split('\\n')\n .map(line => line.trim())\n .filter(line => line.length > 0)\n .map(line => {\n const [lat, lon] = line.split(',').map(coord => parseFloat(coord.trim()))\n if (isNaN(lat) || isNaN(lon)) {\n throw new Error('Invalid coordinate format')\n }\n return [lon, lat]\n })\n\n if (points.length === 0) {\n throw new Error('No valid coordinates found')\n }\n\n // Single point\n if (points.length === 1) {\n return {\n type: 'Feature',\n properties: {},\n geometry: {\n type: 'Point',\n coordinates: points[0]\n }\n }\n }\n\n // For polygon or line, based on forceType or number of points\n if (forceType === EMapShape.polygon || (!forceType && points.length >= 3)) {\n // Close the polygon by adding the first point at the end if not already closed\n if (JSON.stringify(points[0]) !== JSON.stringify(points[points.length - 1])) {\n points.push(points[0])\n }\n return {\n type: 'Feature',\n properties: {},\n geometry: {\n type: 'Polygon',\n coordinates: [points]\n }\n }\n }\n\n // LineString\n return {\n\n type: 'Feature',\n properties: {},\n geometry: {\n type: 'LineString',\n coordinates: points\n }\n\n }\n } catch (e) {\n setError('Invalid coordinate format. Use \"lat, lon\" format, one per line')\n return undefined\n }\n }\n\n const [showShapeTypeButtons, setShowShapeTypeButtons] = useState<boolean>(() => {\n // Show buttons if initial value has 2+ coordinates\n if (!value) return false\n const geoValue = value as unknown as GeoJSON.FeatureCollection\n if (geoValue?.type === 'FeatureCollection' && Array.isArray(geoValue.features) && geoValue.features.length > 0) {\n const feature = geoValue.features[0]\n const geometry = feature?.geometry\n if (!geometry) return false\n\n if (geometry.type === 'Polygon' || geometry.type === 'LineString') {\n return geometry.coordinates.length >= 2\n }\n }\n return false\n })\n\n const updateCoordinatesFromGeoJSON = (geo: GeoJSON | undefined): void => {\n if (!geo || geo.type !== 'FeatureCollection' || !geo.features?.[0]?.geometry) return\n\n const feature = geo.features[0]\n const geometry = feature.geometry\n let newCoords = ''\n\n if (geometry.type === 'Polygon') {\n const coords = geometry.coordinates[0]\n newCoords = coords.map((pos: GeoJSON.Position) => `${pos[1]}, ${pos[0]}`).join('\\n')\n } else if (geometry.type === 'LineString') {\n const coords = geometry.coordinates\n newCoords = coords.map((pos: GeoJSON.Position) => `${pos[1]}, ${pos[0]}`).join('\\n')\n } else if (geometry.type === 'Point') {\n const coords = geometry.coordinates\n newCoords = `${coords[1]}, ${coords[0]}`\n }\n\n setCoordinates(newCoords)\n setShowShapeTypeButtons(shouldShowShapeButtons(newCoords))\n }\n\n // i think this has to stay - we're basically staying in sync with dom element outside of react\n useEffect(() => {\n if (map === undefined) return\n\n map.onDrawComplete((e: IMapDrawEvent) => {\n console.log('draw complete', e)\n setGeojson(e.data?.geojson.features?.[0])\n updateCoordinatesFromGeoJSON(e.data?.geojson)\n setIsDrawing(false)\n // Disable drawing after shape is completed\n map.disableDraw(currentDrawType)\n })\n\n // On modify drawing\n map.onDrawUpdate((e: IMapDrawEvent) => {\n console.log('draw update', e)\n setGeojson(e.data?.geojson?.features?.[0])\n updateCoordinatesFromGeoJSON(e.data?.geojson)\n })\n }, [map])\n\n // can we get rid of this?\n useEffect(() => {\n if (geojson !== undefined) {\n onChange(geojson.geometry)\n }\n }, [geojson])\n\n const hasValidShape = (geo: GeoJSON | undefined): boolean => {\n return geo !== undefined &&\n 'features' in geo &&\n Array.isArray(geo.features) &&\n geo.features.length > 0\n }\n\n const clearShape = (): void => {\n setGeojson(undefined)\n onChange(undefined)\n setCoordinates('')\n if (map) {\n map.setDrawGeojson({\n type: 'FeatureCollection',\n features: []\n })\n map.enableDraw(currentDrawType) // Re-enable drawing when shape is cleared\n setIsDrawing(true)\n }\n }\n\n const handleDrawTypeChange = (shapeType: EMapShape): void => {\n if (map) {\n // Clear existing shape if any\n map.setDrawGeojson({\n type: 'FeatureCollection',\n features: []\n })\n setGeojson(undefined)\n onChange(undefined)\n setCoordinates('')\n setShowShapeTypeButtons(false)\n setCurrentDrawType(shapeType)\n map.enableDraw(shapeType)\n setIsDrawing(true)\n }\n }\n\n const shouldShowShapeButtons = (coords: string): boolean => {\n const validLines = coords.trim().split('\\n')\n .map(line => line.trim())\n .filter(line => line.length > 0)\n .filter(line => {\n try {\n const [lat, lon] = line.split(',').map(coord => parseFloat(coord.trim()))\n return !isNaN(lat) && !isNaN(lon)\n } catch {\n return false\n }\n })\n return validLines.length >= 3\n }\n\n const handleCoordinatesChange = (e: string | undefined): void => {\n const newCoords = e ?? ''\n setCoordinates(newCoords)\n setShowShapeTypeButtons(shouldShowShapeButtons(newCoords))\n\n try {\n const newGeoJSON = createGeoJSONFromCoordinates(newCoords)\n if (newGeoJSON) {\n setGeojson(newGeoJSON)\n setError(undefined)\n if (map) {\n map.setDrawGeojson({\n type: 'FeatureCollection',\n features: []\n })\n map.setDrawGeojson({ type: 'FeatureCollection', features: [newGeoJSON] } satisfies GeoJSON.FeatureCollection)\n map.disableDraw(currentDrawType) // Disable drawing when coordinates are entered\n }\n } else {\n setGeojson(undefined)\n onChange(undefined)\n if (map) {\n map.setDrawGeojson({\n type: 'FeatureCollection',\n features: []\n })\n }\n }\n } catch (e) {\n setError('Invalid coordinate format')\n }\n }\n\n // Reload shape on the map\n useEffect(() => {\n if (map === undefined) return\n\n if (geojson !== undefined && 'features' in geojson) {\n map.setDrawGeojson({\n type: 'FeatureCollection',\n features: [geojson]\n } satisfies GeoJSON.FeatureCollection)\n map.disableDraw(currentDrawType) // Disable drawing when there's a shape\n setIsDrawing(false)\n // Update coordinates display and shape type buttons\n updateCoordinatesFromGeoJSON(geojson)\n setShowShapeTypeButtons(shouldShowShapeButtons(coordinates))\n } else {\n map.enableDraw(currentDrawType)\n setIsDrawing(true)\n }\n }, [map, currentDrawType])\n\n const applyShapeType = (shapeType: EMapShape): void => {\n const newGeoJSON = createGeoJSONFromCoordinates(coordinates, shapeType)\n if (newGeoJSON) {\n setGeojson(newGeoJSON)\n setError(undefined)\n if (map) {\n map.setDrawGeojson({\n type: 'FeatureCollection',\n features: []\n })\n map.setDrawGeojson({ type: 'FeatureCollection', features: [newGeoJSON] } satisfies GeoJSON.FeatureCollection)\n }\n }\n // Don't hide the buttons anymore\n // setShowShapeTypeButtons(false)\n }\n\n return <div>\n <FieldLabel {...field} />\n <div className=\"relative\">\n {drawEnabled && (drawPolygonEnabled || drawPathEnabled || drawPointEnabled) && (\n <div className=\"absolute z-20 top-12 right-4 flex flex-col gap-2\">\n {drawPolygonEnabled && (\n <div className=\"tooltip-container relative group\">\n <Button\n onClick={() => { handleDrawTypeChange(EMapShape.polygon) }}\n className={`p-2 rounded-lg shadow-lg ${\n currentDrawType === EMapShape.polygon && isDrawing\n ? 'bg-white hover:bg-gray-50 ring-2 ring-yellow-200 shadow-[0_0_10px_rgba(253,224,71,0.5)]'\n : 'bg-gray-100 hover:bg-gray-50'\n } text-black w-10 h-10 flex items-center justify-center`}\n >\n <SquareIcon className=\"w-5 h-5 rotate-45\" />\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\">\n Draw Polygon\n </span>\n </Button>\n </div>\n )}\n {drawPathEnabled && (\n <div className=\"tooltip-container relative group\">\n <Button\n onClick={() => { handleDrawTypeChange(EMapShape.linestring) }}\n className={`p-2 rounded-lg shadow-lg ${\n currentDrawType === EMapShape.linestring && isDrawing\n ? 'bg-white hover:bg-gray-50 ring-2 ring-yellow-200 shadow-[0_0_10px_rgba(253,224,71,0.5)]'\n : 'bg-gray-100 hover:bg-gray-50'\n } text-black w-10 h-10 flex items-center justify-center`}\n >\n <BorderSolidIcon className=\"w-5 h-5\" />\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\">\n Draw Path\n </span>\n </Button>\n </div>\n )}\n {drawPointEnabled && (\n <div className=\"tooltip-container relative group\">\n <Button\n onClick={() => { handleDrawTypeChange(EMapShape.point) }}\n className={`p-2 rounded-lg shadow-lg ${\n currentDrawType === EMapShape.point && isDrawing\n ? 'bg-white hover:bg-gray-50 ring-2 ring-yellow-200 shadow-[0_0_10px_rgba(253,224,71,0.5)]'\n : 'bg-gray-100 hover:bg-gray-50'\n } text-black w-10 h-10 flex items-center justify-center`}\n >\n <DrawingPinFilledIcon className=\"w-5 h-5\" />\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\">\n Draw Point\n </span>\n </Button>\n </div>\n )}\n {hasValidShape(geojson) && (\n <div className=\"tooltip-container relative group\">\n <Button\n onClick={clearShape}\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\"\n >\n <TrashIcon className=\"w-5 h-5\" />\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\">\n Clear Shape\n </span>\n </Button>\n </div>\n )}\n </div>\n )}\n <Map {...MAP_CONFIG} setState={setMapState} />\n {showCoordinateInput && (\n <div className=\"mt-4\">\n <div className=\"flex justify-between items-center mb-2\">\n <span>Draw on map or enter coordinates <pre className=\"inline-block text-sm\">(latitude, longitude)</pre></span>\n {drawEnabled && showShapeTypeButtons && (\n <div className=\"flex gap-2\">\n {drawPathEnabled && (\n <Button\n onClick={() => { applyShapeType(EMapShape.linestring) }}\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\"\n >\n <BorderSolidIcon className=\"w-4 h-4\" />\n Create Path\n </Button>\n )}\n {drawPolygonEnabled && (\n <Button\n onClick={() => { applyShapeType(EMapShape.polygon) }}\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\"\n >\n <SquareIcon className=\"w-4 h-4 rotate-45\" />\n Create Polygon\n </Button>\n )}\n </div>\n )}\n </div>\n <TextArea\n error={error}\n className='min-h-[100px] bg-slate-50 rounded-lg shadow-inner'\n id={`${field.id}-coordinates`}\n testId={`${field.id}-coordinates`}\n value={coordinates}\n onChange={handleCoordinatesChange}\n placeholder=\"61.2181, -149.9003 61.2182, -149.9004 61.2183, -149.9005\"\n />\n </div>\n )}\n {showGeoJSONInput && <TextArea\n error={error}\n className='min-h-[500px] bg-slate-50 rounded-lg shadow-inner'\n id={field.id}\n testId={field.id}\n label={<FieldLabel {...field} />}\n value={getValue()}\n onChange={(e) => {\n try {\n JSON.parse(e ?? '')\n onChange(JSON.parse(e ?? ''))\n setError(undefined)\n } catch (e) {\n setError('Invalid JSON')\n }\n }} />}\n </div>\n </div>\n}\n\nexport default GeoJSONInput\n"],"names":["React","Map"],"mappings":"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"}
|
@@ -5,7 +5,7 @@ import { utils as index$1 } from '../../../../node_modules/@axdspub/axiom-ui-uti
|
|
5
5
|
import React__default from 'react';
|
6
6
|
|
7
7
|
var ObjectInput = function (_a) {
|
8
|
-
var
|
8
|
+
var field = _a.field, onChange = _a.onChange, value = _a.value;
|
9
9
|
var initialValue = (typeof value === 'object' ? value !== null && value !== void 0 ? value : {} : {});
|
10
10
|
if (field.type === 'object' && field.fields !== undefined) {
|
11
11
|
var cl = "".concat(field.layout === 'horizontal' ? "flex flex-row gap-4 ".concat(field.label !== undefined ? 'px-0' : '') : 'flex flex-col gap-4');
|
@@ -17,7 +17,7 @@ var ObjectInput = function (_a) {
|
|
17
17
|
React__default.createElement("div", { className: "p-4 bg-slate-100 ".concat(cl) }, field.fields.map(function (childField) {
|
18
18
|
var _a;
|
19
19
|
var key = ((_a = field.path) !== null && _a !== void 0 ? _a : [field.id]).concat(childField.id).join('.');
|
20
|
-
return (React__default.createElement(FieldCreator, {
|
20
|
+
return (React__default.createElement(FieldCreator, { onChange: function (e) {
|
21
21
|
if (childField.type === 'object' && childField.skip_path === true) {
|
22
22
|
onChange(e);
|
23
23
|
}
|
@@ -28,7 +28,7 @@ var ObjectInput = function (_a) {
|
|
28
28
|
}, className: index$1.makeClassName({
|
29
29
|
defaultClassName: 'p-0',
|
30
30
|
className: fc_1
|
31
|
-
}), value: initialValue[childField.id], field: childField,
|
31
|
+
}), value: initialValue[childField.id], field: childField, key: key }));
|
32
32
|
}))));
|
33
33
|
}
|
34
34
|
return React__default.createElement("p", null,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Object.js","sources":["../../../../../../src/Form/Components/Inputs/Object.tsx"],"sourcesContent":["import FieldCreator from '@/Form/Components/FieldCreator'\nimport FieldLabel from '@/Form/Components/FieldLabel'\nimport { type ICompositeValueType, type IFieldInputProps } from '@/Form/Creator/FormCreatorTypes'\nimport { utils } from '@axdspub/axiom-ui-utilities'\nimport React, { type ReactElement } from 'react'\n\nconst ObjectInput = ({
|
1
|
+
{"version":3,"file":"Object.js","sources":["../../../../../../src/Form/Components/Inputs/Object.tsx"],"sourcesContent":["import FieldCreator from '@/Form/Components/FieldCreator'\nimport FieldLabel from '@/Form/Components/FieldLabel'\nimport { type ICompositeValueType, type IFieldInputProps } from '@/Form/Creator/FormCreatorTypes'\nimport { utils } from '@axdspub/axiom-ui-utilities'\nimport React, { type ReactElement } from 'react'\n\nconst ObjectInput = ({ field, onChange, value }: IFieldInputProps): ReactElement => {\n const initialValue = (typeof value === 'object' ? value ?? {} : {}) as ICompositeValueType\n if (field.type === 'object' && field.fields !== undefined) {\n const cl = `${field.layout === 'horizontal' ? `flex flex-row gap-4 ${field.label !== undefined ? 'px-0' : ''}` : 'flex flex-col gap-4'}`\n const fc = field.layout === 'horizontal' ? 'flex-1' : ''\n return (\n <div>\n {\n field.label !== undefined\n ? <FieldLabel {...field} />\n : null\n }\n <div className={`p-4 bg-slate-100 ${cl}`}>\n {\n field.fields.map((childField) => {\n const key = (field.path ?? [field.id]).concat(childField.id).join('.')\n\n return (\n <FieldCreator\n onChange={(e) => {\n if (childField.type === 'object' && childField.skip_path === true) {\n onChange(e)\n } else {\n initialValue[childField.id] = e\n onChange({ ...initialValue })\n }\n }}\n className={utils.makeClassName({\n defaultClassName: 'p-0',\n className: fc\n })}\n value={initialValue[childField.id]}\n field={childField}\n key={key}\n />\n )\n })\n }\n </div>\n </div>\n )\n }\n return <p>Field config for {field.id} is missing 'fields'</p>\n}\n\nexport default ObjectInput\n"],"names":["React","utils"],"mappings":";;;;;;AAMM,IAAA,WAAW,GAAG,UAAC,EAA4C,EAAA;AAA1C,IAAA,IAAA,KAAK,WAAA,EAAE,QAAQ,GAAA,EAAA,CAAA,QAAA,EAAE,KAAK,GAAA,EAAA,CAAA,KAAA;IAC3C,IAAM,YAAY,IAAI,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,aAAL,KAAK,KAAA,MAAA,GAAL,KAAK,GAAI,EAAE,GAAG,EAAE,CAAwB;AAC1F,IAAA,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE;AACzD,QAAA,IAAM,EAAE,GAAG,EAAG,CAAA,MAAA,CAAA,KAAK,CAAC,MAAM,KAAK,YAAY,GAAG,uBAAA,CAAA,MAAA,CAAwB,KAAK,CAAC,KAAK,KAAK,SAAS,GAAG,MAAM,GAAG,EAAE,CAAE,GAAG,qBAAqB,CAAE;AACzI,QAAA,IAAM,IAAE,GAAG,KAAK,CAAC,MAAM,KAAK,YAAY,GAAG,QAAQ,GAAG,EAAE;AACxD,QAAA,QACIA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;YAEE,KAAK,CAAC,KAAK,KAAK;AACd,kBAAEA,cAAA,CAAA,aAAA,CAAC,UAAU,EAAA,QAAA,CAAA,EAAA,EAAK,KAAK,CAAI;AAC3B,kBAAE,IAAI;AAEV,YAAAA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,oBAAqB,CAAA,MAAA,CAAA,EAAE,CAAE,EAAA,EAEvC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,UAAC,UAAU,EAAA;;gBAC1B,IAAM,GAAG,GAAG,CAAC,CAAA,EAAA,GAAA,KAAK,CAAC,IAAI,MAAI,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAA,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAEtE,gBAAA,QACEA,cAAC,CAAA,aAAA,CAAA,YAAY,IACX,QAAQ,EAAE,UAAC,CAAC,EAAA;AACV,wBAAA,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,IAAI,UAAU,CAAC,SAAS,KAAK,IAAI,EAAE;4BACjE,QAAQ,CAAC,CAAC,CAAC;;6BACN;AACL,4BAAA,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC;4BAC/B,QAAQ,CAAA,QAAA,CAAA,EAAA,EAAM,YAAY,CAAA,CAAG;;AAEjC,qBAAC,EACD,SAAS,EAAEC,OAAK,CAAC,aAAa,CAAC;AAC7B,wBAAA,gBAAgB,EAAE,KAAK;AACvB,wBAAA,SAAS,EAAE;AACZ,qBAAA,CAAC,EACF,KAAK,EAAE,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,EAClC,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,GAAG,EAAA,CACR;AAEN,aAAC,CAAC,CAEA,CACA;;IAGV,OAAOD,cAAA,CAAA,aAAA,CAAA,GAAA,EAAA,IAAA;;AAAqB,QAAA,KAAK,CAAC,EAAE;+BAAmC;AACzE;;;;"}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import '../../../node_modules/tslib/tslib.es6.js';
|
2
|
+
import React__default, { createContext } from 'react';
|
3
|
+
|
4
|
+
var FormContext = createContext({
|
5
|
+
form: { id: '', label: '' },
|
6
|
+
formValues: {},
|
7
|
+
setFormValues: function (v) { }
|
8
|
+
});
|
9
|
+
var useFormContext = function () {
|
10
|
+
var ctx = React__default.useContext(FormContext);
|
11
|
+
if (!ctx)
|
12
|
+
throw new Error('useFormSectionContext must be used within FormSectionContextProvider');
|
13
|
+
return ctx;
|
14
|
+
};
|
15
|
+
|
16
|
+
export { FormContext, useFormContext };
|
17
|
+
//# sourceMappingURL=FormContextProvider.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"FormContextProvider.js","sources":["../../../../../src/Form/Creator/FormContextProvider.tsx"],"sourcesContent":["import { type IFieldInputProps, type IForm, type IFormValues } from '@/Form/Creator/FormCreatorTypes'\nimport { type JSONSchema6 } from 'json-schema'\nimport React, { createContext, type ReactElement, type PropsWithChildren } from 'react'\n\nexport interface IFormContextValue {\n form: IForm\n formValues: IFormValues\n setFormValues: (v: IFormValues) => void\n inputOverrides?: Record<string, React.FC<IFieldInputProps>>\n urlNavigable?: boolean\n schema?: JSONSchema6\n}\n\nexport const FormContext = createContext<IFormContextValue>({\n form: { id: '', label: '' },\n formValues: {},\n setFormValues: (v) => {}\n})\n\nexport const FormContextProvider = ({ children, ...props }: IFormContextValue & PropsWithChildren): ReactElement => {\n return (\n <FormContext.Provider value={{ ...props }}>\n {children}\n </FormContext.Provider>\n )\n}\n\nexport const useFormContext = (): IFormContextValue => {\n const ctx = React.useContext(FormContext)\n if (!ctx) throw new Error('useFormSectionContext must be used within FormSectionContextProvider')\n return ctx\n}\n"],"names":["React"],"mappings":";;;AAaO,IAAM,WAAW,GAAG,aAAa,CAAoB;IAC1D,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;AAC3B,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,aAAa,EAAE,UAAC,CAAC,EAAA;AAClB,CAAA;AAUY,IAAA,cAAc,GAAG,YAAA;IAC5B,IAAM,GAAG,GAAGA,cAAK,CAAC,UAAU,CAAC,WAAW,CAAC;AACzC,IAAA,IAAI,CAAC,GAAG;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC;AACjG,IAAA,OAAO,GAAG;AACZ;;;;"}
|
@@ -1,17 +1,15 @@
|
|
1
1
|
import { __assign } from '../../../node_modules/tslib/tslib.es6.js';
|
2
|
+
import { FormContext } from './FormContextProvider.js';
|
2
3
|
import FormHeader from './FormHeader.js';
|
3
4
|
import FormSection from './FormSection.js';
|
4
|
-
import { copyAndAddPathToFields, calculateSectionStatus } from '../helpers.js';
|
5
|
-
import { utils as index$1 } from '../../../node_modules/@axdspub/axiom-ui-utilities/library/index.js';
|
5
|
+
import { copyAndAddPathToFields, getFieldsFromFormSection, getFieldValue, updateFormValuesWithFieldValueInPlace, calculateSectionStatus } from '../helpers.js';
|
6
|
+
import { Loader, utils as index$1 } from '../../../node_modules/@axdspub/axiom-ui-utilities/library/index.js';
|
6
7
|
import React__default, { useState, useEffect } from 'react';
|
7
8
|
|
8
9
|
var FormStatus = function (_a) {
|
9
10
|
var _b, _c, _d, _e;
|
10
11
|
var form = _a.form, formValueState = _a.formValueState;
|
11
|
-
var
|
12
|
-
useEffect(function () {
|
13
|
-
setStatus(calculateSectionStatus([form], formValueState));
|
14
|
-
}, [formValueState, form]);
|
12
|
+
var status = calculateSectionStatus([form], formValueState);
|
15
13
|
return (React__default.createElement(React__default.Fragment, null,
|
16
14
|
React__default.createElement("p", { className: 'text-xs mt-4' }, (_b = status[form.id]) === null || _b === void 0 ? void 0 :
|
17
15
|
_b.completed,
|
@@ -26,25 +24,44 @@ var FormStatus = function (_a) {
|
|
26
24
|
};
|
27
25
|
var FormCreator = function (_a) {
|
28
26
|
var _b;
|
29
|
-
var form = _a.form, formValueState = _a.formValueState, note = _a.note, error = _a.error, onChange = _a.onChange, className = _a.className, _c = _a.urlNavigable, urlNavigable = _c === void 0 ? true : _c, inputOverrides = _a.inputOverrides;
|
30
|
-
var
|
27
|
+
var form = _a.form, formValueState = _a.formValueState, note = _a.note, error = _a.error, onChange = _a.onChange, className = _a.className, _c = _a.urlNavigable, urlNavigable = _c === void 0 ? true : _c, inputOverrides = _a.inputOverrides, schema = _a.schema;
|
28
|
+
var activeForm = copyAndAddPathToFields(form);
|
29
|
+
activeForm.settings = __assign({ url_navigable: urlNavigable }, activeForm.settings);
|
30
|
+
var formValues = formValueState[0], setFormValues = formValueState[1];
|
31
|
+
var _d = useState(false), isReady = _d[0], setIsReady = _d[1];
|
31
32
|
useEffect(function () {
|
32
|
-
var
|
33
|
-
|
33
|
+
var formValuesCopy = structuredClone(formValues);
|
34
|
+
getFieldsFromFormSection(activeForm).forEach(function (field) {
|
35
|
+
if (field.defaultValue !== undefined && getFieldValue(field, formValues) === undefined) {
|
36
|
+
updateFormValuesWithFieldValueInPlace(field, field.defaultValue, formValuesCopy);
|
37
|
+
}
|
38
|
+
});
|
39
|
+
setFormValues(formValuesCopy);
|
40
|
+
setIsReady(true);
|
34
41
|
}, [form]);
|
35
|
-
|
36
|
-
|
42
|
+
console.log('isReady', isReady);
|
43
|
+
if (isReady) {
|
44
|
+
console.log('formValues', formValues);
|
37
45
|
}
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
46
|
+
return (React__default.createElement(React__default.Fragment, null, !isReady
|
47
|
+
? React__default.createElement(Loader, { className: 'pt-20' })
|
48
|
+
: React__default.createElement(FormContext.Provider, { value: {
|
49
|
+
form: activeForm,
|
50
|
+
formValues: formValues,
|
51
|
+
setFormValues: setFormValues,
|
52
|
+
inputOverrides: inputOverrides,
|
53
|
+
schema: schema,
|
54
|
+
urlNavigable: activeForm.settings.url_navigable
|
55
|
+
} },
|
56
|
+
React__default.createElement("div", { className: index$1.makeClassName({
|
57
|
+
className: (_b = activeForm === null || activeForm === void 0 ? void 0 : activeForm.settings) === null || _b === void 0 ? void 0 : _b.class_name,
|
58
|
+
defaultClassName: className
|
59
|
+
}) },
|
60
|
+
React__default.createElement(FormHeader, { form: activeForm, note: note, error: error }),
|
61
|
+
(activeForm === null || activeForm === void 0 ? void 0 : activeForm.fields) !== undefined && activeForm.fields.length > 0 && activeForm.pages === undefined && activeForm.wizard_steps === undefined
|
62
|
+
? React__default.createElement(FormStatus, { form: activeForm, formValueState: formValueState })
|
63
|
+
: '',
|
64
|
+
React__default.createElement(FormSection, { formSection: activeForm, onChange: onChange })))));
|
48
65
|
};
|
49
66
|
|
50
67
|
export { FormCreator as default };
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"FormCreator.js","sources":["../../../../../src/Form/Creator/FormCreator.tsx"],"sourcesContent":["import { type IFormValues, type IForm, type IValueChangeFn, type IFieldInputProps, type IFormValueState } from '@/Form/Creator/FormCreatorTypes'\nimport FormHeader from '@/Form/Creator/FormHeader'\nimport FormSection from '@/Form/Creator/FormSection'\nimport { calculateSectionStatus, copyAndAddPathToFields } from '@/Form/helpers'\nimport { utils } from '@axdspub/axiom-ui-utilities'\nimport { type
|
1
|
+
{"version":3,"file":"FormCreator.js","sources":["../../../../../src/Form/Creator/FormCreator.tsx"],"sourcesContent":["import { FormContext } from '@/Form/Creator/FormContextProvider'\nimport { type IFormValues, type IForm, type IValueChangeFn, type IFieldInputProps, type IFormValueState } from '@/Form/Creator/FormCreatorTypes'\nimport FormHeader from '@/Form/Creator/FormHeader'\nimport FormSection from '@/Form/Creator/FormSection'\nimport { calculateSectionStatus, copyAndAddPathToFields, getFieldsFromFormSection, getFieldValue, updateFormValuesWithFieldValueInPlace } from '@/Form/helpers'\nimport { Loader, utils } from '@axdspub/axiom-ui-utilities'\nimport { type JSONSchema6 } from 'json-schema'\nimport React, { useEffect, useState, type ReactElement } from 'react'\n\nexport interface IFormCreatorProps {\n form: IForm\n schema?: JSONSchema6\n formValueState: [IFormValues, (v: IFormValues) => void]\n note?: string\n error?: string\n onChange?: IValueChangeFn\n className?: string\n urlNavigable?: boolean\n inputOverrides?: Record<string, React.FC<IFieldInputProps>>\n}\n\nconst FormStatus = ({ form, formValueState }: { form: IForm, formValueState: IFormValueState }): ReactElement => {\n const status = calculateSectionStatus([form], formValueState)\n\n return (\n <>\n <p className='text-xs mt-4'>{status[form.id]?.completed} of {status[form.id]?.total} total</p>\n <p className='text-xs mt-2'>{status[form.id]?.requiredCompleted} of {status[form.id]?.requiredTotal} required</p>\n </>\n )\n}\n\nconst FormCreator = ({\n form,\n formValueState,\n note,\n error,\n onChange,\n className,\n urlNavigable = true,\n inputOverrides,\n schema\n}: IFormCreatorProps): ReactElement => {\n const activeForm = copyAndAddPathToFields(form)\n\n activeForm.settings = {\n url_navigable: urlNavigable,\n ...activeForm.settings\n }\n\n const [formValues, setFormValues] = formValueState\n const [isReady, setIsReady] = useState(false)\n useEffect(() => {\n const formValuesCopy = structuredClone(formValues)\n getFieldsFromFormSection(activeForm).forEach(field => {\n if (field.defaultValue !== undefined && getFieldValue(field, formValues) === undefined) {\n updateFormValuesWithFieldValueInPlace(field, field.defaultValue, formValuesCopy)\n }\n })\n setFormValues(formValuesCopy)\n setIsReady(true)\n }, [form])\n\n console.log('isReady', isReady)\n if (isReady) {\n console.log('formValues', formValues)\n }\n\n return (\n <>\n {\n !isReady\n ? <Loader className='pt-20' />\n : <FormContext.Provider value={{\n form: activeForm,\n formValues,\n setFormValues,\n inputOverrides,\n schema,\n urlNavigable: activeForm.settings.url_navigable\n }}>\n <div className={utils.makeClassName({\n className: activeForm?.settings?.class_name,\n defaultClassName: className\n })}>\n <FormHeader form={activeForm} note={note} error={error} />\n {\n activeForm?.fields !== undefined && activeForm.fields.length > 0 && activeForm.pages === undefined && activeForm.wizard_steps === undefined\n ? <FormStatus form={activeForm} formValueState={formValueState} />\n : ''\n }\n <FormSection\n formSection={activeForm}\n onChange={onChange}\n />\n </div>\n </FormContext.Provider>\n }\n </>\n )\n}\n\nexport type IFormSectionStatus = Record<string, {\n completed: number\n total: number\n requiredTotal: number\n requiredCompleted: number\n valid: boolean\n}>\n\nexport default FormCreator\n"],"names":["React","utils"],"mappings":";;;;;;;;AAqBA,IAAM,UAAU,GAAG,UAAC,EAA0E,EAAA;;QAAxE,IAAI,GAAA,EAAA,CAAA,IAAA,EAAE,cAAc,GAAA,EAAA,CAAA,cAAA;IACxC,IAAM,MAAM,GAAG,sBAAsB,CAAC,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC;AAE7D,IAAA,QACEA,cAAA,CAAA,aAAA,CAAAA,cAAA,CAAA,QAAA,EAAA,IAAA;QACAA,cAAG,CAAA,aAAA,CAAA,GAAA,EAAA,EAAA,SAAS,EAAC,cAAc,EAAE,EAAA,CAAA,EAAA,GAAA,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA;eAAE,SAAS;AAAM,YAAA,MAAA,EAAA,CAAA,EAAA,GAAA,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA;eAAE,KAAK;AAAW,YAAA,QAAA,CAAA;QAC9FA,cAAG,CAAA,aAAA,CAAA,GAAA,EAAA,EAAA,SAAS,EAAC,cAAc,EAAE,EAAA,CAAA,EAAA,GAAA,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA;eAAE,iBAAiB;AAAM,YAAA,MAAA,EAAA,CAAA,EAAA,GAAA,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA;eAAE,aAAa;AAAc,YAAA,WAAA,CAAA,CAC9G;AAEP,CAAC;AAEK,IAAA,WAAW,GAAG,UAAC,EAUD,EAAA;;AATlB,IAAA,IAAA,IAAI,GAAA,EAAA,CAAA,IAAA,EACJ,cAAc,GAAA,EAAA,CAAA,cAAA,EACd,IAAI,GAAA,EAAA,CAAA,IAAA,EACJ,KAAK,GAAA,EAAA,CAAA,KAAA,EACL,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,SAAS,GAAA,EAAA,CAAA,SAAA,EACT,EAAA,GAAA,EAAA,CAAA,YAAmB,EAAnB,YAAY,GAAG,EAAA,KAAA,MAAA,GAAA,IAAI,GAAA,EAAA,EACnB,cAAc,GAAA,EAAA,CAAA,cAAA,EACd,MAAM,GAAA,EAAA,CAAA,MAAA;AAEN,IAAA,IAAM,UAAU,GAAG,sBAAsB,CAAC,IAAI,CAAC;IAE/C,UAAU,CAAC,QAAQ,GAAA,QAAA,CAAA,EACjB,aAAa,EAAE,YAAY,EAAA,EACxB,UAAU,CAAC,QAAQ,CACvB;IAEM,IAAA,UAAU,GAAmB,cAAc,CAAA,CAAA,CAAjC,EAAE,aAAa,GAAI,cAAc,CAAA,CAAA,CAAlB;IAC1B,IAAA,EAAA,GAAwB,QAAQ,CAAC,KAAK,CAAC,EAAtC,OAAO,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,UAAU,GAAA,EAAA,CAAA,CAAA,CAAmB;AAC7C,IAAA,SAAS,CAAC,YAAA;AACR,QAAA,IAAM,cAAc,GAAG,eAAe,CAAC,UAAU,CAAC;AAClD,QAAA,wBAAwB,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAA,KAAK,EAAA;AAChD,YAAA,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,SAAS,EAAE;gBACtF,qCAAqC,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,cAAc,CAAC;;AAEpF,SAAC,CAAC;QACF,aAAa,CAAC,cAAc,CAAC;QAC7B,UAAU,CAAC,IAAI,CAAC;AAClB,KAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AAEV,IAAA,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC;IAC/B,IAAI,OAAO,EAAE;AACX,QAAA,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC;;IAGvC,QACEA,cAEE,CAAA,aAAA,CAAAA,cAAA,CAAA,QAAA,EAAA,IAAA,EAAA,CAAC;AACC,UAAEA,cAAC,CAAA,aAAA,CAAA,MAAM,IAAC,SAAS,EAAC,OAAO,EAAG;AAC9B,UAAEA,cAAC,CAAA,aAAA,CAAA,WAAW,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE;AAC7B,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,UAAU,EAAA,UAAA;AACV,gBAAA,aAAa,EAAA,aAAA;AACb,gBAAA,cAAc,EAAA,cAAA;AACd,gBAAA,MAAM,EAAA,MAAA;AACN,gBAAA,YAAY,EAAE,UAAU,CAAC,QAAQ,CAAC;AACnC,aAAA,EAAA;AACG,YAAAA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAEC,OAAK,CAAC,aAAa,CAAC;oBAClC,SAAS,EAAE,CAAA,EAAA,GAAA,UAAU,KAAV,IAAA,IAAA,UAAU,uBAAV,UAAU,CAAE,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,UAAU;AAC3C,oBAAA,gBAAgB,EAAE;iBACnB,CAAC,EAAA;AACE,gBAAAD,cAAA,CAAA,aAAA,CAAC,UAAU,EAAA,EAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAI,CAAA;AAExD,gBAAA,CAAA,UAAU,KAAA,IAAA,IAAV,UAAU,KAAA,MAAA,GAAA,MAAA,GAAV,UAAU,CAAE,MAAM,MAAK,SAAS,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,IAAI,UAAU,CAAC,YAAY,KAAK;sBAC9HA,cAAC,CAAA,aAAA,CAAA,UAAU,EAAC,EAAA,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAI;AAClE,sBAAE,EAAE;AAER,gBAAAA,cAAA,CAAA,aAAA,CAAC,WAAW,EAAA,EACV,WAAW,EAAE,UAAU,EACvB,QAAQ,EAAE,QAAQ,EAChB,CAAA,CACF,CACe,CAE1B;AAEP;;;;"}
|
@@ -2,11 +2,11 @@ import FieldCreator from '../Components/FieldCreator.js';
|
|
2
2
|
import React__default from 'react';
|
3
3
|
|
4
4
|
var FormFields = function (_a) {
|
5
|
-
var
|
5
|
+
var fields = _a.fields, onChange = _a.onChange, _b = _a.className, className = _b === void 0 ? 'flex flex-col gap-2' : _b;
|
6
6
|
return (React__default.createElement(React__default.Fragment, null, fields === undefined || fields.length < 1
|
7
7
|
? ''
|
8
8
|
: React__default.createElement("div", { className: className }, fields === null || fields === void 0 ? void 0 : fields.map(function (field) {
|
9
|
-
return (React__default.createElement(FieldCreator, { onChange: onChange,
|
9
|
+
return (React__default.createElement(FieldCreator, { onChange: onChange, field: field, key: field.id }));
|
10
10
|
}))));
|
11
11
|
};
|
12
12
|
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"FormFields.js","sources":["../../../../../src/Form/Creator/FormFields.tsx"],"sourcesContent":["import FieldCreator from '@/Form/Components/FieldCreator'\nimport { type
|
1
|
+
{"version":3,"file":"FormFields.js","sources":["../../../../../src/Form/Creator/FormFields.tsx"],"sourcesContent":["import FieldCreator from '@/Form/Components/FieldCreator'\nimport { type IFormField, type IValueChangeFn } from '@/Form/Creator/FormCreatorTypes'\nimport React, { type ReactElement } from 'react'\n\nconst FormFields = ({\n fields,\n onChange,\n className = 'flex flex-col gap-2'\n}: {\n fields?: IFormField[]\n onChange?: IValueChangeFn\n className?: string\n}): ReactElement => {\n return (\n <>\n {\n fields === undefined || fields.length < 1\n ? ''\n : <div className={className}>\n {\n fields?.map((field) => {\n return (\n <FieldCreator onChange={onChange} field={field} key={field.id} />\n )\n })\n }\n </div>\n }\n </>\n )\n}\n\nexport default FormFields\n"],"names":["React"],"mappings":";;;AAIM,IAAA,UAAU,GAAG,UAAC,EAQnB,EAAA;QAPC,MAAM,GAAA,EAAA,CAAA,MAAA,EACN,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,iBAAiC,EAAjC,SAAS,GAAG,EAAA,KAAA,MAAA,GAAA,qBAAqB,GAAA,EAAA;IAMjC,QACIA,cAEE,CAAA,aAAA,CAAAA,cAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG;AACtC,UAAE;AACF,UAAEA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,SAAS,EAEvB,EAAA,MAAM,KAAN,IAAA,IAAA,MAAM,uBAAN,MAAM,CAAE,GAAG,CAAC,UAAC,KAAK,EAAA;AAChB,YAAA,QACEA,cAAC,CAAA,aAAA,CAAA,YAAY,IAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,EAAA,CAAI;AAErE,SAAC,CAAC,CAEF,CAEL;AAET;;;;"}
|
@@ -5,7 +5,7 @@ import React__default from 'react';
|
|
5
5
|
|
6
6
|
var FormSection = function (_a) {
|
7
7
|
var _b, _c, _d;
|
8
|
-
var formSection = _a.formSection,
|
8
|
+
var formSection = _a.formSection, onChange = _a.onChange, _e = _a.level, level = _e === void 0 ? 0 : _e; _a.inputOverrides;
|
9
9
|
if (formSection === undefined) {
|
10
10
|
return React__default.createElement(React__default.Fragment, null);
|
11
11
|
}
|
@@ -32,10 +32,10 @@ var FormSection = function (_a) {
|
|
32
32
|
});
|
33
33
|
}
|
34
34
|
return (React__default.createElement(React__default.Fragment, null, hasWizardSteps
|
35
|
-
? React__default.createElement(WizardLayout, {
|
35
|
+
? React__default.createElement(WizardLayout, { sections: wizardSteps, onChange: onChange, level: level })
|
36
36
|
: hasPages
|
37
|
-
? React__default.createElement(PageLayout, {
|
38
|
-
: React__default.createElement(FormFields, {
|
37
|
+
? React__default.createElement(PageLayout, { sections: pages, onChange: onChange, level: level })
|
38
|
+
: React__default.createElement(FormFields, { fields: fields, onChange: onChange })));
|
39
39
|
};
|
40
40
|
|
41
41
|
export { FormSection as default };
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"FormSection.js","sources":["../../../../../src/Form/Creator/FormSection.tsx"],"sourcesContent":["import { type IFieldInputProps, type
|
1
|
+
{"version":3,"file":"FormSection.js","sources":["../../../../../src/Form/Creator/FormSection.tsx"],"sourcesContent":["import { type IFieldInputProps, type IFormSection, type IValueChangeFn } from '@/Form/Creator/FormCreatorTypes'\nimport FormFields from '@/Form/Creator/FormFields'\nimport PageLayout from '@/Form/Creator/Page'\nimport WizardLayout from '@/Form/Creator/Wizard'\nimport React, { type ReactElement } from 'react'\n\nconst FormSection = ({\n formSection,\n onChange,\n level = 0,\n inputOverrides\n}: {\n formSection?: IFormSection\n onChange?: IValueChangeFn\n level?: number\n inputOverrides?: Record<string, React.FC<IFieldInputProps>>\n\n}): ReactElement => {\n if (formSection === undefined) {\n return <></>\n }\n const pages = (formSection?.pages ?? []).slice()\n const fields = (formSection?.fields ?? []).slice()\n const wizardSteps = (formSection?.wizard_steps ?? []).slice()\n const hasPages = pages.length > 0\n const hasFields = fields.length > 0\n const hasWizardSteps = wizardSteps.length > 0\n if (hasPages && hasFields) {\n pages.unshift({\n id: 'default',\n label: 'Default',\n fields\n })\n }\n if ((hasPages || hasFields) && hasWizardSteps) {\n wizardSteps.unshift({\n id: 'default',\n order: -10,\n label: 'Default',\n pages,\n fields\n })\n }\n return (\n <>\n {\n hasWizardSteps\n ? <WizardLayout sections={wizardSteps} onChange={onChange} level={level} />\n\n : hasPages\n ? <PageLayout sections={pages} onChange={onChange} level={level} />\n : <FormFields fields={fields} onChange={onChange} />\n }\n </>\n )\n}\n\nexport default FormSection\n"],"names":["React"],"mappings":";;;;;AAMM,IAAA,WAAW,GAAG,UAAC,EAWpB,EAAA;;AAVC,IAAA,IAAA,WAAW,GAAA,EAAA,CAAA,WAAA,CAAA,CACX,QAAQ,GAAA,EAAA,CAAA,QAAA,CACR,CAAA,EAAA,GAAA,EAAA,CAAA,KAAS,CAAT,CAAA,KAAK,GAAG,EAAA,KAAA,MAAA,GAAA,CAAC,GAAA,EAAA,CAAA,CACK,EAAA,CAAA;AAQd,IAAA,IAAI,WAAW,KAAK,SAAS,EAAE;AAC7B,QAAA,OAAOA,2DAAK;;AAEd,IAAA,IAAM,KAAK,GAAG,CAAC,CAAA,EAAA,GAAA,WAAW,aAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,KAAK,MAAI,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAA,EAAE,EAAE,KAAK,EAAE;AAChD,IAAA,IAAM,MAAM,GAAG,CAAC,CAAA,EAAA,GAAA,WAAW,aAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,MAAM,MAAI,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAA,EAAE,EAAE,KAAK,EAAE;AAClD,IAAA,IAAM,WAAW,GAAG,CAAC,CAAA,EAAA,GAAA,WAAW,aAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,YAAY,MAAI,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAA,EAAE,EAAE,KAAK,EAAE;AAC7D,IAAA,IAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;AACjC,IAAA,IAAM,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC;AACnC,IAAA,IAAM,cAAc,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC;AAC7C,IAAA,IAAI,QAAQ,IAAI,SAAS,EAAE;QACzB,KAAK,CAAC,OAAO,CAAC;AACZ,YAAA,EAAE,EAAE,SAAS;AACb,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,MAAM,EAAA;AACP,SAAA,CAAC;;IAEJ,IAAI,CAAC,QAAQ,IAAI,SAAS,KAAK,cAAc,EAAE;QAC7C,WAAW,CAAC,OAAO,CAAC;AAClB,YAAA,EAAE,EAAE,SAAS;YACb,KAAK,EAAE,GAAG;AACV,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,KAAK,EAAA,KAAA;AACL,YAAA,MAAM,EAAA;AACP,SAAA,CAAC;;IAEJ,QACMA,4DAEI;AACE,UAAEA,cAAA,CAAA,aAAA,CAAC,YAAY,EAAA,EAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAI;AAE3E,UAAE;AACA,cAAEA,cAAA,CAAA,aAAA,CAAC,UAAU,EAAA,EAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAI;AACnE,cAAEA,cAAA,CAAA,aAAA,CAAC,UAAU,EAAA,EAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAI,CAAA,CAEzD;AAEX;;;;"}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import React__default, { createContext, useState, useMemo } from 'react';
|
2
|
+
|
3
|
+
var FormSectionContext = createContext({
|
4
|
+
path: '',
|
5
|
+
setActiveId: function () { }
|
6
|
+
});
|
7
|
+
var FormSectionContextProvider = function (props) {
|
8
|
+
var _a;
|
9
|
+
var _b = useState(props.id), activeId = _b[0], setActiveId = _b[1];
|
10
|
+
useMemo(function () {
|
11
|
+
setActiveId(props.id);
|
12
|
+
}, [props.id]);
|
13
|
+
return (React__default.createElement(FormSectionContext.Provider, { value: { activeId: activeId, setActiveId: setActiveId, path: (_a = props.path) !== null && _a !== void 0 ? _a : '' } }, props.children));
|
14
|
+
};
|
15
|
+
var useFormSectionContext = function () {
|
16
|
+
var ctx = React__default.useContext(FormSectionContext);
|
17
|
+
if (!ctx)
|
18
|
+
throw new Error('useFormSectionContext must be used within FormSectionContextProvider');
|
19
|
+
return ctx;
|
20
|
+
};
|
21
|
+
|
22
|
+
export { FormSectionContext, FormSectionContextProvider, useFormSectionContext };
|
23
|
+
//# sourceMappingURL=FormSectionContextProvider.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"FormSectionContextProvider.js","sources":["../../../../../src/Form/Creator/FormSectionContextProvider.tsx"],"sourcesContent":["import React, { createContext, type PropsWithChildren, type ReactElement, useMemo, useState } from 'react'\n\nexport interface IFormSectionContextValue {\n activeId?: string\n setActiveId: (v: string | undefined) => void\n path: string\n}\nexport const FormSectionContext = createContext<IFormSectionContextValue>({\n path: '',\n setActiveId: () => {}\n})\nexport const FormSectionContextProvider = (props: PropsWithChildren & { id?: string, path?: string }): ReactElement => {\n const [activeId, setActiveId] = useState<string | undefined>(props.id)\n useMemo(() => {\n setActiveId(props.id)\n }, [props.id])\n return (\n <FormSectionContext.Provider value={{ activeId, setActiveId, path: props.path ?? '' }}>\n {props.children}\n </FormSectionContext.Provider>\n )\n}\n\nexport const useFormSectionContext = (): IFormSectionContextValue => {\n const ctx = React.useContext(FormSectionContext)\n if (!ctx) throw new Error('useFormSectionContext must be used within FormSectionContextProvider')\n return ctx\n}\n"],"names":["React"],"mappings":";;AAOO,IAAM,kBAAkB,GAAG,aAAa,CAA2B;AACxE,IAAA,IAAI,EAAE,EAAE;IACR,WAAW,EAAE;AACd,CAAA;AACM,IAAM,0BAA0B,GAAG,UAAC,KAAyD,EAAA;;AAC5F,IAAA,IAAA,EAA0B,GAAA,QAAQ,CAAqB,KAAK,CAAC,EAAE,CAAC,EAA/D,QAAQ,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,WAAW,QAA0C;AACtE,IAAA,OAAO,CAAC,YAAA;AACN,QAAA,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;AACvB,KAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACd,IAAA,QACEA,cAAA,CAAA,aAAA,CAAC,kBAAkB,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,EAAE,QAAQ,EAAA,QAAA,EAAE,WAAW,EAAA,WAAA,EAAE,IAAI,EAAE,CAAA,EAAA,GAAA,KAAK,CAAC,IAAI,MAAI,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAA,EAAE,EAAE,EAAA,EAClF,KAAK,CAAC,QAAQ,CACa;AAElC;AAEa,IAAA,qBAAqB,GAAG,YAAA;IACnC,IAAM,GAAG,GAAGA,cAAK,CAAC,UAAU,CAAC,kBAAkB,CAAC;AAChD,IAAA,IAAI,CAAC,GAAG;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC;AACjG,IAAA,OAAO,GAAG;AACZ;;;;"}
|
@@ -1,23 +1,22 @@
|
|
1
|
+
import { FormSectionContextProvider, useFormSectionContext } from './FormSectionContextProvider.js';
|
1
2
|
import FormSection from './FormSection.js';
|
2
3
|
import NavElement from './NavElement.js';
|
3
4
|
import { calculateSectionStatus } from '../helpers.js';
|
4
5
|
import { InfoCircledIcon } from '../../../node_modules/@radix-ui/react-icons/dist/react-icons.esm.js';
|
5
|
-
import React__default
|
6
|
+
import React__default from 'react';
|
7
|
+
import { useFormContext } from './FormContextProvider.js';
|
6
8
|
import { useParams } from '../../../node_modules/react-router/dist/development/chunk-HA7DTUK3.js';
|
7
9
|
|
8
10
|
var PageNav = function (_a) {
|
9
|
-
var
|
10
|
-
var
|
11
|
-
var activeId =
|
12
|
-
var params = ((_b = useParams()['*']) !== null && _b !== void 0 ? _b : '').split('/');
|
13
|
-
var path = params.slice(0, level).join('/');
|
11
|
+
var sections = _a.sections; _a.level;
|
12
|
+
var urlNavigable = useFormContext().urlNavigable;
|
13
|
+
var _b = useFormSectionContext(), activeId = _b.activeId, setActiveId = _b.setActiveId, path = _b.path;
|
14
14
|
return (React__default.createElement("div", { className: 'flex flex-col w-[200px] border-slate-200' }, sections === null || sections === void 0 ? void 0 : sections.map(function (p) {
|
15
|
-
|
16
|
-
return (React__default.createElement(NavElement, { key: p.id, path: path, id: p.id, navigable: (_b = (_a = form === null || form === void 0 ? void 0 : form.settings) === null || _a === void 0 ? void 0 : _a.url_navigable) !== null && _b !== void 0 ? _b : true, onClick: function () { setActiveState(p.id); }, className: "border-none rounded-none bg-slate-100 text-sm font-normal text-left ".concat(activeId === p.id ? 'bg-slate-700 text-white' : 'hover:bg-slate-200') }, p.label));
|
15
|
+
return (React__default.createElement(NavElement, { key: p.id, path: path, id: p.id, navigable: urlNavigable !== null && urlNavigable !== void 0 ? urlNavigable : true, onClick: function () { setActiveId(p.id); }, className: "border-none rounded-none bg-slate-100 text-sm font-normal text-left ".concat(activeId === p.id ? 'bg-slate-700 text-white' : 'hover:bg-slate-200') }, p.label));
|
17
16
|
})));
|
18
17
|
};
|
19
18
|
var ActivePage = function (_a) {
|
20
|
-
|
19
|
+
var formSection = _a.formSection, onChange = _a.onChange, _b = _a.className, className = _b === void 0 ? 'flex flex-col gap-2 flex-grow' : _b, level = _a.level;
|
21
20
|
return (React__default.createElement("div", { className: className },
|
22
21
|
(formSection === null || formSection === void 0 ? void 0 : formSection.description) !== undefined
|
23
22
|
? React__default.createElement("p", { className: 'pb-4 border-b border-slate-200 text-sm' },
|
@@ -25,36 +24,26 @@ var ActivePage = function (_a) {
|
|
25
24
|
" ",
|
26
25
|
formSection.description)
|
27
26
|
: '',
|
28
|
-
React__default.createElement(FormSection, { formSection: formSection,
|
27
|
+
React__default.createElement(FormSection, { formSection: formSection, onChange: onChange, level: level + 1 })));
|
29
28
|
};
|
30
29
|
var PageLayout = function (_a) {
|
31
|
-
var _b, _c, _d, _e, _f, _g
|
32
|
-
var
|
30
|
+
var _b, _c, _d, _e, _f, _g;
|
31
|
+
var sections = _a.sections, onChange = _a.onChange; _a.inputOverrides; var _h = _a.ContentComponent, ContentComponent = _h === void 0 ? ActivePage : _h, _j = _a.NavComponent, NavComponent = _j === void 0 ? PageNav : _j, _k = _a.className, className = _k === void 0 ? 'flex flex-row gap-8' : _k, level = _a.level;
|
33
32
|
if (sections === undefined) {
|
34
33
|
return React__default.createElement(React__default.Fragment, null);
|
35
34
|
}
|
36
|
-
var
|
37
|
-
var
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
}
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
}, [activeIdState[0]]);
|
49
|
-
useEffect(function () {
|
50
|
-
var _a, _b, _c, _d;
|
51
|
-
if (((_a = form === null || form === void 0 ? void 0 : form.settings) === null || _a === void 0 ? void 0 : _a.url_navigable) === true && params[level] !== activeIdState[0]) {
|
52
|
-
activeIdState[1]((_d = (_b = params[level]) !== null && _b !== void 0 ? _b : (_c = sections[0]) === null || _c === void 0 ? void 0 : _c.id) !== null && _d !== void 0 ? _d : null);
|
53
|
-
}
|
54
|
-
}, [useParams()['*']]);
|
55
|
-
return (React__default.createElement("div", { className: className },
|
56
|
-
React__default.createElement(NavComponent, { form: form, sections: sections, sectionStatus: sectionStatus, activeIdState: activeIdState, level: level }),
|
57
|
-
React__default.createElement(ContentComponent, { activeIdState: activeIdState, formSection: formSection, inputOverrides: inputOverrides, form: form, formValueState: formValueState, onChange: onChange, sectionStatus: sectionStatus, level: level })));
|
35
|
+
var _l = useFormContext(), urlNavigable = _l.urlNavigable, setFormValues = _l.setFormValues, formValues = _l.formValues;
|
36
|
+
var params = ((_b = useParams()['*']) !== null && _b !== void 0 ? _b : '').split('/');
|
37
|
+
var path = params.slice(0, level).join('/');
|
38
|
+
var id = urlNavigable
|
39
|
+
? (params[level] && params[level] !== '') ? params[level] : ((_d = (_c = sections[0]) === null || _c === void 0 ? void 0 : _c.id) !== null && _d !== void 0 ? _d : null)
|
40
|
+
: (_f = (_e = sections[0]) === null || _e === void 0 ? void 0 : _e.id) !== null && _f !== void 0 ? _f : null;
|
41
|
+
var sectionStatus = calculateSectionStatus(sections, [formValues, setFormValues]);
|
42
|
+
var formSection = (_g = sections === null || sections === void 0 ? void 0 : sections.find(function (s) { return s.id === id; })) !== null && _g !== void 0 ? _g : sections === null || sections === void 0 ? void 0 : sections[0];
|
43
|
+
return (React__default.createElement(FormSectionContextProvider, { path: path, id: id },
|
44
|
+
React__default.createElement("div", { className: className },
|
45
|
+
React__default.createElement(NavComponent, { sections: sections, sectionStatus: sectionStatus, level: level }),
|
46
|
+
React__default.createElement(ContentComponent, { formSection: formSection, onChange: onChange, sectionStatus: sectionStatus, level: level }))));
|
58
47
|
};
|
59
48
|
|
60
49
|
export { ActivePage, PageLayout as default };
|