From b331fede05d4b95f952282b2703f9f12017c54dd Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Mon, 18 Aug 2025 13:28:18 +0000 Subject: [PATCH 01/45] added array and array> types functionality --- .../Samples/live_docs/classes_dictionary.js | 142 +++++++++++++++- public/Samples/live_docs/liveDocs_modal.js | 151 ++++++++++++++---- public/Samples/live_docs/liveDocs_plugin.js | 3 + 3 files changed, 264 insertions(+), 32 deletions(-) diff --git a/public/Samples/live_docs/classes_dictionary.js b/public/Samples/live_docs/classes_dictionary.js index 01a5e99..ef7458d 100644 --- a/public/Samples/live_docs/classes_dictionary.js +++ b/public/Samples/live_docs/classes_dictionary.js @@ -81,7 +81,7 @@ export const StructureMenu = [ value: 'getStructuresAtCoords', label: 'getStructuresAtCoords', params: [ - { name: 'coords', type: 'Array' }, + { name: 'coords', type: 'Array>' }, { name: 'featureTypes', type: 'Array' } ] }, @@ -114,7 +114,7 @@ export const StructureMenu = [ value: 'validateRoutesForConduit', label: 'validateRoutesForConduit', params: [ - { name: 'routes', type: 'Array' }, + { name: 'routes', type: 'Array' }, { name: 'conduit', type: 'MyWorldFeature' } ] }, @@ -601,7 +601,7 @@ export const CableMenu = [ value: 'truncateLine', label: 'truncateLine', params: [ - { name: 'coords', type: 'Array' }, + { name: 'coords', type: 'Array>' }, { name: 'startTruncDist', type: 'Number' }, { name: 'endTruncDist', type: 'Number' } ] @@ -639,4 +639,140 @@ export const CableMenu = [ } ] } +]; + +export const ConnectionMenu = [ + { + label: List Connections, + title: 'List Connections', + options: [ + { + value: 'listConnections', + label: 'List Connections' + } + ] + }, + { + label: Functions, + title: 'API Functions', + options: [ + { + value: 'freePinsOn', + label: 'freePinsOn', + params: [ + { name: 'feature', type: 'MyWorldFeature' }, + { name: 'tech', type: 'String' }, + { name: 'side', type: 'String' } + ] + }, + { + value: 'usedPinsOn', + label: 'usedPinsOn', + params: [ + { name: 'feature', type: 'MyWorldFeature' }, + { name: 'tech', type: 'String' }, + { name: 'side', type: 'String' } + ] + }, + { + value: 'highPinUsedOn', + label: 'highPinUsedOn', + params: [ + { name: 'feature', type: 'MyWorldFeature' }, + { name: 'tech', type: 'String' }, + { name: 'side', type: 'String' } + ] + }, + { + value: 'pinStateFor', + label: 'pinStateFor', + params: [ + { name: 'feature', type: 'MyWorldFeature' }, + { name: 'tech', type: 'String' }, + { name: 'side', type: 'String' } + ] + }, + { + value: 'pinCountFor', + label: 'pinCountFor', + params: [ + { name: 'feature', type: 'MyWorldFeature' }, + { name: 'tech', type: 'String' }, + { name: 'side', type: 'String' } + ] + }, + { + value: 'traceOut', + label: 'traceOut', + params: [ + { name: 'tech', type: 'String' }, + { name: 'feature', type: 'MyWorldFeature' }, + { name: 'pins', type: 'PinRange' }, + { name: 'direction', type: 'String' }, + { name: 'maxDist', type: 'Number' } + ] + }, + { + value: 'connect', + label: 'connect', + params: [ + { name: 'tech', type: 'String' }, + { name: 'fromFeature', type: 'MyWorldFeature' }, + { name: 'fromPins', type: 'PinRange' }, + { name: 'toFeature', type: 'MyWorldFeature' }, + { name: 'toPins', type: 'PinRange' }, + { name: 'housing', type: 'MyWorldFeature' }, + { name: 'ripple', type: 'Boolean' } + ] + }, + { + value: 'disconnect', + label: 'diconnect', + params: [ + { name: 'tech', type: 'String' }, + { name: 'feature', type: 'MyWorldFeature' }, + { name: 'pins', type: 'PinRange' }, + { name: 'ripple', type: 'Boolean' } + ] + }, + { + value: 'moveConns', + label: 'moveConns', + params: [ + { name: 'conns', type: 'Array' }, + { name: 'housingUrn', type: 'String' }, + { name: 'rootHousingUrn', type: 'String' } + ] + }, + { + value: 'switchConnSides', + label: 'switchConnSides', + params: [ + { name: 'feature', type: 'MyWorldFeature' } + ] + }, + { + value: 'techFor', + label: 'techFor', + params: [ + { name: 'feature', type: 'MyWorldFeature' }, + { name: 'side', type: 'String' } + ] + }, + { + value: 'fixConnectionSegments', + label: 'fixConnectionSegments', + params: [ + { name: 'conn', type: 'MyWorldFeature' } + ] + }, + { + value: 'isConnection', + label: 'isConnection', + params: [ + { name: 'feature', type: 'MyWorldFeature' } + ] + } + ] + } ]; \ No newline at end of file diff --git a/public/Samples/live_docs/liveDocs_modal.js b/public/Samples/live_docs/liveDocs_modal.js index 70c9a73..f28f24d 100644 --- a/public/Samples/live_docs/liveDocs_modal.js +++ b/public/Samples/live_docs/liveDocs_modal.js @@ -3,7 +3,8 @@ import React, { useState, useEffect, useRef } from 'react'; import { DraggableModal, Button, Input } from 'myWorld-client/react'; import { Alert, Space, Select } from 'antd'; import { useLocale } from 'myWorld-client/react'; -import { Classes, ConduitMenu, EquipmentMenu, StructureMenu, CableMenu } from './classes_dictionary'; +import { Classes, ConduitMenu, EquipmentMenu, StructureMenu, CableMenu, ConnectionMenu } from './classes_dictionary'; +import { param } from 'jquery'; export const LiveDocsModal = ({ open, plugin}) => { const { msg } = useLocale('LiveDocsPlugin'); @@ -15,17 +16,16 @@ export const LiveDocsModal = ({ open, plugin}) => { const [paramValues, setParamValues] = useState({}); // const [selectedFeature, setSelectedFeature] = useState(null); const [activeParam, setActiveParam] = useState(null); - - // const [selectedFeatureId, setSelectedFeatureId] = useState(null); - // const [disabled, setDisabled] = useState(true); - + const [rawInput, setRawInput] = useState({}); + const ApiFunctionMenus = { structureApi: StructureMenu, equipmentApi: EquipmentMenu, conduitApi: ConduitMenu, - cableApi: CableMenu + cableApi: CableMenu, + connectionApi: ConnectionMenu // TODO: Add others }; const apiInstances = { @@ -33,6 +33,7 @@ export const LiveDocsModal = ({ open, plugin}) => { equipmentApi: plugin.equipmentApi, conduitApi: plugin.conduitApi, cableApi: plugin.cableApi, + connectionApi: plugin.connectionApi // TODO: Add others }; @@ -46,33 +47,60 @@ export const LiveDocsModal = ({ open, plugin}) => { for (const group of menu) { const found = group.options.find(opt => opt.value === pickedFunction); if (found && found.params) { - // return Object.keys(found.params); - // return Object.entries(found.params).map(([type, name]) => ({ - // name, - // type - // })); return found.params; } - } return []; }; - // useEffect(() => { - // setOnFunctions(); - // updateFeatures(); - // }, []); + const allParamsFilled = React.useMemo(() => { + if (!pickedFunction || !pickedClass) return false; + const paramMeta = getSelectedFunctionParams(); + return paramMeta.every( + ({ name }) => paramValues[name] !== undefined && paramValues[name] !== '' + ); + }, [pickedFunction, pickedClass, paramValues]); + + // useEffect(() => { - useEffect(() => { + // // function listener() { + // // const feature = appRef.currentFeature; + // // if (feature && activeParam) { + // // console.log('Updating paramValues for activeParam:', activeParam, 'with feature:', feature); + // // setParamValues(prev => ({ ...prev, [activeParam]: feature })); + // // } + // // } + // appRef.on('currentFeature-changed', listener); + // appRef.on('currentFeatureSet-changed', listener); + // return () => { + // appRef.off('currentFeature-changed', listener); + // appRef.off('currentFeatureSet-changed', listener); + // }; + + // }, [activeParam]); + + useEffect(() => { function listener() { const feature = appRef.currentFeature; - console.log('Listener triggered, feature:', feature); if (feature && activeParam) { - console.log('Updating paramValues for activeParam:', activeParam, 'with feature:', feature); - setParamValues(prev => ({ ...prev, [activeParam]: feature })); + const paramMeta = getSelectedFunctionParams().find(p => p.name === activeParam); + const isArrayMywFeature = + paramMeta && paramMeta.type.toLowerCase() === 'array'; + + setParamValues(prev => { + if (isArrayMywFeature) { + const current = Array.isArray(prev[activeParam]) ? prev[activeParam] : []; + const alreadyExists = current.some(f => f.id === feature.id); + return alreadyExists + ? prev + : { ...prev, [activeParam]: [...current, feature] }; + } else { + return { ...prev, [activeParam]: feature }; + } + }); } } @@ -83,7 +111,6 @@ export const LiveDocsModal = ({ open, plugin}) => { appRef.off('currentFeature-changed', listener); appRef.off('currentFeatureSet-changed', listener); }; - }, [activeParam]); @@ -99,15 +126,10 @@ export const LiveDocsModal = ({ open, plugin}) => { setIsOpen(false); }; - // function setOnFunctions() { - // appRef.on('currentFeature-changed currentFeatureSet-changed', updateFeatures); - // } - const executeFunction = () => { console.log('Executing function:', pickedFunction, 'from class:', pickedClass); if (!pickedClass || !pickedFunction) return; - - + const apiInstance = apiInstances[pickedClass]; if (!apiInstance) { console.warn(`No API instance found for ${pickedClass}`); @@ -115,6 +137,7 @@ export const LiveDocsModal = ({ open, plugin}) => { } const paramMeta = getSelectedFunctionParams(); + const params = paramMeta.map(({ name }) => paramValues[name]); console.log('Executing function:', pickedFunction, 'with params:', params); @@ -136,6 +159,21 @@ export const LiveDocsModal = ({ open, plugin}) => { } }; + const parseNestedArray = (input) => { + if (!input || typeof input !== "string") return []; + + const safeInput = `[${input}]`; + try { + const parsed = JSON.parse(safeInput); + if (Array.isArray(parsed)) { + return parsed; + } + } catch (err) { + console.error("Invalid nested array format:", err); + } + return []; + }; + return ( { key="execute" onClick={executeFunction} type="primary" - disabled={!pickedFunction} + disabled={!allParamsFilled} > Execute @@ -242,8 +280,63 @@ export const LiveDocsModal = ({ open, plugin}) => { /> ); } - // TODO - add array types + if (type.toLowerCase() === 'array') { + return ( + { + const value = e.target.value; + setRawInput(prev => ({ ...prev, [name]: value })); + const arrayValue = value.split(',').map(item => item.trim()).filter(Boolean); + handleParamChange(name, arrayValue); + }} + /> + ); + } + if (type.toLowerCase() === 'array') { // work in progress + const features = Array.isArray(paramValues[name]) ? paramValues[name] : []; + return ( + f.id).join(', ')} + readOnly + onFocus={() => setActiveParam(name)} + /> + ); + } + if (type.toLowerCase().includes('array JSON.stringify(a)).join(', ') + : '' + } + onChange={(e) => { + const raw = e.target.value; + const nestedArray = parseNestedArray(raw); + handleParamChange(name, nestedArray); + }} + /> + ); + } // TODO - add object type + if (type.toLowerCase() === 'object') { + return ( + handleParamChange(name, e.target.value)} + /> + ); + } + // TODO - add transaction type return ( Date: Mon, 18 Aug 2025 20:54:15 +0000 Subject: [PATCH 02/45] added objects and transaction input functionality --- .../Samples/live_docs/classes_dictionary.js | 3 +- public/Samples/live_docs/liveDocs_modal.js | 83 +++++++++++++------ 2 files changed, 59 insertions(+), 27 deletions(-) diff --git a/public/Samples/live_docs/classes_dictionary.js b/public/Samples/live_docs/classes_dictionary.js index ef7458d..dfdd75c 100644 --- a/public/Samples/live_docs/classes_dictionary.js +++ b/public/Samples/live_docs/classes_dictionary.js @@ -313,7 +313,6 @@ export const ConduitMenu = [ } ]; - export const CableMenu = [ { label: List Cables, @@ -496,7 +495,7 @@ export const CableMenu = [ label: 'adjustMeasuredLengths', params: [ { name: 'trans', type: 'Transaction' }, - { name: 'segs', type: 'Array' }, + { name: 'segs', type: 'Array' }, { name: 'tickDist', type: 'Number' }, ] }, diff --git a/public/Samples/live_docs/liveDocs_modal.js b/public/Samples/live_docs/liveDocs_modal.js index f28f24d..9a83ad7 100644 --- a/public/Samples/live_docs/liveDocs_modal.js +++ b/public/Samples/live_docs/liveDocs_modal.js @@ -10,6 +10,7 @@ export const LiveDocsModal = ({ open, plugin}) => { const { msg } = useLocale('LiveDocsPlugin'); const [showIntro, setShowIntro] = useState(true); const [appRef] = useState(myw.app); + const [db] = useState(appRef.database); const [isOpen, setIsOpen] = useState(open); const [pickedClass, setPickedClass] = useState(''); const [pickedFunction, setPickedFunction] = useState(''); @@ -63,25 +64,6 @@ export const LiveDocsModal = ({ open, plugin}) => { }, [pickedFunction, pickedClass, paramValues]); - // useEffect(() => { - - // // function listener() { - // // const feature = appRef.currentFeature; - // // if (feature && activeParam) { - // // console.log('Updating paramValues for activeParam:', activeParam, 'with feature:', feature); - // // setParamValues(prev => ({ ...prev, [activeParam]: feature })); - // // } - // // } - // appRef.on('currentFeature-changed', listener); - // appRef.on('currentFeatureSet-changed', listener); - - // return () => { - // appRef.off('currentFeature-changed', listener); - // appRef.off('currentFeatureSet-changed', listener); - // }; - - // }, [activeParam]); - useEffect(() => { function listener() { const feature = appRef.currentFeature; @@ -113,6 +95,22 @@ export const LiveDocsModal = ({ open, plugin}) => { }; }, [activeParam]); + useEffect(() => { + if (pickedFunction) { + const paramMeta = getSelectedFunctionParams(); + paramMeta.forEach(({ name, type }) => { + if (type.toLowerCase() === "transaction" && !paramValues[name]) { + try { + const trans = new myw.Transaction(db); + setParamValues(prev => ({ ...prev, [name]: trans })); + } catch (err) { + console.error("Failed to create transaction:", err); + } + } + }); + } + }, [pickedFunction, paramValues, db]); + const handleParamChange = (paramName, value) => { setParamValues(prev => ({ ...prev, [paramName]: value })); @@ -295,7 +293,7 @@ export const LiveDocsModal = ({ open, plugin}) => { /> ); } - if (type.toLowerCase() === 'array') { // work in progress + if (type.toLowerCase() === 'array') { const features = Array.isArray(paramValues[name]) ? paramValues[name] : []; return ( { ); } // TODO - add object type - if (type.toLowerCase() === 'object') { + // if (type.toLowerCase() === 'object') { + // return ( + // handleParamChange(name, e.target.value)} + // /> + // ); + // } + if (type.toLowerCase() === 'object' || type.toLowerCase() === 'array' || type.toLowerCase() === 'array') { + const raw = rawInput[name] ?? JSON.stringify(paramValues[name] || {}, null, 2); + + return ( +
+ + { + const value = e.target.value; + setRawInput(prev => ({ ...prev, [name]: value })); + + try { + const parsed = JSON.parse(value); + handleParamChange(name, parsed); + } catch (err) { + console.error("Failed to read object:", err); + } + }} + autoSize={{ minRows: 6, maxRows: 12 }} + /> +
+ ); + } + + if (type.toLowerCase() === 'transaction') { return ( handleParamChange(name, e.target.value)} + placeholder={`${name} (auto-created transaction)`} + value={paramValues[name] ? '[Transaction Object]' : ''} + readOnly /> ); } - // TODO - add transaction type return ( Date: Mon, 18 Aug 2025 20:54:26 +0000 Subject: [PATCH 03/45] added objects and transaction input functionality --- public/Samples/live_docs/liveDocs_modal.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/public/Samples/live_docs/liveDocs_modal.js b/public/Samples/live_docs/liveDocs_modal.js index 9a83ad7..233fe65 100644 --- a/public/Samples/live_docs/liveDocs_modal.js +++ b/public/Samples/live_docs/liveDocs_modal.js @@ -15,12 +15,9 @@ export const LiveDocsModal = ({ open, plugin}) => { const [pickedClass, setPickedClass] = useState(''); const [pickedFunction, setPickedFunction] = useState(''); const [paramValues, setParamValues] = useState({}); - // const [selectedFeature, setSelectedFeature] = useState(null); const [activeParam, setActiveParam] = useState(null); const [rawInput, setRawInput] = useState({}); - - const ApiFunctionMenus = { structureApi: StructureMenu, equipmentApi: EquipmentMenu, @@ -63,7 +60,6 @@ export const LiveDocsModal = ({ open, plugin}) => { ); }, [pickedFunction, pickedClass, paramValues]); - useEffect(() => { function listener() { const feature = appRef.currentFeature; @@ -111,7 +107,6 @@ export const LiveDocsModal = ({ open, plugin}) => { } }, [pickedFunction, paramValues, db]); - const handleParamChange = (paramName, value) => { setParamValues(prev => ({ ...prev, [paramName]: value })); }; @@ -172,7 +167,6 @@ export const LiveDocsModal = ({ open, plugin}) => { return []; }; - return ( Date: Tue, 19 Aug 2025 18:01:41 +0000 Subject: [PATCH 04/45] added pinrange param, and cleaned code --- .../Samples/live_docs/classes_dictionary.js | 106 +++++- public/Samples/live_docs/liveDocs_modal.js | 309 ++++++++++-------- public/Samples/live_docs/liveDocs_plugin.js | 2 + 3 files changed, 261 insertions(+), 156 deletions(-) diff --git a/public/Samples/live_docs/classes_dictionary.js b/public/Samples/live_docs/classes_dictionary.js index dfdd75c..6a93b84 100644 --- a/public/Samples/live_docs/classes_dictionary.js +++ b/public/Samples/live_docs/classes_dictionary.js @@ -82,23 +82,23 @@ export const StructureMenu = [ label: 'getStructuresAtCoords', params: [ { name: 'coords', type: 'Array>' }, - { name: 'featureTypes', type: 'Array' } + { name: 'featureTypes', type: 'Array' } ] }, { value: 'getStructureAt', label: 'getStructureAt', params: [ - { name: 'coord', type: 'Array' }, - { name: 'featureTypes', type: 'Array' } + { name: 'coord', type: 'Array' }, + { name: 'featureTypes', type: 'Array' } ] }, { value: 'getStructuresAt', label: 'getStructuresAt', params: [ - { name: 'coord', type: 'Array' }, - { name: 'featureTypes', type: 'Array' }, + { name: 'coord', type: 'Array' }, + { name: 'featureTypes', type: 'Array' }, { name: 'tolerance', type: 'Number' } ] }, @@ -230,8 +230,8 @@ export const EquipmentMenu = [ { name: 'feature', type: 'MyWorldFeature' }, { name: 'direction', type: 'String' }, { name: 'side', type: 'String' }, - { name: 'sourceRanges', type: 'Array' }, - { name: 'portInfoToRipple', type: 'Array' } + { name: 'sourceRanges', type: 'Array' }, + { name: 'portInfoToRipple', type: 'Array' } ] } ] @@ -503,9 +503,9 @@ export const CableMenu = [ value: 'routeCable', label: 'routeCable', params: [ - { name: 'cableJson', type: 'Array' }, - { name: 'structures', type: 'Array' }, - { name: 'parentFeatures', type: 'Array' } + { name: 'cableJson', type: 'Array' }, + { name: 'parentFeatures', type: 'Array' } ] }, { @@ -534,13 +534,17 @@ export const CableMenu = [ }, { value: 'rootHousingUrnOf', - label: 'rootHousingUrnOf' - // TODO: params: what is the method of input for housing parameter? + label: 'rootHousingUrnOf', + params: [ + { name: 'housing', type: 'MyWorldFeature'} + ] }, { value: 'getLength', - label: 'getLength' - // TODO: params: what is the method of input for housing parameter? + label: 'getLength', + params: [ + { name: 'feature', type: 'GeoJSON'} + ] }, { value: 'segmentTypeForCable', @@ -738,7 +742,7 @@ export const ConnectionMenu = [ value: 'moveConns', label: 'moveConns', params: [ - { name: 'conns', type: 'Array' }, + { name: 'conns', type: 'Array' }, { name: 'housingUrn', type: 'String' }, { name: 'rootHousingUrn', type: 'String' } ] @@ -774,4 +778,76 @@ export const ConnectionMenu = [ } ] } +]; + +export const CircuitMenu = [ + { + label: List Circuits, + title: 'List Circuits', + options: [ + { + value: 'listCircuits', + label: 'List Circuits' + } + + ] + }, + { + label: Functions, + title: 'API Functions', + options: [ + { + value: 'traceLogicalCircuit', + label: 'traceLogicalCircuit', + params: [ + { name: 'circuit', type: 'MyWorldFeature' } + ] + }, + { + value: 'routeCircuit', + label: 'routeCircuit', + params: [ + { name: 'circuit', type: 'MyWorldFeature' } + ] + }, + { + value: 'unrouteCircuit', + label: 'unrouteCircuit', + params: [ + { name: 'circuit', type: 'MyWorldFeature' } + ] + }, + { + value: 'routeCircuits', + label: 'routeCircuits', + params: [ + { name: 'circuits', type: 'Array' } + ] + }, + { + value: 'isCircuitFeature', + lable: 'isCircuitFeature', + params:[ + { name: 'feature', type: 'MyWorldFeature' } + ] + + }, + { + value: 'getDetachedCircuitPath', + lable: 'getDetachedCircuitPath', + params: [ + { name: 'featureType', type: 'String' }, + { name: 'logicalCircuits', type: 'MyWorldFeature' } + ] + }, + { + value: 'updateCircuitStatus', + label: 'updateCircuitStatus', + params: [ + { name: 'circuit', type: 'MyWorldFeature' }, + { name: 'status', type: 'String' } + ] + } + ] + } ]; \ No newline at end of file diff --git a/public/Samples/live_docs/liveDocs_modal.js b/public/Samples/live_docs/liveDocs_modal.js index 233fe65..68d3fda 100644 --- a/public/Samples/live_docs/liveDocs_modal.js +++ b/public/Samples/live_docs/liveDocs_modal.js @@ -3,8 +3,9 @@ import React, { useState, useEffect, useRef } from 'react'; import { DraggableModal, Button, Input } from 'myWorld-client/react'; import { Alert, Space, Select } from 'antd'; import { useLocale } from 'myWorld-client/react'; -import { Classes, ConduitMenu, EquipmentMenu, StructureMenu, CableMenu, ConnectionMenu } from './classes_dictionary'; +import { Classes, ConduitMenu, EquipmentMenu, StructureMenu, CableMenu, ConnectionMenu, CircuitMenu } from './classes_dictionary'; import { param } from 'jquery'; +import PinRange from 'modules/comms/js/api/pinRange'; export const LiveDocsModal = ({ open, plugin}) => { const { msg } = useLocale('LiveDocsPlugin'); @@ -23,7 +24,8 @@ export const LiveDocsModal = ({ open, plugin}) => { equipmentApi: EquipmentMenu, conduitApi: ConduitMenu, cableApi: CableMenu, - connectionApi: ConnectionMenu + connectionApi: ConnectionMenu, + circuitApi: CircuitMenu // TODO: Add others }; const apiInstances = { @@ -31,11 +33,11 @@ export const LiveDocsModal = ({ open, plugin}) => { equipmentApi: plugin.equipmentApi, conduitApi: plugin.conduitApi, cableApi: plugin.cableApi, - connectionApi: plugin.connectionApi + connectionApi: plugin.connectionApi, + circuitApi: plugin.circuitApi // TODO: Add others }; - const getSelectedFunctionParams = () => { if (!pickedClass || !pickedFunction) return []; @@ -222,156 +224,181 @@ export const LiveDocsModal = ({ open, plugin}) => { options={ApiFunctionMenus[pickedClass].flatMap(group => group.options)} /> )} - {pickedFunction && getSelectedFunctionParams().map(({ name, type }) => { console.log('paramValues', paramValues); - if (type.toLowerCase() === 'myworldfeature') { - return ( - setActiveParam(name)} - /> - ); - } - if (type.toLowerCase() === 'boolean') { - return ( - handleParamChange(name, e.target.value)} - /> - ); - } - if (type.toLowerCase() === 'string') { - return ( - handleParamChange(name, e.target.value)} - /> - ); - } - if (type.toLowerCase() === 'array') { - return ( - { - const value = e.target.value; - setRawInput(prev => ({ ...prev, [name]: value })); - const arrayValue = value.split(',').map(item => item.trim()).filter(Boolean); - handleParamChange(name, arrayValue); - }} - /> - ); - } - if (type.toLowerCase() === 'array') { - const features = Array.isArray(paramValues[name]) ? paramValues[name] : []; - return ( - f.id).join(', ')} - readOnly - onFocus={() => setActiveParam(name)} - /> - ); - } - if (type.toLowerCase().includes('array JSON.stringify(a)).join(', ') - : '' - } - onChange={(e) => { - const raw = e.target.value; - const nestedArray = parseNestedArray(raw); - handleParamChange(name, nestedArray); - }} - /> - ); - } - // TODO - add object type - // if (type.toLowerCase() === 'object') { - // return ( - // handleParamChange(name, e.target.value)} - // /> - // ); - // } - if (type.toLowerCase() === 'object' || type.toLowerCase() === 'array' || type.toLowerCase() === 'array') { - const raw = rawInput[name] ?? JSON.stringify(paramValues[name] || {}, null, 2); - - return ( -
- - setActiveParam(name)} + /> + ); + } + if (type.toLowerCase() === 'boolean') { + return ( + handleParamChange(name, e.target.value)} + /> + ); + } + if (type.toLowerCase() === 'string') { + return ( + handleParamChange(name, e.target.value)} + /> + ); + } + if (type.toLowerCase() === 'array' || type.toLowerCase() === 'array') { + return ( + { const value = e.target.value; setRawInput(prev => ({ ...prev, [name]: value })); - - try { - const parsed = JSON.parse(value); - handleParamChange(name, parsed); - } catch (err) { - console.error("Failed to read object:", err); - } + const arrayValue = value.split(',').map(item => item.trim()).filter(Boolean); + handleParamChange(name, arrayValue); }} - autoSize={{ minRows: 6, maxRows: 12 }} /> -
- ); - } + ); + } + if (type.toLowerCase() === 'array') { + const features = Array.isArray(paramValues[name]) ? paramValues[name] : []; + return ( + f.id).join(', ')} + readOnly + onFocus={() => setActiveParam(name)} + /> + ); + } + if (type.toLowerCase().includes('array JSON.stringify(a)).join(', ') + : '' + } + onChange={(e) => { + const raw = e.target.value; + const nestedArray = parseNestedArray(raw); + handleParamChange(name, nestedArray); + }} + /> + ); + } + if (type.toLowerCase() === 'object' || type.toLowerCase() === 'array' || type.toLowerCase() === 'array') { + const raw = rawInput[name] ?? JSON.stringify(paramValues[name] || {}, null, 2); + + return ( +
+ + { + const value = e.target.value; + setRawInput(prev => ({ ...prev, [name]: value })); + + try { + const parsed = JSON.parse(value); + handleParamChange(name, parsed); + } catch (err) { + console.error("Failed to read object:", err); + } + }} + autoSize={{ minRows: 6, maxRows: 12 }} + /> +
+ ); + } + if (type.toLowerCase() === 'transaction') { + return ( + + ); + } + if (type.toLowerCase() === "pinrange") { + const pinRange = paramValues[name] || new PinRange("in", 1, 1); + + const update = (field, newValue) => { + const updated = { + side: pinRange.side, + low: pinRange.low, + high: pinRange.high, + [field]: newValue + }; + handleParamChange(name, new PinRange(updated.side, updated.low, updated.high)); + }; + + return ( +
+ + + update("low", Number(e.target.value))} + /> + + update("high", Number(e.target.value))} + /> +
+ ); + } - if (type.toLowerCase() === 'transaction') { return ( handleParamChange(name, e.target.value)} /> ); - } - return ( - handleParamChange(name, e.target.value)} - /> - ); })} diff --git a/public/Samples/live_docs/liveDocs_plugin.js b/public/Samples/live_docs/liveDocs_plugin.js index 98c6fec..2a4f69b 100644 --- a/public/Samples/live_docs/liveDocs_plugin.js +++ b/public/Samples/live_docs/liveDocs_plugin.js @@ -8,6 +8,7 @@ import EquipmentManagerPlugin from '../../../../comms/public/js/api/equipmentMan import CableManagerPlugin from '../../../../comms/public/js/api/cableManagerPlugin'; import ConduitManagerPlugin from '../../../../comms/public/js/api/conduitManagerPlugin'; import ConnectionManagerPlugin from '../../../../comms/public/js/api/connectionManagerPlugin'; +import CircuitManagerPlugin from '../../../../comms/public/js/api/circuitManagerPlugin'; export class LiveDocsPlugin extends Plugin { static { @@ -35,6 +36,7 @@ export class LiveDocsPlugin extends Plugin { this.cableApi = new CableManagerPlugin(owner, options); this.conduitApi = new ConduitManagerPlugin(owner, options); this.connectionApi = new ConnectionManagerPlugin(owner, options); + this.circuitApi = new CircuitManagerPlugin(owner, options); } From 36529ac90c95a4f4b31a5c6da7e4803fcb5ea148 Mon Sep 17 00:00:00 2001 From: Jay Santos Date: Wed, 20 Aug 2025 17:43:14 +0100 Subject: [PATCH 05/45] Small QoL changes - Function dropdown refresh when selecting a class - Showing the Feature name instead of ID --- public/Samples/live_docs/liveDocs_modal.js | 407 ++++++++++++--------- 1 file changed, 228 insertions(+), 179 deletions(-) diff --git a/public/Samples/live_docs/liveDocs_modal.js b/public/Samples/live_docs/liveDocs_modal.js index 68d3fda..fa57d92 100644 --- a/public/Samples/live_docs/liveDocs_modal.js +++ b/public/Samples/live_docs/liveDocs_modal.js @@ -3,11 +3,19 @@ import React, { useState, useEffect, useRef } from 'react'; import { DraggableModal, Button, Input } from 'myWorld-client/react'; import { Alert, Space, Select } from 'antd'; import { useLocale } from 'myWorld-client/react'; -import { Classes, ConduitMenu, EquipmentMenu, StructureMenu, CableMenu, ConnectionMenu, CircuitMenu } from './classes_dictionary'; +import { + Classes, + ConduitMenu, + EquipmentMenu, + StructureMenu, + CableMenu, + ConnectionMenu, + CircuitMenu +} from './classes_dictionary'; import { param } from 'jquery'; import PinRange from 'modules/comms/js/api/pinRange'; -export const LiveDocsModal = ({ open, plugin}) => { +export const LiveDocsModal = ({ open, plugin }) => { const { msg } = useLocale('LiveDocsPlugin'); const [showIntro, setShowIntro] = useState(true); const [appRef] = useState(myw.app); @@ -51,7 +59,6 @@ export const LiveDocsModal = ({ open, plugin}) => { } } return []; - }; const allParamsFilled = React.useMemo(() => { @@ -97,12 +104,12 @@ export const LiveDocsModal = ({ open, plugin}) => { if (pickedFunction) { const paramMeta = getSelectedFunctionParams(); paramMeta.forEach(({ name, type }) => { - if (type.toLowerCase() === "transaction" && !paramValues[name]) { + if (type.toLowerCase() === 'transaction' && !paramValues[name]) { try { const trans = new myw.Transaction(db); setParamValues(prev => ({ ...prev, [name]: trans })); } catch (err) { - console.error("Failed to create transaction:", err); + console.error('Failed to create transaction:', err); } } }); @@ -124,7 +131,7 @@ export const LiveDocsModal = ({ open, plugin}) => { const executeFunction = () => { console.log('Executing function:', pickedFunction, 'from class:', pickedClass); if (!pickedClass || !pickedFunction) return; - + const apiInstance = apiInstances[pickedClass]; if (!apiInstance) { console.warn(`No API instance found for ${pickedClass}`); @@ -149,14 +156,14 @@ export const LiveDocsModal = ({ open, plugin}) => { result.then(res => { console.log('Function result:', res); }); - } else { - console.log('Function result:', result); + } else { + console.log('Function result:', result); } }; - const parseNestedArray = (input) => { - if (!input || typeof input !== "string") return []; - + const parseNestedArray = input => { + if (!input || typeof input !== 'string') return []; + const safeInput = `[${input}]`; try { const parsed = JSON.parse(safeInput); @@ -164,7 +171,7 @@ export const LiveDocsModal = ({ open, plugin}) => { return parsed; } } catch (err) { - console.error("Invalid nested array format:", err); + console.error('Invalid nested array format:', err); } return []; }; @@ -216,190 +223,232 @@ export const LiveDocsModal = ({ open, plugin}) => { /> {pickedClass && ApiFunctionMenus[pickedClass] && ( setActiveParam(name)} - /> - ); - } - if (type.toLowerCase() === 'boolean') { - return ( - handleParamChange(name, e.target.value)} - /> - ); - } - if (type.toLowerCase() === 'string') { - return ( - handleParamChange(name, e.target.value)} - /> - ); - } - if (type.toLowerCase() === 'array' || type.toLowerCase() === 'array') { - return ( - { - const value = e.target.value; - setRawInput(prev => ({ ...prev, [name]: value })); - const arrayValue = value.split(',').map(item => item.trim()).filter(Boolean); - handleParamChange(name, arrayValue); - }} - /> - ); - } - if (type.toLowerCase() === 'array') { - const features = Array.isArray(paramValues[name]) ? paramValues[name] : []; - return ( - f.id).join(', ')} - readOnly - onFocus={() => setActiveParam(name)} - /> - ); - } - if (type.toLowerCase().includes('array JSON.stringify(a)).join(', ') - : '' - } - onChange={(e) => { - const raw = e.target.value; - const nestedArray = parseNestedArray(raw); - handleParamChange(name, nestedArray); - }} - /> - ); - } - if (type.toLowerCase() === 'object' || type.toLowerCase() === 'array' || type.toLowerCase() === 'array') { - const raw = rawInput[name] ?? JSON.stringify(paramValues[name] || {}, null, 2); - - return ( -
- - { + console.log('paramValues', paramValues); + if (type.toLowerCase() === 'myworldfeature') { + return ( + setActiveParam(name)} + /> + ); + } + if (type.toLowerCase() === 'boolean') { + return ( + handleParamChange(name, e.target.value)} + /> + ); + } + if (type.toLowerCase() === 'string') { + return ( + handleParamChange(name, e.target.value)} + /> + ); + } + if ( + type.toLowerCase() === 'array' || + type.toLowerCase() === 'array' + ) { + return ( + { const value = e.target.value; setRawInput(prev => ({ ...prev, [name]: value })); - - try { - const parsed = JSON.parse(value); - handleParamChange(name, parsed); - } catch (err) { - console.error("Failed to read object:", err); - } + const arrayValue = value + .split(',') + .map(item => item.trim()) + .filter(Boolean); + handleParamChange(name, arrayValue); }} - autoSize={{ minRows: 6, maxRows: 12 }} /> -
- ); - } - if (type.toLowerCase() === 'transaction') { + ); + } + if (type.toLowerCase() === 'array') { + const features = Array.isArray(paramValues[name]) + ? paramValues[name] + : []; + return ( + f.id).join(', ')} + readOnly + onFocus={() => setActiveParam(name)} + /> + ); + } + if (type.toLowerCase().includes('array JSON.stringify(a)) + .join(', ') + : '' + } + onChange={e => { + const raw = e.target.value; + const nestedArray = parseNestedArray(raw); + handleParamChange(name, nestedArray); + }} + /> + ); + } + if ( + type.toLowerCase() === 'object' || + type.toLowerCase() === 'array' || + type.toLowerCase() === 'array' + ) { + const raw = + rawInput[name] ?? + JSON.stringify(paramValues[name] || {}, null, 2); + + return ( +
+ + { + const value = e.target.value; + setRawInput(prev => ({ + ...prev, + [name]: value + })); + + try { + const parsed = JSON.parse(value); + handleParamChange(name, parsed); + } catch (err) { + console.error( + 'Failed to read object:', + err + ); + } + }} + autoSize={{ minRows: 6, maxRows: 12 }} + /> +
+ ); + } + if (type.toLowerCase() === 'transaction') { + return ( + + ); + } + if (type.toLowerCase() === 'pinrange') { + const pinRange = paramValues[name] || new PinRange('in', 1, 1); + + const update = (field, newValue) => { + const updated = { + side: pinRange.side, + low: pinRange.low, + high: pinRange.high, + [field]: newValue + }; + handleParamChange( + name, + new PinRange(updated.side, updated.low, updated.high) + ); + }; + + return ( +
+ + + + update('low', Number(e.target.value)) + } + /> + + + update('high', Number(e.target.value)) + } + /> +
+ ); + } + return ( handleParamChange(name, e.target.value)} /> ); - } - if (type.toLowerCase() === "pinrange") { - const pinRange = paramValues[name] || new PinRange("in", 1, 1); - - const update = (field, newValue) => { - const updated = { - side: pinRange.side, - low: pinRange.low, - high: pinRange.high, - [field]: newValue - }; - handleParamChange(name, new PinRange(updated.side, updated.low, updated.high)); - }; - - return ( -
- - - update("low", Number(e.target.value))} - /> - - update("high", Number(e.target.value))} - /> -
- ); - } - - return ( - handleParamChange(name, e.target.value)} - /> - ); - })} + })} )} From ecd3d5c965dfbda3cd3124fabf5daff775ed18ae Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Wed, 20 Aug 2025 17:35:50 +0000 Subject: [PATCH 06/45] Fixed transaction input to show message instead of input --- public/Samples/live_docs/liveDocs_modal.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/public/Samples/live_docs/liveDocs_modal.js b/public/Samples/live_docs/liveDocs_modal.js index fa57d92..9cc8ed5 100644 --- a/public/Samples/live_docs/liveDocs_modal.js +++ b/public/Samples/live_docs/liveDocs_modal.js @@ -46,6 +46,8 @@ export const LiveDocsModal = ({ open, plugin }) => { // TODO: Add others }; + const transactionMessage = "Transaction is automatically created for you. It will be committed after the function execution."; + const getSelectedFunctionParams = () => { if (!pickedClass || !pickedFunction) return []; @@ -245,7 +247,7 @@ export const LiveDocsModal = ({ open, plugin }) => { value={ paramValues[name]?.properties.name || paramValues[name]?.id || - 'N/A' + '' } readOnly onFocus={() => setActiveParam(name)} @@ -387,12 +389,10 @@ export const LiveDocsModal = ({ open, plugin }) => { } if (type.toLowerCase() === 'transaction') { return ( - +
+

{transactionMessage}

+ +
); } if (type.toLowerCase() === 'pinrange') { From 121083760c9a854eef230504857785dd3f295852 Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Wed, 20 Aug 2025 19:02:56 +0000 Subject: [PATCH 07/45] Implemented List... Function --- public/Samples/live_docs/liveDocs_modal.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/public/Samples/live_docs/liveDocs_modal.js b/public/Samples/live_docs/liveDocs_modal.js index 9cc8ed5..34070ec 100644 --- a/public/Samples/live_docs/liveDocs_modal.js +++ b/public/Samples/live_docs/liveDocs_modal.js @@ -46,7 +46,7 @@ export const LiveDocsModal = ({ open, plugin }) => { // TODO: Add others }; - const transactionMessage = "Transaction is automatically created for you. It will be committed after the function execution."; + const transactionMessage = "Transaction parameter is automatically created for you. It will be committed after the function execution."; const getSelectedFunctionParams = () => { if (!pickedClass || !pickedFunction) return []; @@ -132,6 +132,13 @@ export const LiveDocsModal = ({ open, plugin }) => { const executeFunction = () => { console.log('Executing function:', pickedFunction, 'from class:', pickedClass); + + if (pickedFunction.startsWith('list')){ + const feature = pickedFunction.slice(4); + console.log(myw.config[`mywcom.${feature.toLowerCase()}`]); + return; + } + if (!pickedClass || !pickedFunction) return; const apiInstance = apiInstances[pickedClass]; From 0f7630428296a3db70441b6100e5e27bfbde62db Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Wed, 20 Aug 2025 20:17:01 +0000 Subject: [PATCH 08/45] Created /tools and added parser script --- tools/extractDescriptions.js | 62 ++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 tools/extractDescriptions.js diff --git a/tools/extractDescriptions.js b/tools/extractDescriptions.js new file mode 100644 index 0000000..74edf09 --- /dev/null +++ b/tools/extractDescriptions.js @@ -0,0 +1,62 @@ +const fs = require('fs'); +const { parse } = require('comment-parser'); + +// file path +// const filePath = './comms/public/js/api/structureManagerPlugin.js'; + + +const args = process.argv.slice(2); +const filePath = args[0]; +const outputPath = args[1] || './functionDescriptions.json'; + +if (!fs.existsSync(filePath)) { + console.error(`Input file not found: ${filePath}`); + process.exit(1); +} + +const code = fs.readFileSync(filePath, 'utf8'); +const lines = code.split('\n'); +const comments = parse(code); + +const descriptions = {}; + +for (const block of comments) { + const commentLine = block.source[block.source.length - 1]?.number; + + // search next 5 lines for function definition + for (let offset = 1; offset <= 5; offset++) { + const checkLine = lines[commentLine + offset]?.trim(); + if (!checkLine) continue; + + // match function definition + const match = checkLine.match(/^(async\s+)?(\w+)\s*\(/); + + if (match) { + // extract async status and function name + const isAsync = !!match[1]; + const funcName = match[2]; + if (!descriptions[funcName]) { + let fullDesc = `Async: ${isAsync}\n\n${block.description.trim()}`; + + // add parameters if available + const params = block.tags.filter(tag => tag.tag === 'param'); + if (params.length > 0) { + fullDesc += '\n\nParameters:'; + for (const param of params) { + fullDesc += `\n- \`${param.name}\` (${param.type}): ${param.description}`; + } + } + + // add returns if available + const returns = block.tags.find(tag => tag.tag === 'returns'); + if (returns) { + fullDesc += `\n\nReturns:\n- (${returns.type}): ${returns.description}`; + } + descriptions[funcName] = fullDesc; + } + break; + } + } +} + +fs.writeFileSync(outputPath, JSON.stringify(descriptions, null, 2)); From e82fb73de05301a2d5f5a6e6aff35f3625f44b2a Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Thu, 21 Aug 2025 13:28:52 +0000 Subject: [PATCH 09/45] added parsed comments for structure api --- package-lock.json | 25 +++++ package.json | 15 +++ .../Samples/live_docs/classes_dictionary.js | 103 ++++++++++++++++++ public/Samples/live_docs/liveDocs_modal.js | 18 ++- .../live_docs/structureDescriptions.json | 15 +++ 5 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/Samples/live_docs/structureDescriptions.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..a730e6b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,25 @@ +{ + "name": "utils-devrel-samples", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "utils-devrel-samples", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "comment-parser": "^1.4.1" + } + }, + "node_modules/comment-parser": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", + "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", + "license": "MIT", + "engines": { + "node": ">= 12.0.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..27c6582 --- /dev/null +++ b/package.json @@ -0,0 +1,15 @@ +{ + "name": "utils-devrel-samples", + "version": "1.0.0", + "description": "This project provides several samples of functionalities for developers wanting to learn more about how to extend IQGeo applications.", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "comment-parser": "^1.4.1" + } +} diff --git a/public/Samples/live_docs/classes_dictionary.js b/public/Samples/live_docs/classes_dictionary.js index 6a93b84..dd1b08c 100644 --- a/public/Samples/live_docs/classes_dictionary.js +++ b/public/Samples/live_docs/classes_dictionary.js @@ -3,6 +3,7 @@ import { useLocale } from 'myWorld-client/react'; import { param } from 'jquery'; import { MyWorldFeature } from 'myWorld-base'; import { useParams } from 'react-router-dom'; +import structureDescriptions from './structureDescriptions.json'; const { msg } = useLocale('LiveDocsPlugin'); const title = msg('classTitle'); @@ -167,6 +168,108 @@ export const StructureMenu = [ } ]; +export const StructureDescriptions = { + listStructures: { + body: ( +
+

+ Pressing the button will list all features that are configured as a building in + the myw.config['mywcom.structures'] array. +

+
+ ), + function: 'onListStructures' + }, + + structContent: { + body: ( +
+

+ {structureDescriptions.structContent} +

+
+ ), + function: 'onStructContent' + }, + + getStructuresAtCoords: { + body: ( +
+

+ {structureDescriptions.getStructuresAtCoords} +

+
+ ), + function: 'onGetStructuresAtCoords' + }, + + getStructureAt: { + body: ( +
+

+ {structureDescriptions.getStructureAt} +

+
+ ), + function: 'onGetStructureAt' + }, + + getStructuresAt: { + body: ( +
+

{structureDescriptions.getStructuresAt}

+
+ ), + function: 'onGetStructuresAt' + }, + + routeContent: { + body: ( +
+

+ {structureDescriptions.routeContent} +

+
+ ), + + function: 'onRouteContent' + }, + + validateRoutesForConduit: { + body: ( +
+

+ {structureDescriptions.validateRoutesForConduit} +

+
+ ), + function: 'onValidateRoutesForConduit' + }, + + isStructure: { + body: ( +
+

+ {structureDescriptions.isStructure} +

+
+ ), + function: 'onIsStructure' + }, + + isRoute: { + body: ( +
+

+ {structureDescriptions.isRoute} +

+
+ ), + function: 'onIsRoute' + } +}; + + export const EquipmentMenu = [ { label: List Equipment, diff --git a/public/Samples/live_docs/liveDocs_modal.js b/public/Samples/live_docs/liveDocs_modal.js index 34070ec..c8c5227 100644 --- a/public/Samples/live_docs/liveDocs_modal.js +++ b/public/Samples/live_docs/liveDocs_modal.js @@ -10,7 +10,8 @@ import { StructureMenu, CableMenu, ConnectionMenu, - CircuitMenu + CircuitMenu, + StructureDescriptions } from './classes_dictionary'; import { param } from 'jquery'; import PinRange from 'modules/comms/js/api/pinRange'; @@ -45,6 +46,10 @@ export const LiveDocsModal = ({ open, plugin }) => { circuitApi: plugin.circuitApi // TODO: Add others }; + const ApiFunctionDictionaries = { + structureApi: StructureDescriptions + // TODO: Add others + }; const transactionMessage = "Transaction parameter is automatically created for you. It will be committed after the function execution."; @@ -184,6 +189,12 @@ export const LiveDocsModal = ({ open, plugin }) => { } return []; }; + const currentDictionary = pickedClass ? ApiFunctionDictionaries[pickedClass] : null; + const currentDescription = + pickedFunction && currentDictionary && currentDictionary[pickedFunction] + ? currentDictionary[pickedFunction].body + : null; + return ( { )} /> )} + {currentDescription && ( +
+ {currentDescription} +
+ )} {pickedFunction && getSelectedFunctionParams().map(({ name, type }) => { console.log('paramValues', paramValues); diff --git a/public/Samples/live_docs/structureDescriptions.json b/public/Samples/live_docs/structureDescriptions.json new file mode 100644 index 0000000..857a605 --- /dev/null +++ b/public/Samples/live_docs/structureDescriptions.json @@ -0,0 +1,15 @@ +{ + "fireFeatureEvents": "Async: false\n\nFires events to update the display and other parts of the application when features have changed. This triggers 'featureCollection-modified' events for relevant feature types: routes, equipment, conduits, cables, circuits, and a specific structure type.\n\nParameters:\n- `aspect` (String): - An aspect describing the context of the update.\n- `structFeatureType` (String): - Optional. A specific structure feature type to fire an event for if structures are in separate layers.", + "structContent": "Async: true\n\nThe equipment, cables etc housed within (or connected to) 'struct' Returns a StructContent", + "getStructuresAtCoords": "Async: true\n\nGets the structure at each given a coordinate array. For each coordinate, finds a structure at that location and returns an array containing the structure (or returns 0 if none found) for each coordinate.\n\nParameters:\n- `coords` (Array>): - An array of coordinates [lon, lat].\n- `featureTypes` (Array): - Optional list of feature types to limit the search.\n\nReturns:\n- (Promise>): promise that resolves to an array of structures.", + "getStructureAt": "Async: true\n\nGets a single structure at the given coordinate (or empty array if none found). If multiple structures are found, one is returned at random.\n\nParameters:\n- `coord` (Array): - The coordinate [lon, lat].\n- `featureTypes` (Array): - Optional list of feature types to limit the search.\n\nReturns:\n- (Promise): promise that resolves to the found structure or 0.", + "getStructuresAt": "Async: true\n\nGets all structures at the given coordinate (or empty array if none found). Searches within a specified tolerance radius (in meters) around the coordinate and returns all matching structures.\n\nParameters:\n- `coord` (Array): - The coordinate [lon, lat].\n- `featureTypes` (Array): - Optional list of feature types to limit the search.\n- `tolerance` (Number): - The search radius in meters.\n\nReturns:\n- (Promise>): promise that resolves to an array of found structures.", + "routeContent": "Async: true\n\nGets the cables and conduits housed within a route. Calls the comms API to retrieve the route content, then returns an instance of `RouteContents`.\n\nParameters:\n- `route` (MywFeature): - The route feature.\n- `includeProposed` (Boolean): - Whether to include proposed items.\n\nReturns:\n- (Promise): promise that resolves to the route content.", + "validateRoutesForConduit": "Async: false\n\nValidates whether the given routes can contain the specified conduit. Checks each route type against the housings configured for the conduit.\n\nParameters:\n- `routes` (Array): - The routes to validate.\n- `conduit` (MywFeature): - The conduit feature to check compatibility with.\n\nReturns:\n- (Boolean): if invalid routes exist; `false` if all are valid.", + "isStructure": "Async: false\n\nChecks if the specified feature is a structure. A feature is considered a structure if its type is configured in `myw.config['mywcom.structures']`.\n\nParameters:\n- `feature` (MywFeature): - The feature to check.\n\nReturns:\n- (Boolean): if the feature is a structure; otherwise, `false`.", + "isRoute": "Async: false\n\nChecks if the specified feature is a route. A feature is considered a route if its type is configured in `myw.config['mywcom.routes']`.\n\nParameters:\n- `feature` (MywFeature): - The feature to check.\n\nReturns:\n- (Boolean): if the feature is a route; otherwise, `false`.", + "isConduit": "Async: false\n\nChecks if the specified feature is a conduit type. A feature is considered a conduit if its type is configured in `myw.config['mywcom.conduit’]`.\n\nParameters:\n- `feature` (MywFeature): - The feature to check.\n\nReturns:\n- (Boolean): if the feature is a conduit; otherwise, `false`.", + "fixRouteEnds": "Async: true\n\nUpdates the start and end points of the given route so that it begins at struct1 and ends at struct2. This method recalculates the route geometry to connect to the new structures, splits the existing geometry at the nearest points, and adjusts the coordinates accordingly. It then updates the route and corresponding conduits to reflect the new geometry. **Note:** This is an advanced operation that may produce invalid data if used incorrectly. Use only for specialized data editing tasks.\n\nParameters:\n- `route` (MywFeature): - The route feature to update.\n- `struct1` (MywFeature): - The structure feature to set as the new starting point.\n- `struct2` (MywFeature): - The structure feature to set as the new ending point.\n\nReturns:\n- (Promise): promise resolving when the route and related features are updated.", + "houseInStructure": "Async: true\n\nTransfers equipment, routes, segments, and other contained items that overlap with the specified structure so that they are housed within it.\n\nParameters:\n- `toStructure` (MywFeature): - The structure that will receive the features.\n\nReturns:\n- (Promise): promise resolving when the operation is complete.", + "transferToStructure": "Async: true\n\nTransfers equipment, routes, segments, and other contained items from one structure to another. Moves all assets housed in one structure into another structure.\n\nParameters:\n- `fromStructure` (MywFeature): - The structure from which contents will be moved.\n- `toStructure` (MywFeature): - The structure that will receive the contents.\n\nReturns:\n- (Promise): promise resolving when the transfer is complete." +} \ No newline at end of file From f4e30b5c9b9a1cc567832815f0fecc6931b5558a Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Thu, 21 Aug 2025 15:39:30 +0000 Subject: [PATCH 10/45] added argv comments to parser --- public/Samples/live_docs/liveDocs_modal.js | 2 +- tools/extractDescriptions.js | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/public/Samples/live_docs/liveDocs_modal.js b/public/Samples/live_docs/liveDocs_modal.js index c8c5227..5add72b 100644 --- a/public/Samples/live_docs/liveDocs_modal.js +++ b/public/Samples/live_docs/liveDocs_modal.js @@ -189,13 +189,13 @@ export const LiveDocsModal = ({ open, plugin }) => { } return []; }; + const currentDictionary = pickedClass ? ApiFunctionDictionaries[pickedClass] : null; const currentDescription = pickedFunction && currentDictionary && currentDictionary[pickedFunction] ? currentDictionary[pickedFunction].body : null; - return ( Date: Thu, 21 Aug 2025 15:55:37 +0000 Subject: [PATCH 11/45] cleaned up description rendering --- public/Samples/live_docs/liveDocs_modal.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/public/Samples/live_docs/liveDocs_modal.js b/public/Samples/live_docs/liveDocs_modal.js index 5add72b..5377e36 100644 --- a/public/Samples/live_docs/liveDocs_modal.js +++ b/public/Samples/live_docs/liveDocs_modal.js @@ -255,9 +255,10 @@ export const LiveDocsModal = ({ open, plugin }) => { /> )} {currentDescription && ( -
- {currentDescription} -
+

+ {currentDescription} +

+ )} {pickedFunction && getSelectedFunctionParams().map(({ name, type }) => { From a89a61ef3a1301ae4b162342786353e3d5ce5923 Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Fri, 22 Aug 2025 14:20:06 +0000 Subject: [PATCH 12/45] Added .tsx file and began typing --- .../Samples/live_docs/classes_dictionary.js | 1 - public/Samples/live_docs/liveDocs_modal.js | 11 +- public/Samples/live_docs/liveDocs_modal.tsx | 536 ++++++++++++++++++ 3 files changed, 546 insertions(+), 2 deletions(-) create mode 100644 public/Samples/live_docs/liveDocs_modal.tsx diff --git a/public/Samples/live_docs/classes_dictionary.js b/public/Samples/live_docs/classes_dictionary.js index dd1b08c..2352d4e 100644 --- a/public/Samples/live_docs/classes_dictionary.js +++ b/public/Samples/live_docs/classes_dictionary.js @@ -269,7 +269,6 @@ export const StructureDescriptions = { } }; - export const EquipmentMenu = [ { label: List Equipment, diff --git a/public/Samples/live_docs/liveDocs_modal.js b/public/Samples/live_docs/liveDocs_modal.js index 5377e36..4259c3f 100644 --- a/public/Samples/live_docs/liveDocs_modal.js +++ b/public/Samples/live_docs/liveDocs_modal.js @@ -16,6 +16,16 @@ import { import { param } from 'jquery'; import PinRange from 'modules/comms/js/api/pinRange'; + +/* +converting to .tsx +1. add a props interface - live docs modals props +2. add types to all state variables +3. export with type annotations +4. ensure all imports are correct +*/ + + export const LiveDocsModal = ({ open, plugin }) => { const { msg } = useLocale('LiveDocsPlugin'); const [showIntro, setShowIntro] = useState(true); @@ -258,7 +268,6 @@ export const LiveDocsModal = ({ open, plugin }) => {

{currentDescription}

- )} {pickedFunction && getSelectedFunctionParams().map(({ name, type }) => { diff --git a/public/Samples/live_docs/liveDocs_modal.tsx b/public/Samples/live_docs/liveDocs_modal.tsx new file mode 100644 index 0000000..e9423c1 --- /dev/null +++ b/public/Samples/live_docs/liveDocs_modal.tsx @@ -0,0 +1,536 @@ +import myw from 'myWorld-client'; +import React, { useState, useEffect, useRef } from 'react'; +import { DraggableModal, Button, Input } from 'myWorld-client/react'; +import { Space, Select, InputRef } from 'antd'; +import { useLocale } from 'myWorld-client/react'; +import { + Classes, + ConduitMenu, + EquipmentMenu, + StructureMenu, + CableMenu, + ConnectionMenu, + CircuitMenu, + StructureDescriptions +} from './classes_dictionary'; +import PinRange from 'modules/comms/js/api/pinRange'; + + +/* +converting to .tsx +1. add a props interface - live docs modals props +2. add types to all state variables +3. export with type annotations +4. ensure all imports are correct +*/ + +interface LiveDocsModalProps { + open: boolean; + plugin: { + structureApi?: any; + equipmentApi?: any; + conduitApi?: any; + cableApi?: any; + connectionApi?: any; + circuitApi?: any; + [key: string]: any; // fallback + }; +} + +export const LiveDocsModal: React.FC = ({ open, plugin }) => { + const { msg } = useLocale('LiveDocsPlugin'); + const [showIntro, setShowIntro] = useState(true); + const [appRef] = useState(myw.app); + const [db] = useState(appRef.database); + const [isOpen, setIsOpen] = useState(open); + const [pickedClass, setPickedClass] = useState(''); + const [pickedFunction, setPickedFunction] = useState(''); + const [paramValues, setParamValues] = useState>({}); + const [activeParam, setActiveParam] = useState(null); + const [rawInput, setRawInput] = useState>({}); + const inputRef = useRef(null); + + interface ApiParam { + name: string; + type: string; + } + + interface ApiMenuOption { + value: string; + label: string | React.ReactNode; + params?: ApiParam[]; + } + + interface ApiMenuGroup { + label: string | React.ReactNode; + options: ApiMenuOption[]; + } + + type ApiFunctionMenu = ApiMenuGroup[]; + + type ApiKey = + | "structureApi" + | "equipmentApi" + | "conduitApi" + | "cableApi" + | "connectionApi" + | "circuitApi"; + + // Menus + const ApiFunctionMenus: Record = { + structureApi: StructureMenu, + equipmentApi: EquipmentMenu, + conduitApi: ConduitMenu, + cableApi: CableMenu, + connectionApi: ConnectionMenu, + circuitApi: CircuitMenu, + }; + + // API instances + const apiInstances: Record = { + structureApi: plugin.structureApi, + equipmentApi: plugin.equipmentApi, + conduitApi: plugin.conduitApi, + cableApi: plugin.cableApi, + connectionApi: plugin.connectionApi, + circuitApi: plugin.circuitApi, + }; + + // Dictionaries + type ApiFunctionDictionary = Record; + + const ApiFunctionDictionaries: Partial> = { + structureApi: StructureDescriptions, + }; + + + const transactionMessage = "Transaction parameter is automatically created for you. It will be committed after the function execution."; + + const getSelectedFunctionParams = () => { + if (!pickedClass || !pickedFunction) return []; + + const menu = ApiFunctionMenus[pickedClass]; + if (!menu) return []; + + for (const group of menu) { + const found = group.options.find(opt => opt.value === pickedFunction); + if (found && found.params) { + return found.params; + } + } + return []; + }; + + const allParamsFilled = React.useMemo(() => { + if (!pickedFunction || !pickedClass) return false; + const paramMeta = getSelectedFunctionParams(); + return paramMeta.every( + ({ name }) => paramValues[name] !== undefined && paramValues[name] !== '' + ); + }, [pickedFunction, pickedClass, paramValues]); + + useEffect(() => { + function listener() { + const feature = appRef.currentFeature; + if (feature && activeParam) { + const paramMeta = getSelectedFunctionParams().find(p => p.name === activeParam); + const isArrayMywFeature = + paramMeta && paramMeta.type.toLowerCase() === 'array'; + + setParamValues(prev => { + if (isArrayMywFeature) { + const current = Array.isArray(prev[activeParam]) ? prev[activeParam] : []; + const alreadyExists = current.some(f => f.id === feature.id); + return alreadyExists + ? prev + : { ...prev, [activeParam]: [...current, feature] }; + } else { + return { ...prev, [activeParam]: feature }; + } + }); + } + } + + appRef.on('currentFeature-changed', listener); + appRef.on('currentFeatureSet-changed', listener); + + return () => { + appRef.off('currentFeature-changed', listener); + appRef.off('currentFeatureSet-changed', listener); + }; + }, [activeParam]); + + useEffect(() => { + if (pickedFunction) { + const paramMeta = getSelectedFunctionParams(); + paramMeta.forEach(({ name, type }) => { + if (type.toLowerCase() === 'transaction' && !paramValues[name]) { + try { + const trans = new myw.Transaction(db); + setParamValues(prev => ({ ...prev, [name]: trans })); + } catch (err) { + console.error('Failed to create transaction:', err); + } + } + }); + } + }, [pickedFunction, paramValues, db]); + + const handleParamChange = (paramName: string, value: any) => { + setParamValues(prev => ({ ...prev, [paramName]: value })); + }; + + const hideIntro = () => { + setShowIntro(false); + }; + + const handleCancel = () => { + setIsOpen(false); + }; + + const executeFunction = () => { + console.log('Executing function:', pickedFunction, 'from class:', pickedClass); + + if (pickedFunction.startsWith('list')){ + const feature = pickedFunction.slice(4); + console.log(myw.config[`mywcom.${feature.toLowerCase()}`]); + return; + } + + if (!pickedClass || !pickedFunction) return; + + const apiInstance = apiInstances[pickedClass]; + if (!apiInstance) { + console.warn(`No API instance found for ${pickedClass}`); + return; + } + + const paramMeta = getSelectedFunctionParams(); + + const params = paramMeta.map(({ name }) => paramValues[name]); + console.log('Executing function:', pickedFunction, 'with params:', params); + + const fn = apiInstance[pickedFunction]; + + if (typeof fn !== 'function') { + console.warn(`${pickedFunction} is not a function on ${pickedClass}`); + return; + } + + const result = fn.apply(apiInstance, params); + + if (result && typeof result.then === 'function') { + result.then(res => { + console.log('Function result:', res); + }); + } else { + console.log('Function result:', result); + } + }; + + const parseNestedArray = (input: string): any[][] => { + if (!input || typeof input !== 'string') return []; + + const safeInput = `[${input}]`; + try { + const parsed = JSON.parse(safeInput); + if (Array.isArray(parsed)) { + return parsed; + } + } catch (err) { + console.error('Invalid nested array format:', err); + } + return []; + }; + + const currentDictionary = pickedClass ? ApiFunctionDictionaries[pickedClass] : null; + const currentDescription = + pickedFunction && currentDictionary && currentDictionary[pickedFunction] + ? currentDictionary[pickedFunction].body + : null; + + return ( + + OK + + ] + : [ + , + + ] + } + > + {showIntro ? ( +
{msg('description')}
+ ) : ( +
+ {' '} + +

{msg('classSelection')}

+ { + setPickedFunction(value); + setParamValues({}); + }} + options={ApiFunctionMenus[pickedClass].flatMap( + group => group.options + )} + /> + )} + {currentDescription && ( +

+ {currentDescription} +

+ )} + {pickedFunction && + getSelectedFunctionParams().map(({ name, type }) => { + console.log('paramValues', paramValues); + if (type.toLowerCase() === 'myworldfeature') { + return ( + setActiveParam(name)} + /> + ); + } + if (type.toLowerCase() === 'boolean') { + return ( + ) => + handleParamChange(name, e.target.value)} + /> + ); + } + if (type.toLowerCase() === 'string') { + return ( + ) => + handleParamChange(name, e.target.value)} + /> + ); + } + if ( + type.toLowerCase() === 'array' || + type.toLowerCase() === 'array' + ) { + return ( + ) => { + const value = e.target.value; + setRawInput(prev => ({ ...prev, [name]: value })); + const arrayValue = value + .split(',') + .map(item => item.trim()) + .filter(Boolean); + handleParamChange(name, arrayValue); + }} + /> + ); + } + if (type.toLowerCase() === 'array') { + const features = Array.isArray(paramValues[name]) + ? paramValues[name] + : []; + return ( + f.id).join(', ')} + readOnly + onFocus={() => setActiveParam(name)} + /> + ); + } + if (type.toLowerCase().includes('array JSON.stringify(a)) + .join(', ') + : '' + } + onChange={(e: React.ChangeEvent) => { + const raw = e.target.value; + const nestedArray = parseNestedArray(raw); + handleParamChange(name, nestedArray); + }} + /> + ); + } + if ( + type.toLowerCase() === 'object' || + type.toLowerCase() === 'array' || + type.toLowerCase() === 'array' + ) { + const raw = + rawInput[name] ?? + JSON.stringify(paramValues[name] || {}, null, 2); + + return ( +
+ + ) => { + const value = e.target.value; + setRawInput(prev => ({ + ...prev, + [name]: value + })); + + try { + const parsed = JSON.parse(value); + handleParamChange(name, parsed); + } catch (err) { + console.error( + 'Failed to read object:', + err + ); + } + }} + autoSize={{ minRows: 6, maxRows: 12 }} + /> +
+ ); + } + if (type.toLowerCase() === 'transaction') { + return ( +
+

{transactionMessage}

+ +
+ ); + } + if (type.toLowerCase() === 'pinrange') { + const pinRange = paramValues[name] || new PinRange('in', 1, 1); + + const update = (field, newValue) => { + const updated = { + side: pinRange.side, + low: pinRange.low, + high: pinRange.high, + [field]: newValue + }; + handleParamChange( + name, + new PinRange(updated.side, updated.low, updated.high) + ); + }; + + return ( +
+ + + ) => + update('low', Number(e.target.value)) + } + /> + + ) => + update('high', Number(e.target.value)) + } + /> +
+ ); + } + + return ( + ) => + handleParamChange(name, e.target.value)} + /> + ); + })} + + + )} + + ); +}; From ab87e5743207dc11adf78d923fb252f2a4697fd7 Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Fri, 22 Aug 2025 17:50:53 +0000 Subject: [PATCH 13/45] Testing feature checks --- .../Samples/live_docs/classes_dictionary.js | 28 +- public/Samples/live_docs/liveDocs_modal.js | 41 +- public/Samples/live_docs/liveDocs_modal.tsx | 536 ------------------ public/Samples/live_docs/liveDocs_plugin.js | 2 +- ...tions.json => structuresDescriptions.json} | 0 5 files changed, 40 insertions(+), 567 deletions(-) delete mode 100644 public/Samples/live_docs/liveDocs_modal.tsx rename public/Samples/live_docs/{structureDescriptions.json => structuresDescriptions.json} (100%) diff --git a/public/Samples/live_docs/classes_dictionary.js b/public/Samples/live_docs/classes_dictionary.js index 2352d4e..9e04c43 100644 --- a/public/Samples/live_docs/classes_dictionary.js +++ b/public/Samples/live_docs/classes_dictionary.js @@ -3,7 +3,7 @@ import { useLocale } from 'myWorld-client/react'; import { param } from 'jquery'; import { MyWorldFeature } from 'myWorld-base'; import { useParams } from 'react-router-dom'; -import structureDescriptions from './structureDescriptions.json'; +import structuresDescriptions from './structuresDescriptions.json'; const { msg } = useLocale('LiveDocsPlugin'); const title = msg('classTitle'); @@ -14,8 +14,8 @@ export const Classes = [ title: 'API Functions', options: [ { - value: 'structureApi', - label: 'Structure API' + value: 'structuresApi', + label: 'Structures API' }, { value: 'equipmentApi', @@ -53,7 +53,7 @@ export const Classes = [ } ]; -export const StructureMenu = [ +export const StructuresMenu = [ { label: List Structures, title: 'List Stuctures', @@ -73,7 +73,7 @@ export const StructureMenu = [ label: 'structContent', params: [ - { name: 'structure' , type: 'MyWorldFeature' }, + { name: 'structure' , type: 'MyWorldFeature'}, { name: 'includeProposed', type: 'Boolean' } ] @@ -168,7 +168,7 @@ export const StructureMenu = [ } ]; -export const StructureDescriptions = { +export const StructuresDescriptions = { listStructures: { body: (
@@ -185,7 +185,7 @@ export const StructureDescriptions = { body: (

- {structureDescriptions.structContent} + {structuresDescriptions.structContent}

), @@ -196,7 +196,7 @@ export const StructureDescriptions = { body: (

- {structureDescriptions.getStructuresAtCoords} + {structuresDescriptions.getStructuresAtCoords}

), @@ -207,7 +207,7 @@ export const StructureDescriptions = { body: (

- {structureDescriptions.getStructureAt} + {structuresDescriptions.getStructureAt}

), @@ -217,7 +217,7 @@ export const StructureDescriptions = { getStructuresAt: { body: (
-

{structureDescriptions.getStructuresAt}

+

{structuresDescriptions.getStructuresAt}

), function: 'onGetStructuresAt' @@ -227,7 +227,7 @@ export const StructureDescriptions = { body: (

- {structureDescriptions.routeContent} + {structuresDescriptions.routeContent}

), @@ -239,7 +239,7 @@ export const StructureDescriptions = { body: (

- {structureDescriptions.validateRoutesForConduit} + {structuresDescriptions.validateRoutesForConduit}

), @@ -250,7 +250,7 @@ export const StructureDescriptions = { body: (

- {structureDescriptions.isStructure} + {structuresDescriptions.isStructure}

), @@ -261,7 +261,7 @@ export const StructureDescriptions = { body: (

- {structureDescriptions.isRoute} + {structuresDescriptions.isRoute}

), diff --git a/public/Samples/live_docs/liveDocs_modal.js b/public/Samples/live_docs/liveDocs_modal.js index 4259c3f..72a8f7a 100644 --- a/public/Samples/live_docs/liveDocs_modal.js +++ b/public/Samples/live_docs/liveDocs_modal.js @@ -7,25 +7,15 @@ import { Classes, ConduitMenu, EquipmentMenu, - StructureMenu, + StructuresMenu, CableMenu, ConnectionMenu, CircuitMenu, - StructureDescriptions + StructuresDescriptions } from './classes_dictionary'; -import { param } from 'jquery'; import PinRange from 'modules/comms/js/api/pinRange'; -/* -converting to .tsx -1. add a props interface - live docs modals props -2. add types to all state variables -3. export with type annotations -4. ensure all imports are correct -*/ - - export const LiveDocsModal = ({ open, plugin }) => { const { msg } = useLocale('LiveDocsPlugin'); const [showIntro, setShowIntro] = useState(true); @@ -39,7 +29,7 @@ export const LiveDocsModal = ({ open, plugin }) => { const [rawInput, setRawInput] = useState({}); const ApiFunctionMenus = { - structureApi: StructureMenu, + structuresApi: StructuresMenu, equipmentApi: EquipmentMenu, conduitApi: ConduitMenu, cableApi: CableMenu, @@ -48,7 +38,7 @@ export const LiveDocsModal = ({ open, plugin }) => { // TODO: Add others }; const apiInstances = { - structureApi: plugin.structureApi, + structuresApi: plugin.structuresApi, equipmentApi: plugin.equipmentApi, conduitApi: plugin.conduitApi, cableApi: plugin.cableApi, @@ -57,7 +47,7 @@ export const LiveDocsModal = ({ open, plugin }) => { // TODO: Add others }; const ApiFunctionDictionaries = { - structureApi: StructureDescriptions + structuresApi: StructuresDescriptions // TODO: Add others }; @@ -153,6 +143,25 @@ export const LiveDocsModal = ({ open, plugin }) => { console.log(myw.config[`mywcom.${feature.toLowerCase()}`]); return; } + // const feature = pickedClass.slice(0,-3); + // console.log ("picked class", feature); + // const allowedFeatureTypes = myw.config[`mywcom.${feature.toLowerCase()}`]; + // console.log("allowed feature", allowedFeatureTypes); + const paramMeta = getSelectedFunctionParams(); + + // // 3. Validate all MyWorldFeature params + // const invalidParam = paramMeta.find(({ name, type }) => { + // if (type.toLowerCase() === 'myworldfeature') { + // const feature = paramValues[name]; + // return !feature || !allowedFeatureTypes.includes(feature.getType()); + // } + // return false; + // }); + + // if (invalidParam) { + // alert(`Selected feature type for "${invalidParam.name}" is not allowed for function "${pickedFunction}"`); + // return; + // } if (!pickedClass || !pickedFunction) return; @@ -162,7 +171,7 @@ export const LiveDocsModal = ({ open, plugin }) => { return; } - const paramMeta = getSelectedFunctionParams(); + const params = paramMeta.map(({ name }) => paramValues[name]); console.log('Executing function:', pickedFunction, 'with params:', params); diff --git a/public/Samples/live_docs/liveDocs_modal.tsx b/public/Samples/live_docs/liveDocs_modal.tsx deleted file mode 100644 index e9423c1..0000000 --- a/public/Samples/live_docs/liveDocs_modal.tsx +++ /dev/null @@ -1,536 +0,0 @@ -import myw from 'myWorld-client'; -import React, { useState, useEffect, useRef } from 'react'; -import { DraggableModal, Button, Input } from 'myWorld-client/react'; -import { Space, Select, InputRef } from 'antd'; -import { useLocale } from 'myWorld-client/react'; -import { - Classes, - ConduitMenu, - EquipmentMenu, - StructureMenu, - CableMenu, - ConnectionMenu, - CircuitMenu, - StructureDescriptions -} from './classes_dictionary'; -import PinRange from 'modules/comms/js/api/pinRange'; - - -/* -converting to .tsx -1. add a props interface - live docs modals props -2. add types to all state variables -3. export with type annotations -4. ensure all imports are correct -*/ - -interface LiveDocsModalProps { - open: boolean; - plugin: { - structureApi?: any; - equipmentApi?: any; - conduitApi?: any; - cableApi?: any; - connectionApi?: any; - circuitApi?: any; - [key: string]: any; // fallback - }; -} - -export const LiveDocsModal: React.FC = ({ open, plugin }) => { - const { msg } = useLocale('LiveDocsPlugin'); - const [showIntro, setShowIntro] = useState(true); - const [appRef] = useState(myw.app); - const [db] = useState(appRef.database); - const [isOpen, setIsOpen] = useState(open); - const [pickedClass, setPickedClass] = useState(''); - const [pickedFunction, setPickedFunction] = useState(''); - const [paramValues, setParamValues] = useState>({}); - const [activeParam, setActiveParam] = useState(null); - const [rawInput, setRawInput] = useState>({}); - const inputRef = useRef(null); - - interface ApiParam { - name: string; - type: string; - } - - interface ApiMenuOption { - value: string; - label: string | React.ReactNode; - params?: ApiParam[]; - } - - interface ApiMenuGroup { - label: string | React.ReactNode; - options: ApiMenuOption[]; - } - - type ApiFunctionMenu = ApiMenuGroup[]; - - type ApiKey = - | "structureApi" - | "equipmentApi" - | "conduitApi" - | "cableApi" - | "connectionApi" - | "circuitApi"; - - // Menus - const ApiFunctionMenus: Record = { - structureApi: StructureMenu, - equipmentApi: EquipmentMenu, - conduitApi: ConduitMenu, - cableApi: CableMenu, - connectionApi: ConnectionMenu, - circuitApi: CircuitMenu, - }; - - // API instances - const apiInstances: Record = { - structureApi: plugin.structureApi, - equipmentApi: plugin.equipmentApi, - conduitApi: plugin.conduitApi, - cableApi: plugin.cableApi, - connectionApi: plugin.connectionApi, - circuitApi: plugin.circuitApi, - }; - - // Dictionaries - type ApiFunctionDictionary = Record; - - const ApiFunctionDictionaries: Partial> = { - structureApi: StructureDescriptions, - }; - - - const transactionMessage = "Transaction parameter is automatically created for you. It will be committed after the function execution."; - - const getSelectedFunctionParams = () => { - if (!pickedClass || !pickedFunction) return []; - - const menu = ApiFunctionMenus[pickedClass]; - if (!menu) return []; - - for (const group of menu) { - const found = group.options.find(opt => opt.value === pickedFunction); - if (found && found.params) { - return found.params; - } - } - return []; - }; - - const allParamsFilled = React.useMemo(() => { - if (!pickedFunction || !pickedClass) return false; - const paramMeta = getSelectedFunctionParams(); - return paramMeta.every( - ({ name }) => paramValues[name] !== undefined && paramValues[name] !== '' - ); - }, [pickedFunction, pickedClass, paramValues]); - - useEffect(() => { - function listener() { - const feature = appRef.currentFeature; - if (feature && activeParam) { - const paramMeta = getSelectedFunctionParams().find(p => p.name === activeParam); - const isArrayMywFeature = - paramMeta && paramMeta.type.toLowerCase() === 'array'; - - setParamValues(prev => { - if (isArrayMywFeature) { - const current = Array.isArray(prev[activeParam]) ? prev[activeParam] : []; - const alreadyExists = current.some(f => f.id === feature.id); - return alreadyExists - ? prev - : { ...prev, [activeParam]: [...current, feature] }; - } else { - return { ...prev, [activeParam]: feature }; - } - }); - } - } - - appRef.on('currentFeature-changed', listener); - appRef.on('currentFeatureSet-changed', listener); - - return () => { - appRef.off('currentFeature-changed', listener); - appRef.off('currentFeatureSet-changed', listener); - }; - }, [activeParam]); - - useEffect(() => { - if (pickedFunction) { - const paramMeta = getSelectedFunctionParams(); - paramMeta.forEach(({ name, type }) => { - if (type.toLowerCase() === 'transaction' && !paramValues[name]) { - try { - const trans = new myw.Transaction(db); - setParamValues(prev => ({ ...prev, [name]: trans })); - } catch (err) { - console.error('Failed to create transaction:', err); - } - } - }); - } - }, [pickedFunction, paramValues, db]); - - const handleParamChange = (paramName: string, value: any) => { - setParamValues(prev => ({ ...prev, [paramName]: value })); - }; - - const hideIntro = () => { - setShowIntro(false); - }; - - const handleCancel = () => { - setIsOpen(false); - }; - - const executeFunction = () => { - console.log('Executing function:', pickedFunction, 'from class:', pickedClass); - - if (pickedFunction.startsWith('list')){ - const feature = pickedFunction.slice(4); - console.log(myw.config[`mywcom.${feature.toLowerCase()}`]); - return; - } - - if (!pickedClass || !pickedFunction) return; - - const apiInstance = apiInstances[pickedClass]; - if (!apiInstance) { - console.warn(`No API instance found for ${pickedClass}`); - return; - } - - const paramMeta = getSelectedFunctionParams(); - - const params = paramMeta.map(({ name }) => paramValues[name]); - console.log('Executing function:', pickedFunction, 'with params:', params); - - const fn = apiInstance[pickedFunction]; - - if (typeof fn !== 'function') { - console.warn(`${pickedFunction} is not a function on ${pickedClass}`); - return; - } - - const result = fn.apply(apiInstance, params); - - if (result && typeof result.then === 'function') { - result.then(res => { - console.log('Function result:', res); - }); - } else { - console.log('Function result:', result); - } - }; - - const parseNestedArray = (input: string): any[][] => { - if (!input || typeof input !== 'string') return []; - - const safeInput = `[${input}]`; - try { - const parsed = JSON.parse(safeInput); - if (Array.isArray(parsed)) { - return parsed; - } - } catch (err) { - console.error('Invalid nested array format:', err); - } - return []; - }; - - const currentDictionary = pickedClass ? ApiFunctionDictionaries[pickedClass] : null; - const currentDescription = - pickedFunction && currentDictionary && currentDictionary[pickedFunction] - ? currentDictionary[pickedFunction].body - : null; - - return ( - - OK - - ] - : [ - , - - ] - } - > - {showIntro ? ( -
{msg('description')}
- ) : ( -
- {' '} - -

{msg('classSelection')}

- { - setPickedFunction(value); - setParamValues({}); - }} - options={ApiFunctionMenus[pickedClass].flatMap( - group => group.options - )} - /> - )} - {currentDescription && ( -

- {currentDescription} -

- )} - {pickedFunction && - getSelectedFunctionParams().map(({ name, type }) => { - console.log('paramValues', paramValues); - if (type.toLowerCase() === 'myworldfeature') { - return ( - setActiveParam(name)} - /> - ); - } - if (type.toLowerCase() === 'boolean') { - return ( - ) => - handleParamChange(name, e.target.value)} - /> - ); - } - if (type.toLowerCase() === 'string') { - return ( - ) => - handleParamChange(name, e.target.value)} - /> - ); - } - if ( - type.toLowerCase() === 'array' || - type.toLowerCase() === 'array' - ) { - return ( - ) => { - const value = e.target.value; - setRawInput(prev => ({ ...prev, [name]: value })); - const arrayValue = value - .split(',') - .map(item => item.trim()) - .filter(Boolean); - handleParamChange(name, arrayValue); - }} - /> - ); - } - if (type.toLowerCase() === 'array') { - const features = Array.isArray(paramValues[name]) - ? paramValues[name] - : []; - return ( - f.id).join(', ')} - readOnly - onFocus={() => setActiveParam(name)} - /> - ); - } - if (type.toLowerCase().includes('array JSON.stringify(a)) - .join(', ') - : '' - } - onChange={(e: React.ChangeEvent) => { - const raw = e.target.value; - const nestedArray = parseNestedArray(raw); - handleParamChange(name, nestedArray); - }} - /> - ); - } - if ( - type.toLowerCase() === 'object' || - type.toLowerCase() === 'array' || - type.toLowerCase() === 'array' - ) { - const raw = - rawInput[name] ?? - JSON.stringify(paramValues[name] || {}, null, 2); - - return ( -
- - ) => { - const value = e.target.value; - setRawInput(prev => ({ - ...prev, - [name]: value - })); - - try { - const parsed = JSON.parse(value); - handleParamChange(name, parsed); - } catch (err) { - console.error( - 'Failed to read object:', - err - ); - } - }} - autoSize={{ minRows: 6, maxRows: 12 }} - /> -
- ); - } - if (type.toLowerCase() === 'transaction') { - return ( -
-

{transactionMessage}

- -
- ); - } - if (type.toLowerCase() === 'pinrange') { - const pinRange = paramValues[name] || new PinRange('in', 1, 1); - - const update = (field, newValue) => { - const updated = { - side: pinRange.side, - low: pinRange.low, - high: pinRange.high, - [field]: newValue - }; - handleParamChange( - name, - new PinRange(updated.side, updated.low, updated.high) - ); - }; - - return ( -
- - - ) => - update('low', Number(e.target.value)) - } - /> - - ) => - update('high', Number(e.target.value)) - } - /> -
- ); - } - - return ( - ) => - handleParamChange(name, e.target.value)} - /> - ); - })} - - - )} - - ); -}; diff --git a/public/Samples/live_docs/liveDocs_plugin.js b/public/Samples/live_docs/liveDocs_plugin.js index 2a4f69b..0eb2457 100644 --- a/public/Samples/live_docs/liveDocs_plugin.js +++ b/public/Samples/live_docs/liveDocs_plugin.js @@ -31,7 +31,7 @@ export class LiveDocsPlugin extends Plugin { constructor(owner, options) { super(owner, options); - this.structureApi = new StructureManagerPlugin(owner, options); + this.structuresApi = new StructureManagerPlugin(owner, options); this.equipmentApi = new EquipmentManagerPlugin(owner, options); this.cableApi = new CableManagerPlugin(owner, options); this.conduitApi = new ConduitManagerPlugin(owner, options); diff --git a/public/Samples/live_docs/structureDescriptions.json b/public/Samples/live_docs/structuresDescriptions.json similarity index 100% rename from public/Samples/live_docs/structureDescriptions.json rename to public/Samples/live_docs/structuresDescriptions.json From c5ce422d6868c88604f8a61fcc380475dac50d57 Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Mon, 25 Aug 2025 21:17:47 +0000 Subject: [PATCH 14/45] added tsx file --- .../Samples/live_docs/liveDocs_moda_tsl.tsx | 536 ++++++++++++++++++ 1 file changed, 536 insertions(+) create mode 100644 public/Samples/live_docs/liveDocs_moda_tsl.tsx diff --git a/public/Samples/live_docs/liveDocs_moda_tsl.tsx b/public/Samples/live_docs/liveDocs_moda_tsl.tsx new file mode 100644 index 0000000..91586a3 --- /dev/null +++ b/public/Samples/live_docs/liveDocs_moda_tsl.tsx @@ -0,0 +1,536 @@ +import myw from 'myWorld-client'; +import React, { useState, useEffect, useRef } from 'react'; +import { DraggableModal, Button, Input } from 'myWorld-client/react'; +import { Space, Select, InputRef } from 'antd'; +import { useLocale } from 'myWorld-client/react'; +import { + Classes, + ConduitMenu, + EquipmentMenu, + StructuresMenu, + CableMenu, + ConnectionMenu, + CircuitMenu, + StructuresDescriptions +} from './classes_dictionary'; +import PinRange from 'modules/comms/js/api/pinRange'; + + +/* +converting to .tsx +1. add a props interface - live docs modals props +2. add types to all state variables +3. export with type annotations +4. ensure all imports are correct +*/ + +interface LiveDocsModalProps { + open: boolean; + plugin: { + structureApi?: any; + equipmentApi?: any; + conduitApi?: any; + cableApi?: any; + connectionApi?: any; + circuitApi?: any; + [key: string]: any; // fallback + }; +} + +export const LiveDocsModal: React.FC = ({ open, plugin }) => { + const { msg } = useLocale('LiveDocsPlugin'); + const [showIntro, setShowIntro] = useState(true); + const [appRef] = useState(myw.app); + const [db] = useState(appRef.database); + const [isOpen, setIsOpen] = useState(open); + const [pickedClass, setPickedClass] = useState(''); + const [pickedFunction, setPickedFunction] = useState(''); + const [paramValues, setParamValues] = useState>({}); + const [activeParam, setActiveParam] = useState(null); + const [rawInput, setRawInput] = useState>({}); + const inputRef = useRef(null); + + interface ApiParam { + name: string; + type: string; + } + + interface ApiMenuOption { + value: string; + label: string | React.ReactNode; + params?: ApiParam[]; + } + + interface ApiMenuGroup { + label: string | React.ReactNode; + options: ApiMenuOption[]; + } + + type ApiFunctionMenu = ApiMenuGroup[]; + + type ApiKey = + | "structureApi" + | "equipmentApi" + | "conduitApi" + | "cableApi" + | "connectionApi" + | "circuitApi"; + + // Menus + const ApiFunctionMenus: Record = { + structuresApi: StructuresMenu, + equipmentApi: EquipmentMenu, + conduitApi: ConduitMenu, + cableApi: CableMenu, + connectionApi: ConnectionMenu, + circuitApi: CircuitMenu, + }; + + // API instances + const apiInstances: Record = { + structureApi: plugin.structureApi, + equipmentApi: plugin.equipmentApi, + conduitApi: plugin.conduitApi, + cableApi: plugin.cableApi, + connectionApi: plugin.connectionApi, + circuitApi: plugin.circuitApi, + }; + + // Dictionaries + type ApiFunctionDictionary = Record; + + const ApiFunctionDictionaries: Partial> = { + structuresApi: StructuresDescriptions, + }; + + + const transactionMessage = "Transaction parameter is automatically created for you. It will be committed after the function execution."; + + const getSelectedFunctionParams = () => { + if (!pickedClass || !pickedFunction) return []; + + const menu = ApiFunctionMenus[pickedClass]; + if (!menu) return []; + + for (const group of menu) { + const found = group.options.find(opt => opt.value === pickedFunction); + if (found && found.params) { + return found.params; + } + } + return []; + }; + + const allParamsFilled = React.useMemo(() => { + if (!pickedFunction || !pickedClass) return false; + const paramMeta = getSelectedFunctionParams(); + return paramMeta.every( + ({ name }) => paramValues[name] !== undefined && paramValues[name] !== '' + ); + }, [pickedFunction, pickedClass, paramValues]); + + useEffect(() => { + function listener() { + const feature = appRef.currentFeature; + if (feature && activeParam) { + const paramMeta = getSelectedFunctionParams().find(p => p.name === activeParam); + const isArrayMywFeature = + paramMeta && paramMeta.type.toLowerCase() === 'array'; + + setParamValues(prev => { + if (isArrayMywFeature) { + const current = Array.isArray(prev[activeParam]) ? prev[activeParam] : []; + const alreadyExists = current.some(f => f.id === feature.id); + return alreadyExists + ? prev + : { ...prev, [activeParam]: [...current, feature] }; + } else { + return { ...prev, [activeParam]: feature }; + } + }); + } + } + + appRef.on('currentFeature-changed', listener); + appRef.on('currentFeatureSet-changed', listener); + + return () => { + appRef.off('currentFeature-changed', listener); + appRef.off('currentFeatureSet-changed', listener); + }; + }, [activeParam]); + + useEffect(() => { + if (pickedFunction) { + const paramMeta = getSelectedFunctionParams(); + paramMeta.forEach(({ name, type }) => { + if (type.toLowerCase() === 'transaction' && !paramValues[name]) { + try { + const trans = new myw.Transaction(db); + setParamValues(prev => ({ ...prev, [name]: trans })); + } catch (err) { + console.error('Failed to create transaction:', err); + } + } + }); + } + }, [pickedFunction, paramValues, db]); + + const handleParamChange = (paramName: string, value: any) => { + setParamValues(prev => ({ ...prev, [paramName]: value })); + }; + + const hideIntro = () => { + setShowIntro(false); + }; + + const handleCancel = () => { + setIsOpen(false); + }; + + const executeFunction = () => { + console.log('Executing function:', pickedFunction, 'from class:', pickedClass); + + if (pickedFunction.startsWith('list')){ + const feature = pickedFunction.slice(4); + console.log(myw.config[`mywcom.${feature.toLowerCase()}`]); + return; + } + + if (!pickedClass || !pickedFunction) return; + + const apiInstance = apiInstances[pickedClass]; + if (!apiInstance) { + console.warn(`No API instance found for ${pickedClass}`); + return; + } + + const paramMeta = getSelectedFunctionParams(); + + const params = paramMeta.map(({ name }) => paramValues[name]); + console.log('Executing function:', pickedFunction, 'with params:', params); + + const fn = apiInstance[pickedFunction]; + + if (typeof fn !== 'function') { + console.warn(`${pickedFunction} is not a function on ${pickedClass}`); + return; + } + + const result = fn.apply(apiInstance, params); + + if (result && typeof result.then === 'function') { + result.then(res => { + console.log('Function result:', res); + }); + } else { + console.log('Function result:', result); + } + }; + + const parseNestedArray = (input: string): any[][] => { + if (!input || typeof input !== 'string') return []; + + const safeInput = `[${input}]`; + try { + const parsed = JSON.parse(safeInput); + if (Array.isArray(parsed)) { + return parsed; + } + } catch (err) { + console.error('Invalid nested array format:', err); + } + return []; + }; + + const currentDictionary = pickedClass ? ApiFunctionDictionaries[pickedClass] : null; + const currentDescription = + pickedFunction && currentDictionary && currentDictionary[pickedFunction] + ? currentDictionary[pickedFunction].body + : null; + + return ( + + OK + + ] + : [ + , + + ] + } + > + {showIntro ? ( +
{msg('description')}
+ ) : ( +
+ {' '} + +

{msg('classSelection')}

+ { + setPickedFunction(value); + setParamValues({}); + }} + options={ApiFunctionMenus[pickedClass].flatMap( + group => group.options + )} + /> + )} + {currentDescription && ( +

+ {currentDescription} +

+ )} + {pickedFunction && + getSelectedFunctionParams().map(({ name, type }) => { + console.log('paramValues', paramValues); + if (type.toLowerCase() === 'myworldfeature') { + return ( + setActiveParam(name)} + /> + ); + } + if (type.toLowerCase() === 'boolean') { + return ( + ) => + handleParamChange(name, e.target.value)} + /> + ); + } + if (type.toLowerCase() === 'string') { + return ( + ) => + handleParamChange(name, e.target.value)} + /> + ); + } + if ( + type.toLowerCase() === 'array' || + type.toLowerCase() === 'array' + ) { + return ( + ) => { + const value = e.target.value; + setRawInput(prev => ({ ...prev, [name]: value })); + const arrayValue = value + .split(',') + .map(item => item.trim()) + .filter(Boolean); + handleParamChange(name, arrayValue); + }} + /> + ); + } + if (type.toLowerCase() === 'array') { + const features = Array.isArray(paramValues[name]) + ? paramValues[name] + : []; + return ( + f.id).join(', ')} + readOnly + onFocus={() => setActiveParam(name)} + /> + ); + } + if (type.toLowerCase().includes('array JSON.stringify(a)) + .join(', ') + : '' + } + onChange={(e: React.ChangeEvent) => { + const raw = e.target.value; + const nestedArray = parseNestedArray(raw); + handleParamChange(name, nestedArray); + }} + /> + ); + } + if ( + type.toLowerCase() === 'object' || + type.toLowerCase() === 'array' || + type.toLowerCase() === 'array' + ) { + const raw = + rawInput[name] ?? + JSON.stringify(paramValues[name] || {}, null, 2); + + return ( +
+ + ) => { + const value = e.target.value; + setRawInput(prev => ({ + ...prev, + [name]: value + })); + + try { + const parsed = JSON.parse(value); + handleParamChange(name, parsed); + } catch (err) { + console.error( + 'Failed to read object:', + err + ); + } + }} + autoSize={{ minRows: 6, maxRows: 12 }} + /> +
+ ); + } + if (type.toLowerCase() === 'transaction') { + return ( +
+

{transactionMessage}

+ +
+ ); + } + if (type.toLowerCase() === 'pinrange') { + const pinRange = paramValues[name] || new PinRange('in', 1, 1); + + const update = (field, newValue) => { + const updated = { + side: pinRange.side, + low: pinRange.low, + high: pinRange.high, + [field]: newValue + }; + handleParamChange( + name, + new PinRange(updated.side, updated.low, updated.high) + ); + }; + + return ( +
+ + + ) => + update('low', Number(e.target.value)) + } + /> + + ) => + update('high', Number(e.target.value)) + } + /> +
+ ); + } + + return ( + ) => + handleParamChange(name, e.target.value)} + /> + ); + })} + + + )} + + ); +}; \ No newline at end of file From 9561ec2ae6d744b59ed91f8f0572bda4f8f07eeb Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Wed, 27 Aug 2025 13:46:33 +0000 Subject: [PATCH 15/45] testing out tsx typing --- .../Samples/live_docs/classes_dictionary.js | 26 +++++++++---------- public/Samples/live_docs/liveDocs_modal.js | 10 +++---- ...cs_moda_tsl.tsx => liveDocs_modal_tsx.tsx} | 8 +++--- public/Samples/live_docs/liveDocs_plugin.js | 4 +-- ...ptions.json => structureDescriptions.json} | 0 5 files changed, 24 insertions(+), 24 deletions(-) rename public/Samples/live_docs/{liveDocs_moda_tsl.tsx => liveDocs_modal_tsx.tsx} (99%) rename public/Samples/live_docs/{structuresDescriptions.json => structureDescriptions.json} (100%) diff --git a/public/Samples/live_docs/classes_dictionary.js b/public/Samples/live_docs/classes_dictionary.js index 9e04c43..0450b32 100644 --- a/public/Samples/live_docs/classes_dictionary.js +++ b/public/Samples/live_docs/classes_dictionary.js @@ -3,7 +3,7 @@ import { useLocale } from 'myWorld-client/react'; import { param } from 'jquery'; import { MyWorldFeature } from 'myWorld-base'; import { useParams } from 'react-router-dom'; -import structuresDescriptions from './structuresDescriptions.json'; +import structureDescriptions from './structureDescriptions.json'; const { msg } = useLocale('LiveDocsPlugin'); const title = msg('classTitle'); @@ -14,8 +14,8 @@ export const Classes = [ title: 'API Functions', options: [ { - value: 'structuresApi', - label: 'Structures API' + value: 'structureApi', + label: 'Structure API' }, { value: 'equipmentApi', @@ -53,7 +53,7 @@ export const Classes = [ } ]; -export const StructuresMenu = [ +export const StructureMenu = [ { label: List Structures, title: 'List Stuctures', @@ -168,7 +168,7 @@ export const StructuresMenu = [ } ]; -export const StructuresDescriptions = { +export const StructureDescriptions = { listStructures: { body: (
@@ -185,7 +185,7 @@ export const StructuresDescriptions = { body: (

- {structuresDescriptions.structContent} + {structureDescriptions.structContent}

), @@ -196,7 +196,7 @@ export const StructuresDescriptions = { body: (

- {structuresDescriptions.getStructuresAtCoords} + {structureDescriptions.getStructuresAtCoords}

), @@ -207,7 +207,7 @@ export const StructuresDescriptions = { body: (

- {structuresDescriptions.getStructureAt} + {structureDescriptions.getStructureAt}

), @@ -217,7 +217,7 @@ export const StructuresDescriptions = { getStructuresAt: { body: (
-

{structuresDescriptions.getStructuresAt}

+

{structureDescriptions.getStructuresAt}

), function: 'onGetStructuresAt' @@ -227,7 +227,7 @@ export const StructuresDescriptions = { body: (

- {structuresDescriptions.routeContent} + {structureDescriptions.routeContent}

), @@ -239,7 +239,7 @@ export const StructuresDescriptions = { body: (

- {structuresDescriptions.validateRoutesForConduit} + {structureDescriptions.validateRoutesForConduit}

), @@ -250,7 +250,7 @@ export const StructuresDescriptions = { body: (

- {structuresDescriptions.isStructure} + {structureDescriptions.isStructure}

), @@ -261,7 +261,7 @@ export const StructuresDescriptions = { body: (

- {structuresDescriptions.isRoute} + {structureDescriptions.isRoute}

), diff --git a/public/Samples/live_docs/liveDocs_modal.js b/public/Samples/live_docs/liveDocs_modal.js index 72a8f7a..9c449e9 100644 --- a/public/Samples/live_docs/liveDocs_modal.js +++ b/public/Samples/live_docs/liveDocs_modal.js @@ -7,11 +7,11 @@ import { Classes, ConduitMenu, EquipmentMenu, - StructuresMenu, + StructureMenu, CableMenu, ConnectionMenu, CircuitMenu, - StructuresDescriptions + StructureDescriptions } from './classes_dictionary'; import PinRange from 'modules/comms/js/api/pinRange'; @@ -29,7 +29,7 @@ export const LiveDocsModal = ({ open, plugin }) => { const [rawInput, setRawInput] = useState({}); const ApiFunctionMenus = { - structuresApi: StructuresMenu, + structureApi: StructureMenu, equipmentApi: EquipmentMenu, conduitApi: ConduitMenu, cableApi: CableMenu, @@ -38,7 +38,7 @@ export const LiveDocsModal = ({ open, plugin }) => { // TODO: Add others }; const apiInstances = { - structuresApi: plugin.structuresApi, + structureApi: plugin.structureApi, equipmentApi: plugin.equipmentApi, conduitApi: plugin.conduitApi, cableApi: plugin.cableApi, @@ -47,7 +47,7 @@ export const LiveDocsModal = ({ open, plugin }) => { // TODO: Add others }; const ApiFunctionDictionaries = { - structuresApi: StructuresDescriptions + structureApi: StructureDescriptions // TODO: Add others }; diff --git a/public/Samples/live_docs/liveDocs_moda_tsl.tsx b/public/Samples/live_docs/liveDocs_modal_tsx.tsx similarity index 99% rename from public/Samples/live_docs/liveDocs_moda_tsl.tsx rename to public/Samples/live_docs/liveDocs_modal_tsx.tsx index 91586a3..06efb82 100644 --- a/public/Samples/live_docs/liveDocs_moda_tsl.tsx +++ b/public/Samples/live_docs/liveDocs_modal_tsx.tsx @@ -7,11 +7,11 @@ import { Classes, ConduitMenu, EquipmentMenu, - StructuresMenu, + StructureMenu, CableMenu, ConnectionMenu, CircuitMenu, - StructuresDescriptions + StructureDescriptions } from './classes_dictionary'; import PinRange from 'modules/comms/js/api/pinRange'; @@ -78,7 +78,7 @@ export const LiveDocsModal: React.FC = ({ open, plugin }) => // Menus const ApiFunctionMenus: Record = { - structuresApi: StructuresMenu, + structureApi: StructureMenu, equipmentApi: EquipmentMenu, conduitApi: ConduitMenu, cableApi: CableMenu, @@ -100,7 +100,7 @@ export const LiveDocsModal: React.FC = ({ open, plugin }) => type ApiFunctionDictionary = Record; const ApiFunctionDictionaries: Partial> = { - structuresApi: StructuresDescriptions, + structureApi: StructureDescriptions, }; diff --git a/public/Samples/live_docs/liveDocs_plugin.js b/public/Samples/live_docs/liveDocs_plugin.js index 0eb2457..9707be2 100644 --- a/public/Samples/live_docs/liveDocs_plugin.js +++ b/public/Samples/live_docs/liveDocs_plugin.js @@ -1,7 +1,7 @@ import { Plugin, PluginButton } from 'myWorld-client'; import { renderReactNode } from 'myWorld-client/react'; // import liveDocsImage from '../../images/Customer_Connection_JavaScript_icon.svg'; -import { LiveDocsModal } from './liveDocs_modal'; +import { LiveDocsModal } from './liveDocs_modal_tsx'; import liveDocsImage from '../../images/Live_Docs_icon.svg'; import StructureManagerPlugin from '../../../../comms/public/js/api/structureManagerPlugin'; import EquipmentManagerPlugin from '../../../../comms/public/js/api/equipmentManagerPlugin'; @@ -31,7 +31,7 @@ export class LiveDocsPlugin extends Plugin { constructor(owner, options) { super(owner, options); - this.structuresApi = new StructureManagerPlugin(owner, options); + this.structureApi = new StructureManagerPlugin(owner, options); this.equipmentApi = new EquipmentManagerPlugin(owner, options); this.cableApi = new CableManagerPlugin(owner, options); this.conduitApi = new ConduitManagerPlugin(owner, options); diff --git a/public/Samples/live_docs/structuresDescriptions.json b/public/Samples/live_docs/structureDescriptions.json similarity index 100% rename from public/Samples/live_docs/structuresDescriptions.json rename to public/Samples/live_docs/structureDescriptions.json From 2dc2aac6c82d21c8bea9f508b9bfc09755337edf Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Thu, 28 Aug 2025 16:22:53 +0000 Subject: [PATCH 16/45] added all api dictionaries and moved json files to folder --- .../Samples/live_docs/classes_dictionary.js | 1055 +++++++++++++++-- .../cableDescriptions.json | 45 + .../circuitDescriptions.json | 8 + .../conduitDescriptions.json | 9 + .../connectionDescriptions.json | 16 + .../equipmentDescriptions.json | 10 + .../structureDescriptions.json | 0 public/Samples/live_docs/liveDocs_modal.js | 32 +- public/Samples/live_docs/liveDocs_plugin.js | 2 +- 9 files changed, 1046 insertions(+), 131 deletions(-) create mode 100644 public/Samples/live_docs/function_descriptions/cableDescriptions.json create mode 100644 public/Samples/live_docs/function_descriptions/circuitDescriptions.json create mode 100644 public/Samples/live_docs/function_descriptions/conduitDescriptions.json create mode 100644 public/Samples/live_docs/function_descriptions/connectionDescriptions.json create mode 100644 public/Samples/live_docs/function_descriptions/equipmentDescriptions.json rename public/Samples/live_docs/{ => function_descriptions}/structureDescriptions.json (100%) diff --git a/public/Samples/live_docs/classes_dictionary.js b/public/Samples/live_docs/classes_dictionary.js index 0450b32..c741e36 100644 --- a/public/Samples/live_docs/classes_dictionary.js +++ b/public/Samples/live_docs/classes_dictionary.js @@ -3,7 +3,12 @@ import { useLocale } from 'myWorld-client/react'; import { param } from 'jquery'; import { MyWorldFeature } from 'myWorld-base'; import { useParams } from 'react-router-dom'; -import structureDescriptions from './structureDescriptions.json'; +import structureDescriptions from './function_descriptions/structureDescriptions.json'; +import equipmentDescriptions from './function_descriptions/equipmentDescriptions.json'; +import conduitDescriptions from './function_descriptions/conduitDescriptions.json'; +import cableDescriptions from './function_descriptions/cableDescriptions.json'; +import connectionDescriptions from './function_descriptions/connectionDescriptions.json'; +import circuitDescriptions from './function_descriptions/circuitDescriptions.json'; const { msg } = useLocale('LiveDocsPlugin'); const title = msg('classTitle'); @@ -266,6 +271,46 @@ export const StructureDescriptions = {
), function: 'onIsRoute' + }, + isConduit: { + body: ( +
+

+ {structureDescriptions.isConduit} +

+
+ ), + function: 'onIsConduit' + }, + fixRouteEnds: { + body: ( +
+

+ {structureDescriptions.fixRouteEnds} +

+
+ ), + function: 'onFixRouteEnds' + }, + houseInStructure: { + body: ( +
+

+ {structureDescriptions.houseInStructure} +

+
+ ), + function: 'onHouseInStructure' + }, + transferToStructure: { + body: ( +
+

+ {structureDescriptions.transferToStructure} +

+
+ ), + function: 'onTransferToStructure' } }; @@ -340,6 +385,90 @@ export const EquipmentMenu = [ } ]; +export const EquipmentDescriptions = { + listEquipment: { + body: ( +
+

+ Pressing the button will list all features that are configured as equipment in + the myw.config['mywcom.equipment'] array. +

+
+ ), + function: 'onListEquipment' + }, + isEquipment: { + body: ( +
+

+ {equipmentDescriptions.isEquipment} +

+
+ ), + function: 'onIsEquipment' + }, + moveAssembly: { + body: ( +
+

+ {equipmentDescriptions.moveAssembly} +

+
+ ), + function: 'onMoveAssembly' + }, + copyAssembly: { + body: ( +
+

+ {equipmentDescriptions.copyAssembly} +

+
+ ), + function: 'onCopyAssembly' + }, + connectionsIn: { + body: ( +
+

+ {equipmentDescriptions.connectionsIn} +

+
+ ), + function: 'onConnectionsIn' + }, + connectionsOf: { + body: ( +
+

+ {equipmentDescriptions.connectionsOf} +

+
+ ), + function: 'onConnectionsOf' + }, + equipmentWithPortInfo: { + body: ( +
+

+ {equipmentDescriptions.equipmentWithPortInfo} +

+
+ ), + function: 'onEquipmentWithPortInfo' + }, + ripplePortInfo: { + body: ( +
+

+ {equipmentDescriptions.ripplePortInfo} +

+
+ ), + function: 'onRipplePortInfo' + } +}; + export const ConduitMenu = [ { label: List Conduits, @@ -415,6 +544,90 @@ export const ConduitMenu = [ } ]; +export const ConduitDescriptions = { + listConduits: { + body: ( +
+

+ Pressing the button will list all features that are configured as equipment in + the myw.config['mywcom.equipment'] array. +

+
+ ), + function: 'onListConduits' + }, + disconnectConduit: { + body: ( +
+

+ {conduitDescriptions.disconnectConduit} +

+
+ ), + function: 'onDisconnectConduit' + }, + connectConduits: { + body: ( +
+

+ {conduitDescriptions.connectConduits} +

+
+ ), + function: 'onConnectConduits' + }, + routeNestedConduits: { + body: ( +
+

+ {conduitDescriptions.routeNestedConduits} +

+
+ ), + function: 'onRouteNestedConduits' + }, + moveInto: { + body: ( +
+

+ {conduitDescriptions.moveInto} +

+
+ ), + function: 'onMoveInto' + }, + isContinuousConduitType: { + body: ( +
+

+ {conduitDescriptions.isContinuousConduitType} +

+
+ ), + function: 'onIsContinuousConduitType' + }, + continuousPhysicalConduits: { + body: ( +
+

+ {conduitDescriptions.continuousPhysicalConduits} +

+
+ ), + function: 'onContinuousPhysicalConduits' + }, + deleteContinuousPhysicalConduits: { + body: ( +
+

+ {conduitDescriptions.deleteContinuousPhysicalConduits} +

+
+ ), + function: 'onDeleteContinuousPhysicalConduits' + } +}; + export const CableMenu = [ { label: List Cables, @@ -746,115 +959,509 @@ export const CableMenu = [ } ]; -export const ConnectionMenu = [ - { - label: List Connections, - title: 'List Connections', - options: [ - { - value: 'listConnections', - label: 'List Connections' - } - ] +export const CableDescriptions = { + listCables: { + body: ( +
+

+ Pressing the button will list all features that are configured as equipment in + the myw.config['mywcom.equipment'] array. +

+
+ ), + function: 'onListCables' }, - { - label: Functions, - title: 'API Functions', - options: [ - { - value: 'freePinsOn', - label: 'freePinsOn', - params: [ - { name: 'feature', type: 'MyWorldFeature' }, - { name: 'tech', type: 'String' }, - { name: 'side', type: 'String' } - ] - }, - { - value: 'usedPinsOn', - label: 'usedPinsOn', - params: [ - { name: 'feature', type: 'MyWorldFeature' }, - { name: 'tech', type: 'String' }, - { name: 'side', type: 'String' } - ] - }, - { - value: 'highPinUsedOn', - label: 'highPinUsedOn', - params: [ - { name: 'feature', type: 'MyWorldFeature' }, - { name: 'tech', type: 'String' }, - { name: 'side', type: 'String' } - ] - }, - { - value: 'pinStateFor', - label: 'pinStateFor', - params: [ - { name: 'feature', type: 'MyWorldFeature' }, - { name: 'tech', type: 'String' }, - { name: 'side', type: 'String' } - ] - }, - { - value: 'pinCountFor', - label: 'pinCountFor', - params: [ - { name: 'feature', type: 'MyWorldFeature' }, - { name: 'tech', type: 'String' }, - { name: 'side', type: 'String' } - ] - }, - { - value: 'traceOut', - label: 'traceOut', - params: [ - { name: 'tech', type: 'String' }, - { name: 'feature', type: 'MyWorldFeature' }, - { name: 'pins', type: 'PinRange' }, - { name: 'direction', type: 'String' }, - { name: 'maxDist', type: 'Number' } - ] - }, - { - value: 'connect', - label: 'connect', - params: [ - { name: 'tech', type: 'String' }, - { name: 'fromFeature', type: 'MyWorldFeature' }, - { name: 'fromPins', type: 'PinRange' }, - { name: 'toFeature', type: 'MyWorldFeature' }, - { name: 'toPins', type: 'PinRange' }, - { name: 'housing', type: 'MyWorldFeature' }, - { name: 'ripple', type: 'Boolean' } - ] - }, - { - value: 'disconnect', - label: 'diconnect', - params: [ - { name: 'tech', type: 'String' }, - { name: 'feature', type: 'MyWorldFeature' }, - { name: 'pins', type: 'PinRange' }, - { name: 'ripple', type: 'Boolean' } - ] - }, - { - value: 'moveConns', - label: 'moveConns', - params: [ - { name: 'conns', type: 'Array' }, - { name: 'housingUrn', type: 'String' }, - { name: 'rootHousingUrn', type: 'String' } - ] - }, - { - value: 'switchConnSides', - label: 'switchConnSides', - params: [ - { name: 'feature', type: 'MyWorldFeature' } - ] + highestUsedPinOn: { + body: ( +
+

+ {cableDescriptions.highestUsedPinOn} +

+
+ ), + function: 'onHighestUsedPinOn' + }, + connectionsFor: { + body: ( +
+

+ {cableDescriptions.connectionsFor} +

+
+ ), + function: 'onConnectionsFor' + }, + internalSegments: { + body: ( +
+

+ {cableDescriptions.internalSegments} +

+
+ ), + function: 'onInternalSegments' + }, + createDetachedInternalSeg: { + body: ( +
+

+ {cableDescriptions.createDetachedInternalSeg} +

+
+ ), + function: 'onCreateDetachedInternalSeg' + }, + createDetachedSlack: { + body: ( +
+

+ {cableDescriptions.createDetachedSlack} +

+
+ ), + function: 'onCreateDetachedSlack' + }, + splitSlack: { + body: ( +
+

+ {cableDescriptions.splitSlack} +

+
+ ), + function: 'onSplitSlack' + }, + createDetSlackAtSide: { + body: ( +
+

+ {cableDescriptions.createDetSlackAtSide} +

+
+ ), + function: 'onCreateDetSlackAtSide' + }, + addSlack: { + body: ( +
+

+ {cableDescriptions.addSlack} +

+
+ ), + function: 'onAddSlack' + }, + transferConnections: { + body: ( +
+

+ {cableDescriptions.transferConnections} +

+
+ ), + function: 'onTransferConnections' + }, + segmentContainment: { + body: ( +
+

+ {cableDescriptions.segmentContainment} +

+
+ ), + function: 'onSegmentContainment' + }, + setSegmentContainment: { + body: ( +
+

+ {cableDescriptions.setSegmentContainment} +

+
+ ), + function: 'onSetSegmentContainment' + }, + setTickMark: { + body: ( +
+

+ {cableDescriptions.setTickMark} +

+
+ ), + function: 'onSetTickMark' + }, + setInTickMark: { + body: ( +
+

+ {cableDescriptions.setInTickMark} +

+
+ ), + function: 'onSetInTickMark' + }, + findDownstreamSegsToTick: { + body: ( +
+

+ {cableDescriptions.findDownstreamSegsToTick} +

+
+ ), + function: 'onFindDownstreamSegsToTick' + }, + setOutTickMark: { + body: ( +
+

+ {cableDescriptions.setOutTickMark} +

+
+ ), + function: 'onSetOutTickMark' + }, + findUpstreamSegsToTick: { + body: ( +
+

+ {cableDescriptions.findUpstreamSegsToTick} +

+
+ ), + function: 'onFindUpstreamSegsToTick' + }, + computeTickDist: { + body: ( +
+

+ {cableDescriptions.computeTickDist} +

+
+ ), + function: 'onComputeTickDist' + }, + adjustMeasuredLengths: { + body: ( +
+

+ {cableDescriptions.adjustMeasuredLengths} +

+
+ ), + function: 'onAdjustMeasuredLengths' + }, + routeCable: { + body: ( +
+

+ {cableDescriptions.routeCable} +

+
+ ), + function: 'onRouteCable' + }, + cutCableAt: { + body: ( +
+

+ {cableDescriptions.cutCableAt} +

+
+ ), + function: 'onCutCableAt' + }, + isCable: { + body: ( +
+

+ {cableDescriptions.isCable} +

+
+ ), + function: 'onIsCable' + }, + isInternal: { + body: ( +
+

+ {cableDescriptions.isInternal} +

+
+ ), + function: 'onIsInternal' + }, + rootHousingUrnOf: { + body: ( +
+

+ {cableDescriptions.rootHousingUrnOf} +

+
+ ), + function: 'onRootHousingUrnOf' + }, + getLength: { + body: ( +
+

+ {cableDescriptions.getLength} +

+
+ ), + function: 'onGetLength' + }, + segmentTypeForCable: { + body: ( +
+

+ {cableDescriptions.segmentTypeForCable} +

+
+ ), + function: 'onSegmentTypeForCable' + }, + slackTypeForCable: { + body: ( +
+

+ {cableDescriptions.slackTypeForCable} +

+
+ ), + function: 'onSlackTypeForCable' + }, + slackTypeForSegment: { + body: ( +
+

+ {cableDescriptions.slackTypeForSegment} +

+
+ ), + function: 'onSlackTypeForSegment' + }, + isSegment: { + body: ( +
+

+ {cableDescriptions.isSegment} +

+
+ ), + function: 'onIsSegment' + }, + segmentTypes: { + body: ( +
+

+ {cableDescriptions.segmentTypes} +

+
+ ), + function: 'onSegmentTypes' + }, + connectionTypes: { + body: ( +
+

+ {cableDescriptions.connectionTypes} +

+
+ ), + function: 'onConnectionTypes' + }, + slackTypes: { + body: ( +
+

+ {cableDescriptions.slackTypes} +

+
+ ), + function: 'onSlackTypes' + }, + pinCountFor: { + body: ( +
+

+ {cableDescriptions.pinCountFor} +

+
+ ), + function: 'onPinCountFor' + }, + moveCableOnConnect: { + body: ( +
+

+ {cableDescriptions.moveCableOnConnect} +

+
+ ), + function: 'onMoveCableOnConnect' + }, + truncateLine: { + body: ( +
+

+ {cableDescriptions.truncateLine} +

+
+ ), + function: 'onTruncateLine' + }, + handleConnect: { + body: ( +
+

+ {cableDescriptions.handleConnect} +

+
+ ), + function: 'onHandleConnect' + }, + fixCableSegmentChain: { + body: ( +
+

+ {cableDescriptions.fixCableSegmentChain} +

+
+ ), + function: 'onFixCableSegmentChain' + }, + fixCable: { + body: ( +
+

+ {cableDescriptions.fixCable} +

+
+ ), + function: 'onFixCable' + }, + rippleStrandInfo: { + body: ( +
+

+ {cableDescriptions.rippleStrandInfo} +

+
+ ), + function: 'onRippleStrandInfo' + } +}; + +export const ConnectionMenu = [ + { + label: List Connections, + title: 'List Connections', + options: [ + { + value: 'listConnections', + label: 'List Connections' + } + ] + }, + { + label: Functions, + title: 'API Functions', + options: [ + { + value: 'freePinsOn', + label: 'freePinsOn', + params: [ + { name: 'feature', type: 'MyWorldFeature' }, + { name: 'tech', type: 'String' }, + { name: 'side', type: 'String' } + ] + }, + { + value: 'usedPinsOn', + label: 'usedPinsOn', + params: [ + { name: 'feature', type: 'MyWorldFeature' }, + { name: 'tech', type: 'String' }, + { name: 'side', type: 'String' } + ] + }, + { + value: 'highPinUsedOn', + label: 'highPinUsedOn', + params: [ + { name: 'feature', type: 'MyWorldFeature' }, + { name: 'tech', type: 'String' }, + { name: 'side', type: 'String' } + ] + }, + { + value: 'pinStateFor', + label: 'pinStateFor', + params: [ + { name: 'feature', type: 'MyWorldFeature' }, + { name: 'tech', type: 'String' }, + { name: 'side', type: 'String' } + ] + }, + { + value: 'pinCountFor', + label: 'pinCountFor', + params: [ + { name: 'feature', type: 'MyWorldFeature' }, + { name: 'tech', type: 'String' }, + { name: 'side', type: 'String' } + ] + }, + { + value: 'traceOut', + label: 'traceOut', + params: [ + { name: 'tech', type: 'String' }, + { name: 'feature', type: 'MyWorldFeature' }, + { name: 'pins', type: 'PinRange' }, + { name: 'direction', type: 'String' }, + { name: 'maxDist', type: 'Number' } + ] + }, + { + value: 'connect', + label: 'connect', + params: [ + { name: 'tech', type: 'String' }, + { name: 'fromFeature', type: 'MyWorldFeature' }, + { name: 'fromPins', type: 'PinRange' }, + { name: 'toFeature', type: 'MyWorldFeature' }, + { name: 'toPins', type: 'PinRange' }, + { name: 'housing', type: 'MyWorldFeature' }, + { name: 'ripple', type: 'Boolean' } + ] + }, + { + value: 'disconnect', + label: 'diconnect', + params: [ + { name: 'tech', type: 'String' }, + { name: 'feature', type: 'MyWorldFeature' }, + { name: 'pins', type: 'PinRange' }, + { name: 'ripple', type: 'Boolean' } + ] + }, + { + value: 'moveConns', + label: 'moveConns', + params: [ + { name: 'conns', type: 'Array' }, + { name: 'housingUrn', type: 'String' }, + { name: 'rootHousingUrn', type: 'String' } + ] + }, + { + value: 'switchConnSides', + label: 'switchConnSides', + params: [ + { name: 'feature', type: 'MyWorldFeature' } + ] }, { value: 'techFor', @@ -882,6 +1489,150 @@ export const ConnectionMenu = [ } ]; +export const ConnectionDescriptions = { + listConnections: { + body: ( +
+

+ Pressing the button will list all features that are configured as equipment in + the myw.config['mywcom.equipment'] array. +

+
+ ), + function: 'onListConnections' + }, + freePinsOn: { + body: ( +
+

+ {connectionDescriptions.freePinsOn} +

+
+ ), + function: 'onFreePinsOn' + }, + usedPinsOn: { + body: ( +
+

+ {connectionDescriptions.usedPinsOn} +

+
+ ), + function: 'onUsedPinsOn' + }, + highPinUsedOn: { + body: ( +
+

+ {connectionDescriptions.highPinUsedOn} +

+
+ ), + function: 'onHighPinUsedOn' + }, + pinStateFor: { + body: ( +
+

+ {connectionDescriptions.pinStateFor} +

+
+ ), + function: 'onPinStateFor' + }, + pinCountFor: { + body: ( +
+

+ {connectionDescriptions.pinCountFor} +

+
+ ), + function: 'onPinCountFor' + }, + traceOut: { + body: ( +
+

+ {connectionDescriptions.traceOut} +

+
+ ), + function: 'onTraceOut' + }, + connect: { + body: ( +
+

+ {connectionDescriptions.connect} +

+
+ ), + function: 'onConnect' + }, + disconnect: { + body: ( +
+

+ {connectionDescriptions.disconnect} +

+
+ ), + function: 'onDisconnect' + }, + moveConns: { + body: ( +
+

+ {connectionDescriptions.moveConns} +

+
+ ), + function: 'onMoveConns' + }, + switchConnSides: { + body: ( +
+

+ {connectionDescriptions.switchConnSides} +

+
+ ), + function: 'onSwitchConnSides' + }, + techFor: { + body: ( +
+

+ {connectionDescriptions.techFor} +

+
+ ), + function: 'onTechFor' + }, + fixConnectionSegments: { + body: ( +
+

+ {connectionDescriptions.fixConnectionSegments} +

+
+ ), + function: 'onFixConnectionSegments' + }, + isConnection: { + body: ( +
+

+ {connectionDescriptions.isConnection} +

+
+ ), + function: 'onIsConnection' + } +}; + export const CircuitMenu = [ { label: List Circuits, @@ -952,4 +1703,88 @@ export const CircuitMenu = [ } ] } -]; \ No newline at end of file +]; + +export const CircuitDescriptions = { + listCircuits: { + body: ( +
+

+ Pressing the button will list all features that are configured as equipment in + the myw.config['mywcom.equipment'] array. +

+
+ ), + function: 'onListCircuits' + }, + traceLogicalCircuit: { + body: ( +
+

+ {circuitDescriptions.traceLogicalCircuit} +

+
+ ), + function: 'onTraceLogicalCircuit' + }, + routeCircuit: { + body: ( +
+

+ {circuitDescriptions.routeCircuit} +

+
+ ), + function: 'onRouteCircuit' + }, + unrouteCircuit: { + body: ( +
+

+ {circuitDescriptions.unrouteCircuit} +

+
+ ), + function: 'onUnrouteCircuit' + }, + routeCircuits: { + body: ( +
+

+ {circuitDescriptions.routeCircuits} +

+
+ ), + function: 'onRouteCircuits' + }, + isCircuitFeature: { + body: ( +
+

+ {circuitDescriptions.isCircuitFeature} +

+
+ ), + function: 'onIsCircuitFeature' + }, + getDetachedCircuitPath: { + body: ( +
+

+ {circuitDescriptions.getDetachedCircuitPath} +

+
+ ), + function: 'onGetDetachedCircuitPath' + }, + updateCircuitStatus: { + body: ( +
+

+ {circuitDescriptions.updateCircuitStatus} +

+
+ ), + function: 'onUpdateCircuitStatus' + } +}; \ No newline at end of file diff --git a/public/Samples/live_docs/function_descriptions/cableDescriptions.json b/public/Samples/live_docs/function_descriptions/cableDescriptions.json new file mode 100644 index 0000000..8c167c9 --- /dev/null +++ b/public/Samples/live_docs/function_descriptions/cableDescriptions.json @@ -0,0 +1,45 @@ +{ + "highestUsedPinOn": "Async: true\n\nReturns the highest pin number currently used on the given cable. Useful for determining whether increasing the pin count would affect existing connections.\n\nParameters:\n- `cable` (MywFeature): The cable feature to evaluate\n\nReturns:\n- (Promise): highest pin number in use", + "connectionsFor": "Async: true\n\nGets all connection records for the given cable. Can optionally filter by splice type and return results sorted.\n\nParameters:\n- `cable` (MywFeature): The cable feature whose connections to retrieve\n- `splice` (boolean): If 'true', return only splice connections\n- `sorted` (boolean): If 'true', return the connections sorted\n\nReturns:\n- (Promise): of connection features", + "internalSegments": "Async: true\n\nRetrieves all cable segments housed within the specified feature.\n\nParameters:\n- `housingFeature` (MywFeature): The structure or housing feature\n- `root` (boolean): If 'true', fetches segments where this feature is the root housing\n\nReturns:\n- (Promise): newly created detached segment", + "createDetachedSlack": "Async: true\n\nCreates a detached slack feature for the given cable within a specified housing. This function initializes a new slack (e.g., fiber slack) associated with a cable and a housing structure. It is important to note that a detached segment, once created has NOT been inserted in the database yet.\n\nParameters:\n- `cableFeature` (MywFeature): The cable feature for which to create slack\n- `housingFeature` (MywFeature): The structure housing the slack\n\nReturns:\n- (Promise): detached slack feature", + "splitSlack": "Async: true\n\nSplits an existing slack feature into two parts by dividing its length. The function creates a new slack segment from the given slack feature by cutting it at the specified length. Returns both the updated original slack and the newly created one.\n\nParameters:\n- `slack` (MywFeature): The existing slack feature to split\n- `length` (number): The length to assign to the new slack segment\n\nReturns:\n- (Promise<[MywFeature, MywFeature]>): array containing: [0] The updated original slack [1] The newly created slack feature", + "createDetSlackAtSide": "Async: true\n\nCreates a detached slack feature associated with a cable segment. This function generates a new slack positioned relative to the given cable segment. It attaches metadata (`slackDetails`) indicating which segment and which side (before or after) the slack should appear. It is important to note that a detached segment, once create has NOT been inserted in the database yet.\n\nParameters:\n- `seg` (MywFeature): The existing cable segment to associate the slack with\n- `struct` (MywFeature): The structure that will house the slack\n- `side` (boolean): 'true' if the slack should be created before the segment; false' for after\n\nReturns:\n- (Promise): newly created detached slack feature", + "addSlack": "Async: true\n\nInserts a previously created detached slack into the database, attaching it to the specified cable segment at a specific side.\n\nParameters:\n- `featureType` (string): The type of the slack feature (e.g., 'mywcom_slack_fiber')\n- `detSlack` (MywFeature): The detached slack feature to insert\n- `segUrn` (string): The URN of the cable segment to attach the slack to\n- `side` (boolean): 'true' if the slack is inserted before the segment; false' for after\n\nReturns:\n- (Promise): ID of the inserted slack feature", + "transferConnections": "Async: true\n\nTransfers connections from one cable segment to another on the specified side. This function identifies all connections on `oldSeg` that match the specified `side` (\"in\" or \"out\") and updates them to reference `newSeg`. The returned array includes all updated connection features, which should be committed to a transaction. It's important to note that the changes are NOT pushed into the databse.\n\nParameters:\n- `oldSeg` (string): The URN of the original cable segment with existing connections\n- `newSeg` (string): The URN of the new cable segment to transfer connections to\n- `side` (string): The side of the segment to update (\"in\" or \"out\")\n\nReturns:\n- (Promise): array of updated connection features ENH: Move to connectionManagerPlugin", + "connectionsOf": "Async: true\n\nRetrieves all connection records associated with a given feature URN. Includes records where the feature is the `in_object`, `out_object`, or appears in the specified `housing_field`. Optionally filters by splice.\n\nParameters:\n- `featureURN` (MywFeature): URN of the feature to query connections for\n- `housing_field` (string): Field to use for housing match\n- `splices` (boolean): Optional splice value to limit results\n\nReturns:\n- (Promise): resolving to array of connection features ENH: move to ConnectionManagerPlugin", + "segmentContainment": "Async: true\n\nReturns the URN of the equipment in which the specified side of the cable segment is housed (if any). NOTE: Equipment connections must be manually set. Refer to the \"Setting an Enclosure on a cable\" section in the Developer Guide for more details.\n\nParameters:\n- `seg` (MywFeature): The cable segment to check\n- `side` (string): Which side of the segment to check ('in' or 'out')\n\nReturns:\n- (string|null): URN of the equipment, or null if not set", + "setSegmentContainment": "Async: true\n\nSets the equipment housing for the specified side of a cable segment. Also updates the adjacent segment on the opposite side to ensure consistent containment. If `equip` is `null`, the containment is removed.\n\nParameters:\n- `seg` (MywFeature): The cable segment whose containment is being updated\n- `side` (string): The side of the segment to update ('in' or 'out')\n- `equip` (MywFeature|null): The equipment feature that houses the segment, or `null` to unset\n\nReturns:\n- (Promise): ", + "_setSegmentContainment": "Async: true\n\nSets the equipment housing for the specified side of a cable segment. Also updates the adjacent segment on the opposite side to ensure consistent containment. If `equip` is `null`, the containment is removed.\n\nParameters:\n- `seg` (MywFeature): The cable segment whose containment is being updated\n- `side` (string): The side of the segment to update ('in' or 'out')\n- `equip` (MywFeature|null): The equipment feature that houses the segment, or `null` to unset\n\nReturns:\n- (Promise): updated segment feature", + "setTickMark": "Async: true\n\nSets a tick mark on the specified side of a cable segment and updates adjacent segments accordingly. The function updates the tick mark on the target segment, as well as on its immediate upstream or downstream neighbor, depending on whether the tick is applied to the 'in_tick' or 'out_tick' side. It also traces connected segments to recalculate measured lengths based on the provided spacing and unit.\n\nParameters:\n- `seg` (MywFeature): The cable segment to update\n- `tickMark` (number): The new tick mark value\n- `field` (string): Specifies whether to update the 'in_tick' or 'out_tick' side of the segment\n- `spacing` (number): The spacing between tick marks, in the specified unit\n- `unit` (String): The unit of measurement for the spacing (e.g., \"m\" or \"ft\")\n\nReturns:\n- (Promise): ", + "setInTickMark": "Async: true\n\nSets the `in_tick` value on the given segment and adjusts the measured lengths of downstream segments up to the next tick. Computes the total tick distance and adjusts measured lengths of all segments between the current one and the next ticked segment.\n\nParameters:\n- `trans` (Transaction): The active database transaction to include updates in\n- `seg` (MywFeature): The cable segment where the tick is being set\n- `tickMark` (number): The new `in_tick` value to assign\n- `spacing` (number): The distance between tick marks\n- `unit` (string): Unit of measurement for spacing (e.g., \"m\", \"ft\")\n\nReturns:\n- (number|undefined): tick value of the next downstream segment if found; otherwise 'undefined'", + "findDownstreamSegsToTick": "Async: true\n\nFinds all segments downstream from the given segment until a tick mark is encountered. Starts at the provided segment and follows the out_segment reference. If a tick mark is found on the out_tick of the current segment or the in_tick of the next segment, the traversal stops.\n\nParameters:\n- `seg` (MywFeature): The starting segment\n\nReturns:\n- ([Array, number|null]): array of segments and the first tick mark found", + "setOutTickMark": "Async: true\n\nSets the out tick mark of a segment and adjusts the measured lengths of all upstream segments until the next tick mark is encountered. This function starts from the provided segment and traverses upstream to find the next tick mark. It then updates the measured lengths of the segments between the two tick marks based on the given spacing and unit.\n\nParameters:\n- `trans` (Transaction): The transaction to batch updates into\n- `seg` (MywFeature): The cable segment to update\n- `tickMark` (number): The tick mark value to set\n- `spacing` (number): The distance between tick marks\n- `unit` (string): The unit of measurement (e.g. \"m\" or \"ft\")\n\nReturns:\n- (number|undefined): tick mark found upstream or undefined if none found", + "findUpstreamSegsToTick": "Async: true\n\nFinds all upstream segments from the given segment up to the next tick mark. Traverses the cable network upstream starting from the given segment until it finds a segment with an `in_tick` or `out_tick` set. Returns all visited segments and the tick mark value found.\n\nParameters:\n- `seg` (MywFeature): The segment to start from\n\nReturns:\n- ([Array, number|null]): array of upstream segments and the first tick mark found, or 'null' if none found", + "_setTickMarkNull": "Async: true\n\nClears the tick mark field on the given segment, and clears the corresponding adjacent field on the neighboring segment.\n\nParameters:\n- `trans` (Transaction): The transaction to batch updates\n- `seg` (MywFeature): The segment to clear the tick mark from\n- `field` (string): Either `in_tick` or `out_tick`", + "computeTickDist": "Async: false\n\nCalculates the physical distance in meters between two tick marks on a cable segment. Converts tick spacing from meters to the given unit, then computes the scaled distance between the two tick marks. Returns the result in meters.\n\nParameters:\n- `segTick` (number): The tick mark on the segment\n- `tick` (number): The target tick mark\n- `spacing` (number): The distance between each tick mark, in meters\n- `unit` (string): The unit in which tick spacing is expressed (e.g., \"m\", \"ft\")\n\nReturns:\n- (number): in meters between the two tick marks", + "adjustMeasuredLengths": "Async: true\n\nAdjusts measured lengths of cable segments based on the given tick distance.\n\nParameters:\n- `trans` (Transaction): The transaction object used to batch updates\n- `segs` (Array): An array of cable segment features to adjust\n- `tickDist` (number): The target distance (in meters) between tick marks\n\nReturns:\n- (Array): updated cable segments", + "_assertEndSegValid": "Async: true\n\nValidates the end segment tick marks. If either inTick or outTick is missing, it finds the next tick mark upstream or downstream and verifies that the current tickMark does not overlap with existing ticks.\n\nParameters:\n- `seg` (MywFeature): The cable segment to validate\n- `tickMark` (number): The tick mark being set on this segment\n- `inTick` (number): The tick mark at the 'in' side of the segment\n- `outTick` (number): The tick mark at the 'out' side of the segment", + "_assertTickMarkValid": "Async: false\n\nThrow error if `tickMark` overlaps next tick mark\n\nParameters:\n- `tickMark` (number): The tick mark value to validate\n- `inTick` (number): The tick mark at the 'in' side of the segment\n- `outTick` (number): The tick mark at the 'out' side of the segment", + "routeCables": "Async: true\n\nIterates over an array of cables and routes the cables using the given structures. Once the cables are routed, they are matched with the correct housing and updated.\n\nParameters:\n- `cablesJson` (Array): Array of cable data\n- `structures` (Array): Array of structure features\n- `parentFeatures` (Array): Features that the created cable segments will be housed in\n\nReturns:\n- (Array): cable features", + "_throwError": "Async: false\n\nThrow 'overlapping_tick' error", + "_segHasTick": "Async: false\n\nReturns true if seg has a tick value set on the specified field\n\nParameters:\n- `seg` (MywFeature): Cable segment\n- `field` (string): `in_tick` or `out_tick`\n\nReturns:\n- (boolean): if tick exists, otherwise 'false'", + "cutCableAt": "Async: true\n\nCuts a cable at a given segment within a structure. Creates new separate cables if needed.\n\nParameters:\n- `struct` (MywFeature): Structure where the cut occurs\n- `segment` (MywFeature): Segment to cut\n- `forward` (boolean): 'true' if cut forward, else 'false'\n- `spliceHousing` (MywFeature): Optional housing for splice\n\nReturns:\n- (Object): of the cutCable operation", + "isCable": "Async: false\n\nReturns 'true' if a feature is a cable\n\nParameters:\n- `feature` (MywFeature): Feature to check\n\nReturns:\n- (boolean): if feature is a cable", + "isInternal": "Async: true\n\nReturns 'true' if all segments of a cable are internal. Detached cables or cables crossing structures are considered not internal.\n\nParameters:\n- `cable` (MywFeature): Cable feature to check\n\nReturns:\n- (boolean): if all segments are internal", + "fireFeatureEvents": "Async: false\n\nFires events to update the display and other parts of the application when features have changed. This triggers 'featureCollection-modified' events for relevant feature types: routes, equipment, conduits, cables, circuits, and a specific structure type.\n\nParameters:\n- `aspect` (string): An aspect describing the context of the update\n- `cableFeatureType` (string): Optional. A specific structure feature type to fire an event for if structures are in separate layers", + "rootHousingUrnOf": "Async: false\n\nReturns the URN of the root housing of the given housing feature.\n\nParameters:\n- `housing` (RouteMixin|Conduit): The housing feature\n\nReturns:\n- (string): URN of the root housing, or the housing URN if no root housing is set", + "getLength": "Async: false\n\nReturns the geographic length of a LineString feature.\n\nParameters:\n- `feature` (GeoJSON.Feature): The LineString feature\n\nReturns:\n- (number): length of the feature", + "segmentTypeForCable": "Async: false\n\nReturns the segment feature type for the given cable.\n\nParameters:\n- `cable` (MywFeature): The cable feature\n\nReturns:\n- (string): segment feature type associated with the cable", + "slackTypeForCable": "Async: false\n\nReturns the slack feature type for the given cable.\n\nParameters:\n- `cable` (MywFeature): The cable feature\n\nReturns:\n- (string): slack feature type associated with the cable", + "slackTypeForSegment": "Async: false\n\nReturns the slack feature type for the given segment.\n\nParameters:\n- `segment` (MywFeature): The segment feature\n\nReturns:\n- (string|undefined): slack feature type associated with the segment, or undefined if not found", + "isSegment": "Async: false\n\nDetermines if the given URN corresponds to a segment feature.\n\nParameters:\n- `urn` (string): The URN string\n\nReturns:\n- (boolean): if the URN corresponds to a segment feature, 'false' otherwise", + "pinCountFor": "Async: true\n\nReturns pin count for a feature and on side if specified and appropriate\n\nParameters:\n- `feature` (MywFeature): The feature to get the pin count for\n- `side` (string): Optional. The side ('in' or 'out') to get pins for\n\nReturns:\n- (number|undefined): pin count or undefined if not found", + "moveCableOnConnect": "Async: true\n\nShortens a cable segment and moves its endpoint to the equipment's offset geometry.\n\nParameters:\n- `connRec` (MywFeature): Connection record containing cable and equipment info\n\nReturns:\n- (MywFeature|undefined): updated cable feature or undefined if no update", + "truncateLine": "Async: false\n\nShortens a line by trimming coordinates from the start and/or end.\n\nParameters:\n- `coords` (Array>): Coordinates of the line\n- `startTruncDist` (number|null): Distance to trim from start (or null)\n- `endTruncDist` (number|null): Distance to trim from end (or null)\n\nReturns:\n- (Array>): truncated line coordinates", + "handleConnect": "Async: true\n\nHandles a connection event by moving the cable endpoint and firing update events.\n\nParameters:\n- `event` (Object): The connection event object", + "fixCableSegmentChain": "Async: true\n\nFixes the segment chain of a cable using its placement geometry.\n\nParameters:\n- `cable` (MywFeature): The cable feature to fix", + "fixCable": "Async: true\n\nCreates new cable segments based on route and copies segment data; deletes old segments.\n\nParameters:\n- `cable` (MywFeature): The cable feature to fix\n\nReturns:\n- (Promise): resolving after fix completes", + "rippleStrandInfo": "Async: true\n\nWrapper for ds.comms.rippleStrandInfo used by the strandInfo dialog.\n\nParameters:\n- `feature` (MywFeature): Feature to ripple strand info on\n- `direction` (string): Direction of ripple\n- `sourceRanges` (Array): Source ranges for ripple\n- `strandInfoToRipple` (Object): Strand info to apply" +} \ No newline at end of file diff --git a/public/Samples/live_docs/function_descriptions/circuitDescriptions.json b/public/Samples/live_docs/function_descriptions/circuitDescriptions.json new file mode 100644 index 0000000..e47b335 --- /dev/null +++ b/public/Samples/live_docs/function_descriptions/circuitDescriptions.json @@ -0,0 +1,8 @@ +{ + "traceLogicalCircuit": "Async: true\n\nRuns a trace on a logical circuit returning a trace result that references the features the circuit passes through.\n\nParameters:\n- `circuit` (MywFeature): The circuit to be traced\n\nReturns:\n- (Promise): containing the trace result", + "routeCircuit": "Async: true\n\nSet route for the provided circuit. Updates the features the circuit passes through to reference the circuit, and sets the circuit's geometry\n\nParameters:\n- `circuit` (MywFeature): The circuit to be routed\n\nReturns:\n- (Promise): result", + "unrouteCircuit": "Async: true\n\nUnset the route for the provided circuit\n\nParameters:\n- `circuit` (MywFeature): The circuit to be unrouted\n\nReturns:\n- (Promise): result", + "routeCircuits": "Async: true\n\nRoute multiple circuits\n\nParameters:\n- `circuits` (Array): The circuits to be routed\n\nReturns:\n- (Promise>): with individual results for each circuit", + "isCircuitFeature": "Async: false\n\nDetermines if feature is a circuit feature\n\nParameters:\n- `feature` (MywFeature): Feature to be checked\n\nReturns:\n- (boolean): if the feature is a circuit", + "getDetachedCircuitPath": "Async: true\n\nReturns a detached feature with reference to logical circuit\n\nParameters:\n- `featureType` (string): Type of the feature to be created\n- `logicalCircuit` (MywFeature): Logical circuit to which the detached feature will be related\n\nReturns:\n- (Promise): for a newly created detached feature" +} \ No newline at end of file diff --git a/public/Samples/live_docs/function_descriptions/conduitDescriptions.json b/public/Samples/live_docs/function_descriptions/conduitDescriptions.json new file mode 100644 index 0000000..a340023 --- /dev/null +++ b/public/Samples/live_docs/function_descriptions/conduitDescriptions.json @@ -0,0 +1,9 @@ +{ + "disconnectConduit": "Async: true\n\nDisconnects the conduit at structure.\n\nParameters:\n- `conduit` (MywFeature): Conduit to disconnect\n- `housing` (MywFeature): Structure to disconnect conduit at", + "connectConduits": "Async: true\n\nConnects two conduits at a structure.\n\nParameters:\n- `housing` (MywFeature): Structure to connect the conduit to\n- `first_conduit` (MywFeature): First conduit to connect\n- `second_conduit` (Feature): Second conduit to connect", + "routeNestedConduits": "Async: true\n\nRoute new conduits for all conduits that are part of the conduit hierarchy.\n\nParameters:\n- `conduitsJson` (Object): Serialized conduit hierarchy\n- `structures` (Object): Serialized structures where conduits are being routed\n- `parentConduits` (Object): Serialzied parent conduits in the hierarchy, used to set housing\n- `transaction` (Transaction): Current update transaction, if not provided a new one will be created\n\nReturns:\n- (): conduits created in a single array", + "moveInto": "Async: true\n\nMove conduit to a new housing in the same route\n\nParameters:\n- `housing` (MywFeature): New conduit housing\n- `feature` (MywFeature): Conduit to be moved", + "isContinuousConduitType": "Async: false\n\nCheck if the conduit is continuous\n\nParameters:\n- `feature` (MywFeature): Conduit to be checked\n\nReturns:\n- (boolean): if the conduit is continuous, false otherwise", + "continuousPhysicalConduits": "Async: true\n\nReturns conduits connected to FEATURE that are in the same run and considered to be the same physical conduit. We do this based on name.\n\nParameters:\n- `feature` (MywFeature): \n\nReturns:\n- (): conduits in the same run AND parent bundle (run)", + "deleteContinuousPhysicalConduits": "Async: true\n\n\n\nParameters:\n- `conduit` (MywFeature): Conduit to be deleted\n\nReturns:\n- (): " +} \ No newline at end of file diff --git a/public/Samples/live_docs/function_descriptions/connectionDescriptions.json b/public/Samples/live_docs/function_descriptions/connectionDescriptions.json new file mode 100644 index 0000000..aef622c --- /dev/null +++ b/public/Samples/live_docs/function_descriptions/connectionDescriptions.json @@ -0,0 +1,16 @@ +{ + "freePinsOn": "Async: true\n\nReturns list of pins on side of feature that are not connected\n\nParameters:\n- `feature` (MywFeature): Feature to check\n- `tech` (string): Type (e.g.: 'fiber' or 'copper')\n- `side` (string): Side to check: 'in' or 'out'\n\nReturns:\n- (Promise>): of free pins", + "usedPinsOn": "Async: true\n\nReturns list of pins on side of feature that are connected\n\nParameters:\n- `feature` (MywFeature): Feature to check\n- `tech` (string): Type (e.g.: 'fiber' or 'copper')\n- `side` (string): Side to check: 'in' or 'out'\n\nReturns:\n- (Promise>): of used pins", + "highPinUsedOn": "Async: true\n\nReturns the highest pin in use on the side of the feature\n\nParameters:\n- `feature` (MywFeature): Feature to check\n- `tech` (string): Type (e.g.: 'fiber' or 'copper')\n- `side` (string): Side to check: 'in' or 'out'\n\nReturns:\n- (Promise): pin number in use", + "pinStateFor": "Async: true\n\nreturns list of state of pins on the side of the feature\n\nParameters:\n- `feature` (MywFeature): Feature to check\n- `tech` (string): Type (e.g.: 'fiber' or 'copper')\n- `side` (string): Side to check: 'in' or 'out'\n\nReturns:\n- (Promise>): of pins states, keyed by pin number (true means free, false means connected)", + "pinCountFor": "Async: true\n\nReturns number of pins (if any) on the side of the feature\n\nParameters:\n- `feature` (MywFeature): Feature to check\n- `tech` (string): Type (e.g.: 'fiber' or 'copper')\n- `side` (string): Side to check: 'in' or 'out'\n\nReturns:\n- (Promise): of pins on feature", + "traceOut": "Async: true\n\nPerform network trace starting on the pin range of the feature\n\nParameters:\n- `tech` (string): Type (e.g.: 'fiber' or 'copper')\n- `feature` (MywFeature): Feature to start trace from\n- `pins` (PinRange): Range of pins on feature to start from\n- `direction` (string): Direction to perform the trace: 'upstream', 'downstream' or 'both'\n- `maxDist` (number): Maximum distance to trace\n\nReturns:\n- (Promise): object containing the trace results", + "connect": "Async: true\n\nConnect two sets of pins. Raises the event 'connected'\n\nParameters:\n- `tech` (string): Type (e.g.: 'fiber' or 'copper')\n- `fromFeature` (MywFeature): Feature where the connection starts\n- `fromPins` (PinRange|Array): Pins on the fromFeature to connect. It can be a Vector of the form [side,low,high] or a PinRange object\n- `toFeature` (MywFeature): Feature where the connection ends\n- `toPins` (PinRange|Array): Pins on the toFeature to connect. It can be a Vector of the form [side,low,high] or a PinRange object\n- `toFeature` (MywFeature): Feature where the connection ends\n- `housing` (MywFeature): Feature where the connection is housed\n- `ripple` (boolean): If true, ripples line of count information in both directions\n\nReturns:\n- (Promise): record created", + "disconnect": "Async: true\n\nDisconnect a set pins of a feature. Raises the event 'disconnected'\n\nParameters:\n- `tech` (string): Type (e.g.: 'fiber' or 'copper')\n- `feature` (MywFeature): Feature where the connection starts\n- `pins` (PinRange|Array): Pins on the feature to disconnect. It can be a Vector of the form [side,low,high] or a PinRange object\n- `ripple` (boolean): If true, ripples line of count information in both directions\n\nReturns:\n- (Promise): request result", + "moveConns": "Async: true\n\nMove fiber connection records to new housing and root housing\n\nParameters:\n- `conns` (Array): Array of fiber connection urns\n- `housingUrn` (string): URN of the conections new housing\n- `rootHousingUrn` (string): URN of the conections new root housing\n\nReturns:\n- (Promise): result", + "switchConnSides": "Async: true\n\nSwitch the sides of connections of a feature\n\nParameters:\n- `feature` (MywFeature): Feature to check\n\nReturns:\n- (Promise): result", + "techFor": "Async: false\n\nDetermines the tech for a feature on a side\n\nParameters:\n- `feature` (MywFeature): Feature to check\n- `side` (string): Side to check: 'in' or 'out'\n\nReturns:\n- (string): tech type of the side", + "fixConnectionSegments": "Async: true\n\nFix a connection which has become invalid after a split due to in_object or out_object segments being adjusted.\n\nParameters:\n- `conn` (MywFeature): Connection to fix", + "_fixConnectionSegmentsSide": "Async: true\n\nFix the in or out side of a connection which has become invalid after a split of a cable\n\nParameters:\n- `conn` (MywFeature): Connection to fix\n- `side` (string): Side to fix: 'in' or 'out'\n\nReturns:\n- (Promise): result", + "isConnection": "Async: false\n\nCheck if a feature is a connection\n\nParameters:\n- `feature` (MywFeature): Feature to check\n\nReturns:\n- (boolean): if the feature is a connection" +} \ No newline at end of file diff --git a/public/Samples/live_docs/function_descriptions/equipmentDescriptions.json b/public/Samples/live_docs/function_descriptions/equipmentDescriptions.json new file mode 100644 index 0000000..f690dcd --- /dev/null +++ b/public/Samples/live_docs/function_descriptions/equipmentDescriptions.json @@ -0,0 +1,10 @@ +{ + "isEquipment": "Async: false\n\nDetermines whether the specified feature is an equipment type.\n\nParameters:\n- `feature` (MywFeature): - The feature to check.\n\nReturns:\n- (Boolean): True if the feature is an equipment type, false otherwise.", + "fireFeatureEvents": "Async: false\n\nFires events to update the display and other parts of the application when features have changed.
This triggers 'featureCollection-modified' events for relevant feature types.\n\nParameters:\n- `aspect` (String): - An aspect describing the context of the update.\n- `type` (String): - Optional. A specific equipment feature type to fire an event for if equipment features are in separate layers.", + "moveAssembly": "Async: true\n\nMoves an existing equipment feature and all of its children, to a different already-existing housing feature.\n\nParameters:\n- `equip` (MywFeature): - The equipment feature to be moved along with its children.\n- `housing` (MywFeature): - The existing housing feature to which the equipment will be moved.", + "copyAssembly": "Async: true\n\nCopy an equipment feature, and all of its children, to an already-existing housing feature.\n\nParameters:\n- `equip` (MywFeature): - The equipment feature to be copied along with its children.\n- `housing` (MywFeature): - The existing housing feature to which the equipment will be copied.", + "connectionsIn": "Async: true\n\nTakes a housing feature and returns an array of all connections of the given housing feature as well as the connections of any contained equipment.\n\nParameters:\n- `housing` (MywFeature): - The housing feature.", + "connectionsOf": "Async: true\n\nTakes a housing feature and returns an array of its connections.\n\nParameters:\n- `housing` (MywFeature): - The housing feature.", + "equipmentWithPortInfo": "Async: true\n\nReturns an array of equipment types with port information.\n\nReturns:\n- (Array): array of equipment types.", + "ripplePortInfo": "Async: true\n\nTakes attribute values from ranges of ports and copies (\"ripples\") those values down or up the circuit.\n\nParameters:\n- `feature` (MywFeature): \n- `direction` (String): - Possible values: 'upstream', 'downstream', or 'both'.\n- `side` (String): - Possible values: 'in' or 'out'.\n- `sourceRanges` (Array): - An array of pin range objects.\n- `portInfoToRipple` (Array): - An array of port info attribute names with values to be copied." +} \ No newline at end of file diff --git a/public/Samples/live_docs/structureDescriptions.json b/public/Samples/live_docs/function_descriptions/structureDescriptions.json similarity index 100% rename from public/Samples/live_docs/structureDescriptions.json rename to public/Samples/live_docs/function_descriptions/structureDescriptions.json diff --git a/public/Samples/live_docs/liveDocs_modal.js b/public/Samples/live_docs/liveDocs_modal.js index 9c449e9..780d756 100644 --- a/public/Samples/live_docs/liveDocs_modal.js +++ b/public/Samples/live_docs/liveDocs_modal.js @@ -11,7 +11,12 @@ import { CableMenu, ConnectionMenu, CircuitMenu, - StructureDescriptions + StructureDescriptions, + EquipmentDescriptions, + ConduitDescriptions, + CableDescriptions, + ConnectionDescriptions, + CircuitDescriptions } from './classes_dictionary'; import PinRange from 'modules/comms/js/api/pinRange'; @@ -47,7 +52,12 @@ export const LiveDocsModal = ({ open, plugin }) => { // TODO: Add others }; const ApiFunctionDictionaries = { - structureApi: StructureDescriptions + structureApi: StructureDescriptions, + equipmentApi: EquipmentDescriptions, + conduitApi: ConduitDescriptions, + cableApi: CableDescriptions, + connectionApi: ConnectionDescriptions, + circuitApi: CircuitDescriptions // TODO: Add others }; @@ -143,26 +153,8 @@ export const LiveDocsModal = ({ open, plugin }) => { console.log(myw.config[`mywcom.${feature.toLowerCase()}`]); return; } - // const feature = pickedClass.slice(0,-3); - // console.log ("picked class", feature); - // const allowedFeatureTypes = myw.config[`mywcom.${feature.toLowerCase()}`]; - // console.log("allowed feature", allowedFeatureTypes); const paramMeta = getSelectedFunctionParams(); - // // 3. Validate all MyWorldFeature params - // const invalidParam = paramMeta.find(({ name, type }) => { - // if (type.toLowerCase() === 'myworldfeature') { - // const feature = paramValues[name]; - // return !feature || !allowedFeatureTypes.includes(feature.getType()); - // } - // return false; - // }); - - // if (invalidParam) { - // alert(`Selected feature type for "${invalidParam.name}" is not allowed for function "${pickedFunction}"`); - // return; - // } - if (!pickedClass || !pickedFunction) return; const apiInstance = apiInstances[pickedClass]; diff --git a/public/Samples/live_docs/liveDocs_plugin.js b/public/Samples/live_docs/liveDocs_plugin.js index 9707be2..2a4f69b 100644 --- a/public/Samples/live_docs/liveDocs_plugin.js +++ b/public/Samples/live_docs/liveDocs_plugin.js @@ -1,7 +1,7 @@ import { Plugin, PluginButton } from 'myWorld-client'; import { renderReactNode } from 'myWorld-client/react'; // import liveDocsImage from '../../images/Customer_Connection_JavaScript_icon.svg'; -import { LiveDocsModal } from './liveDocs_modal_tsx'; +import { LiveDocsModal } from './liveDocs_modal'; import liveDocsImage from '../../images/Live_Docs_icon.svg'; import StructureManagerPlugin from '../../../../comms/public/js/api/structureManagerPlugin'; import EquipmentManagerPlugin from '../../../../comms/public/js/api/equipmentManagerPlugin'; From 52f8718ba5b0113bdafc1955536b7a0d8352938f Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Thu, 28 Aug 2025 16:39:59 +0000 Subject: [PATCH 17/45] Added 'is' param check --- public/Samples/live_docs/liveDocs_modal.js | 15 +++++++- .../Samples/live_docs/liveDocs_modal_tsx.tsx | 38 ++++++++++++------- 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/public/Samples/live_docs/liveDocs_modal.js b/public/Samples/live_docs/liveDocs_modal.js index 780d756..deb4840 100644 --- a/public/Samples/live_docs/liveDocs_modal.js +++ b/public/Samples/live_docs/liveDocs_modal.js @@ -58,7 +58,6 @@ export const LiveDocsModal = ({ open, plugin }) => { cableApi: CableDescriptions, connectionApi: ConnectionDescriptions, circuitApi: CircuitDescriptions - // TODO: Add others }; const transactionMessage = "Transaction parameter is automatically created for you. It will be committed after the function execution."; @@ -168,6 +167,20 @@ export const LiveDocsModal = ({ open, plugin }) => { const params = paramMeta.map(({ name }) => paramValues[name]); console.log('Executing function:', pickedFunction, 'with params:', params); + + if (pickedFunction.startsWith("is")) { + const featureParam = params[0]; + const fn = apiInstance[pickedFunction]; + + const isValid = fn.call(apiInstance, featureParam); + if (!isValid) { + alert(`Invalid feature passed to ${pickedFunction}`); + return; + } + // console.log(`${pickedFunction} validation passed ✅`); + return; + } + const fn = apiInstance[pickedFunction]; if (typeof fn !== 'function') { diff --git a/public/Samples/live_docs/liveDocs_modal_tsx.tsx b/public/Samples/live_docs/liveDocs_modal_tsx.tsx index 06efb82..aae19a2 100644 --- a/public/Samples/live_docs/liveDocs_modal_tsx.tsx +++ b/public/Samples/live_docs/liveDocs_modal_tsx.tsx @@ -11,7 +11,12 @@ import { CableMenu, ConnectionMenu, CircuitMenu, - StructureDescriptions + StructureDescriptions, + EquipmentDescriptions, + ConduitDescriptions, + CableDescriptions, + ConnectionDescriptions, + CircuitDescriptions } from './classes_dictionary'; import PinRange from 'modules/comms/js/api/pinRange'; @@ -78,29 +83,34 @@ export const LiveDocsModal: React.FC = ({ open, plugin }) => // Menus const ApiFunctionMenus: Record = { - structureApi: StructureMenu, - equipmentApi: EquipmentMenu, - conduitApi: ConduitMenu, - cableApi: CableMenu, - connectionApi: ConnectionMenu, - circuitApi: CircuitMenu, + structureApi: StructureMenu, + equipmentApi: EquipmentMenu, + conduitApi: ConduitMenu, + cableApi: CableMenu, + connectionApi: ConnectionMenu, + circuitApi: CircuitMenu, }; // API instances const apiInstances: Record = { - structureApi: plugin.structureApi, - equipmentApi: plugin.equipmentApi, - conduitApi: plugin.conduitApi, - cableApi: plugin.cableApi, - connectionApi: plugin.connectionApi, - circuitApi: plugin.circuitApi, + structureApi: plugin.structureApi, + equipmentApi: plugin.equipmentApi, + conduitApi: plugin.conduitApi, + cableApi: plugin.cableApi, + connectionApi: plugin.connectionApi, + circuitApi: plugin.circuitApi, }; // Dictionaries type ApiFunctionDictionary = Record; const ApiFunctionDictionaries: Partial> = { - structureApi: StructureDescriptions, + structureApi: StructureDescriptions, + equipmentApi: EquipmentDescriptions, + conduitApi: ConduitDescriptions, + cableApi: CableDescriptions, + connectionApi: ConnectionDescriptions, + circuitApi: CircuitDescriptions }; From a23584a56bac8ebab406bfb174cbaa1f2600c8bf Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Thu, 28 Aug 2025 16:40:11 +0000 Subject: [PATCH 18/45] Added 'is' param check --- public/Samples/live_docs/liveDocs_modal.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/Samples/live_docs/liveDocs_modal.js b/public/Samples/live_docs/liveDocs_modal.js index deb4840..115fe39 100644 --- a/public/Samples/live_docs/liveDocs_modal.js +++ b/public/Samples/live_docs/liveDocs_modal.js @@ -177,7 +177,7 @@ export const LiveDocsModal = ({ open, plugin }) => { alert(`Invalid feature passed to ${pickedFunction}`); return; } - // console.log(`${pickedFunction} validation passed ✅`); + // console.log(`${pickedFunction} validation passed`); return; } From fbda2e0cea4f20e6e95826e0816f77ee8ca71a5a Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Thu, 28 Aug 2025 19:41:14 +0000 Subject: [PATCH 19/45] removed comments --- public/Samples/live_docs/liveDocs_modal.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/public/Samples/live_docs/liveDocs_modal.js b/public/Samples/live_docs/liveDocs_modal.js index 115fe39..5c40243 100644 --- a/public/Samples/live_docs/liveDocs_modal.js +++ b/public/Samples/live_docs/liveDocs_modal.js @@ -162,8 +162,6 @@ export const LiveDocsModal = ({ open, plugin }) => { return; } - - const params = paramMeta.map(({ name }) => paramValues[name]); console.log('Executing function:', pickedFunction, 'with params:', params); @@ -182,7 +180,6 @@ export const LiveDocsModal = ({ open, plugin }) => { } const fn = apiInstance[pickedFunction]; - if (typeof fn !== 'function') { console.warn(`${pickedFunction} is not a function on ${pickedClass}`); return; From 89e822c1555d8cb04a916431707fa133296cd987 Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Wed, 3 Sep 2025 18:25:34 +0000 Subject: [PATCH 20/45] Added coordinate passing through clicking on features --- public/Samples/live_docs/liveDocs_modal.js | 107 ++++++++++++--------- 1 file changed, 61 insertions(+), 46 deletions(-) diff --git a/public/Samples/live_docs/liveDocs_modal.js b/public/Samples/live_docs/liveDocs_modal.js index 5c40243..8b7a38c 100644 --- a/public/Samples/live_docs/liveDocs_modal.js +++ b/public/Samples/live_docs/liveDocs_modal.js @@ -90,20 +90,33 @@ export const LiveDocsModal = ({ open, plugin }) => { const feature = appRef.currentFeature; if (feature && activeParam) { const paramMeta = getSelectedFunctionParams().find(p => p.name === activeParam); - const isArrayMywFeature = - paramMeta && paramMeta.type.toLowerCase() === 'array'; + const type = paramMeta.type.toLowerCase(); - setParamValues(prev => { - if (isArrayMywFeature) { + if (type === 'myworldfeature') { + setParamValues(prev => ({ ...prev, [activeParam]: feature })); + } + else if (type === 'array') { + setParamValues(prev => { const current = Array.isArray(prev[activeParam]) ? prev[activeParam] : []; const alreadyExists = current.some(f => f.id === feature.id); return alreadyExists ? prev : { ...prev, [activeParam]: [...current, feature] }; - } else { - return { ...prev, [activeParam]: feature }; - } - }); + }); + } + else if (type === 'array') { + // one coordinate pair + const coords = feature.getGeometry().coordinates; + setParamValues(prev => ({ ...prev, [activeParam]: [coords[0], coords[1]] })); + } + else if (type === 'array>') { + // many coordinate pairs + const coords = feature.getGeometry().coordinates; + setParamValues(prev => { + const current = Array.isArray(prev[activeParam]) ? prev[activeParam] : []; + return { ...prev, [activeParam]: [...current, coords] }; + }); + } } } @@ -196,20 +209,20 @@ export const LiveDocsModal = ({ open, plugin }) => { } }; - const parseNestedArray = input => { - if (!input || typeof input !== 'string') return []; - - const safeInput = `[${input}]`; - try { - const parsed = JSON.parse(safeInput); - if (Array.isArray(parsed)) { - return parsed; - } - } catch (err) { - console.error('Invalid nested array format:', err); - } - return []; - }; + // const parseNestedArray = input => { + // if (!input || typeof input !== 'string') return []; + + // const safeInput = `[${input}]`; + // try { + // const parsed = JSON.parse(safeInput); + // if (Array.isArray(parsed)) { + // return parsed; + // } + // } catch (err) { + // console.error('Invalid nested array format:', err); + // } + // return []; + // }; const currentDictionary = pickedClass ? ApiFunctionDictionaries[pickedClass] : null; const currentDescription = @@ -334,10 +347,7 @@ export const LiveDocsModal = ({ open, plugin }) => { /> ); } - if ( - type.toLowerCase() === 'array' || - type.toLowerCase() === 'array' - ) { + if (type.toLowerCase() === 'array' ) { return ( { /> ); } - if (type.toLowerCase() === 'array') { - const features = Array.isArray(paramValues[name]) - ? paramValues[name] - : []; + if (type.toLowerCase() === 'array') + { + const coords = paramValues[name] || []; return ( f.id).join(', ')} + placeholder={`${name} (click feature to get [x, y])`} + value={coords.join(', ')} readOnly onFocus={() => setActiveParam(name)} /> ); } - if (type.toLowerCase().includes('array>'){ + const coordsArray = Array.isArray(paramValues[name]) ? paramValues[name] : []; return ( JSON.stringify(a)) - .join(', ') - : '' - } - onChange={e => { - const raw = e.target.value; - const nestedArray = parseNestedArray(raw); - handleParamChange(name, nestedArray); - }} + placeholder={`${name} (click multiple features to collect [[x,y], [x,y], ...])`} + value={coordsArray.map(c => `[${c[0]}, ${c[1]}]`).join('; ')} + readOnly + onFocus={() => setActiveParam(name)} + /> + ); + } + if (type.toLowerCase() === 'array') { + const features = Array.isArray(paramValues[name]) + ? paramValues[name] + : []; + return ( + f.id).join(', ')} + readOnly + onFocus={() => setActiveParam(name)} /> ); } From 33deefae5b478ab5761e32f8e1c1af5e44f553bb Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Thu, 4 Sep 2025 14:13:34 +0000 Subject: [PATCH 21/45] Allow optional parameters to execute function call --- public/Samples/live_docs/classes_dictionary.js | 6 +++--- public/Samples/live_docs/liveDocs_modal.js | 5 ++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/public/Samples/live_docs/classes_dictionary.js b/public/Samples/live_docs/classes_dictionary.js index c741e36..0abd284 100644 --- a/public/Samples/live_docs/classes_dictionary.js +++ b/public/Samples/live_docs/classes_dictionary.js @@ -88,7 +88,7 @@ export const StructureMenu = [ label: 'getStructuresAtCoords', params: [ { name: 'coords', type: 'Array>' }, - { name: 'featureTypes', type: 'Array' } + { name: 'featureTypes', type: 'Array', optional: true } ] }, { @@ -96,7 +96,7 @@ export const StructureMenu = [ label: 'getStructureAt', params: [ { name: 'coord', type: 'Array' }, - { name: 'featureTypes', type: 'Array' } + { name: 'featureTypes', type: 'Array', optional: true } ] }, { @@ -104,7 +104,7 @@ export const StructureMenu = [ label: 'getStructuresAt', params: [ { name: 'coord', type: 'Array' }, - { name: 'featureTypes', type: 'Array' }, + { name: 'featureTypes', type: 'Array', optional: true }, { name: 'tolerance', type: 'Number' } ] }, diff --git a/public/Samples/live_docs/liveDocs_modal.js b/public/Samples/live_docs/liveDocs_modal.js index 8b7a38c..a203f9a 100644 --- a/public/Samples/live_docs/liveDocs_modal.js +++ b/public/Samples/live_docs/liveDocs_modal.js @@ -77,14 +77,17 @@ export const LiveDocsModal = ({ open, plugin }) => { return []; }; + const allParamsFilled = React.useMemo(() => { if (!pickedFunction || !pickedClass) return false; const paramMeta = getSelectedFunctionParams(); return paramMeta.every( - ({ name }) => paramValues[name] !== undefined && paramValues[name] !== '' + ({ name, optional }) => + optional || (paramValues[name] !== undefined && paramValues[name] !== '') ); }, [pickedFunction, pickedClass, paramValues]); + useEffect(() => { function listener() { const feature = appRef.currentFeature; From ca9bc6ea8a3a97a4bc1a097f875c01a4e88c3d10 Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Thu, 4 Sep 2025 15:39:16 +0000 Subject: [PATCH 22/45] removed comments --- public/Samples/live_docs/liveDocs_modal.js | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/public/Samples/live_docs/liveDocs_modal.js b/public/Samples/live_docs/liveDocs_modal.js index a203f9a..11ddaa8 100644 --- a/public/Samples/live_docs/liveDocs_modal.js +++ b/public/Samples/live_docs/liveDocs_modal.js @@ -40,7 +40,6 @@ export const LiveDocsModal = ({ open, plugin }) => { cableApi: CableMenu, connectionApi: ConnectionMenu, circuitApi: CircuitMenu - // TODO: Add others }; const apiInstances = { structureApi: plugin.structureApi, @@ -49,7 +48,6 @@ export const LiveDocsModal = ({ open, plugin }) => { cableApi: plugin.cableApi, connectionApi: plugin.connectionApi, circuitApi: plugin.circuitApi - // TODO: Add others }; const ApiFunctionDictionaries = { structureApi: StructureDescriptions, @@ -211,21 +209,6 @@ export const LiveDocsModal = ({ open, plugin }) => { console.log('Function result:', result); } }; - - // const parseNestedArray = input => { - // if (!input || typeof input !== 'string') return []; - - // const safeInput = `[${input}]`; - // try { - // const parsed = JSON.parse(safeInput); - // if (Array.isArray(parsed)) { - // return parsed; - // } - // } catch (err) { - // console.error('Invalid nested array format:', err); - // } - // return []; - // }; const currentDictionary = pickedClass ? ApiFunctionDictionaries[pickedClass] : null; const currentDescription = From ad1d8c3bd1230d8d26c963379e650406922d1067 Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Thu, 4 Sep 2025 18:09:41 +0000 Subject: [PATCH 23/45] cleaned up modal, removed unnecessary checks --- public/Samples/live_docs/liveDocs_modal.js | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/public/Samples/live_docs/liveDocs_modal.js b/public/Samples/live_docs/liveDocs_modal.js index 11ddaa8..d410d14 100644 --- a/public/Samples/live_docs/liveDocs_modal.js +++ b/public/Samples/live_docs/liveDocs_modal.js @@ -106,12 +106,10 @@ export const LiveDocsModal = ({ open, plugin }) => { }); } else if (type === 'array') { - // one coordinate pair const coords = feature.getGeometry().coordinates; setParamValues(prev => ({ ...prev, [activeParam]: [coords[0], coords[1]] })); } else if (type === 'array>') { - // many coordinate pairs const coords = feature.getGeometry().coordinates; setParamValues(prev => { const current = Array.isArray(prev[activeParam]) ? prev[activeParam] : []; @@ -180,19 +178,6 @@ export const LiveDocsModal = ({ open, plugin }) => { console.log('Executing function:', pickedFunction, 'with params:', params); - if (pickedFunction.startsWith("is")) { - const featureParam = params[0]; - const fn = apiInstance[pickedFunction]; - - const isValid = fn.call(apiInstance, featureParam); - if (!isValid) { - alert(`Invalid feature passed to ${pickedFunction}`); - return; - } - // console.log(`${pickedFunction} validation passed`); - return; - } - const fn = apiInstance[pickedFunction]; if (typeof fn !== 'function') { console.warn(`${pickedFunction} is not a function on ${pickedClass}`); From 01b4c262b801bef54b904c68ee97c603ee12c3b0 Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Thu, 4 Sep 2025 18:16:05 +0000 Subject: [PATCH 24/45] added optional flag to all necessary parameters --- public/Samples/live_docs/classes_dictionary.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/public/Samples/live_docs/classes_dictionary.js b/public/Samples/live_docs/classes_dictionary.js index 0abd284..4b92540 100644 --- a/public/Samples/live_docs/classes_dictionary.js +++ b/public/Samples/live_docs/classes_dictionary.js @@ -674,7 +674,7 @@ export const CableMenu = [ { name: 'struct', type: 'MyWorldFeature' }, { name: 'cable', type: 'MyWorldFeature' }, { name: 'housingUrn', type: 'String' }, - { name: 'length', type: 'Number' } + { name: 'length', type: 'Number', optional: true } ] }, { @@ -727,7 +727,7 @@ export const CableMenu = [ params: [ { name: 'featureUrn', type: 'MyWorldFeature' }, { name: 'housing_field', type: 'String' }, - { name: 'splices', type: 'Boolean' } + { name: 'splices', type: 'Boolean', optional: true} ] }, { @@ -830,7 +830,7 @@ export const CableMenu = [ { name: 'struct', type: 'MyWorldFeature' }, { name: 'segment', type: 'MyWorldFeature' }, { name: 'forward', type: 'Boolean' }, - { name: 'spliceHousing', type: 'MyWorldFeature' } + { name: 'spliceHousing', type: 'MyWorldFeature', optional: true} ] }, { @@ -1434,7 +1434,7 @@ export const ConnectionMenu = [ { name: 'toFeature', type: 'MyWorldFeature' }, { name: 'toPins', type: 'PinRange' }, { name: 'housing', type: 'MyWorldFeature' }, - { name: 'ripple', type: 'Boolean' } + { name: 'ripple', type: 'Boolean', optional: true} ] }, { @@ -1444,7 +1444,7 @@ export const ConnectionMenu = [ { name: 'tech', type: 'String' }, { name: 'feature', type: 'MyWorldFeature' }, { name: 'pins', type: 'PinRange' }, - { name: 'ripple', type: 'Boolean' } + { name: 'ripple', type: 'Boolean', optional: true } ] }, { From f9376f2dacb661859bf0c3b3d7eeec33f5c9a82a Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Thu, 4 Sep 2025 20:21:28 +0000 Subject: [PATCH 25/45] added documentation folder --- .../NMT/Live Doc Sample/Live_Docs_Overview.md | 74 ++++++++++++++++++ .../Live Doc Sample/Live_Docs_Overview_1.png | Bin 0 -> 191530 bytes .../Live Doc Sample/Live_Docs_Overview_2.png | Bin 0 -> 211201 bytes .../Live Doc Sample/Live_Docs_Overview_3.png | Bin 0 -> 151251 bytes 4 files changed, 74 insertions(+) create mode 100644 Documents/NMT/Live Doc Sample/Live_Docs_Overview.md create mode 100644 Documents/NMT/Live Doc Sample/Live_Docs_Overview_1.png create mode 100644 Documents/NMT/Live Doc Sample/Live_Docs_Overview_2.png create mode 100644 Documents/NMT/Live Doc Sample/Live_Docs_Overview_3.png diff --git a/Documents/NMT/Live Doc Sample/Live_Docs_Overview.md b/Documents/NMT/Live Doc Sample/Live_Docs_Overview.md new file mode 100644 index 0000000..d27237e --- /dev/null +++ b/Documents/NMT/Live Doc Sample/Live_Docs_Overview.md @@ -0,0 +1,74 @@ +# Live Docs Sample - JavaScript - Overview + +## Table of Contents + +- [Live Docs Sample - JavaScript - Overview](#live-docs-sample---javascript---overview) + - [Table of Contents](#table-of-contents) + - [Tool Description](#tool-description) + - [How to use the tool](#how-to-use-the-tool) + +--- + +## Tool Description + +The **Live Docs Sample** is an interactive plugin that allows users to execute API functions with custom parameters from various IQGeo modules (Structure, Equipment, Conduit, Cable, Connection, and Circuit) directly from a modal interface in NMT. + +Key features: + +- **Function Selection:** Choose a class and a function from the available API menus. +- **Dynamic Parameter Inputs:** Input fields are automatically rendered based on the selected function’s parameter types (numbers, strings, booleans, arrays, features, transactions, or pin ranges). +- **Map Integration:** For feature-based parameters, users can select objects directly on the map. +- **Automatic Transaction Handling:** Transaction parameters are automatically created and committed after execution. +- **Real-Time Execution:** Functions are executed immediately with user-provided inputs, and results are logged in the console. +- **Support for Complex Types:** Handles nested arrays, objects, GeoJSON, and custom PinRange types. + +This tool is intended for those who want a **live, interactive way to explore API functionality** without writing custom scripts. + +--- + +## How to use the tool + +1. **Open the Live Docs Modal** + + Open the `LiveDocsPlugin` in the application. The modal will show an introductory description of the plugin. Click **OK** to proceed. + +2. **Select a Class and Function** + + - Use the first dropdown to select a class (e.g., `Structure API`, `Equipment API`, etc.). + - After selecting a class, a second dropdown will display available functions for that class. + - Selecting a function dynamically generates input fields for its parameters. + + ![Class Selection](./Live_Docs_Overview_1.png) + *Fig. 2: Class dropdown menus* + + ![Function Selection](./Live_Docs_Overview_2.png) + *Fig. 3: Function dropdown menus* + +3. **Fill in Parameter Values** + + - Input fields adjust based on parameter types: + + - **Number / String / Boolean:** Standard input or dropdown. + - **Feature / Array of Features:** Click on map objects to populate. + - **Array of Numbers / Array of Arrays:** Click on features to input coordinates. + - **Objects / JSON / GeoJSON:** Enter JSON directly into a text area. + - **PinRange:** Select side and define low/high pin numbers. + - **Transaction:** Automatically created; no user input required. + + - Ensure all required parameters are filled to enable the **Execute** button. + - Description of the function, parameters and return value is provided. + + ![Parameter Input Fields](./Live_Docs_Overview_3.png) + + *Fig. 3: Example of parameter inputs for `validateRoutesForConduit` function.* + +4. **Execute the Function** + + - Click the **Execute** button to run the selected function with the provided parameters. + - Function execution logs results in the console. + - Asynchronous functions will return results after their promise resolves. + +5. **Cancel or Exit** + + - Click the **Cancel** button to close the modal without executing any function. + - Switching between classes or functions resets parameter inputs automatically. diff --git a/Documents/NMT/Live Doc Sample/Live_Docs_Overview_1.png b/Documents/NMT/Live Doc Sample/Live_Docs_Overview_1.png new file mode 100644 index 0000000000000000000000000000000000000000..8129c3f6b32d376ca6c2c7e791bae7b2056226d1 GIT binary patch literal 191530 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�i(!E!%5L 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�?)CgEDdH+>SnpCelTZTT;0 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

gT--;=0UG1CVdwBvH-;MA+ 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%0AF2GbXM8DYwBP$Hl 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 G_x}K3u5>T} literal 0 HcmV?d00001 diff --git a/Documents/NMT/Live Doc Sample/Live_Docs_Overview_3.png b/Documents/NMT/Live Doc Sample/Live_Docs_Overview_3.png new file mode 100644 index 0000000000000000000000000000000000000000..7aa06b7f4b8d1dbae3943d10afac9b962cff2e97 GIT binary patch literal 151251 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

&wyL*Q5MCZDOcfXS$ESV%@#8M-R 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 Cy9)sT literal 0 HcmV?d00001 From 5e34f727709302a4f1b1e66850a6775bfa305690 Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Fri, 5 Sep 2025 16:50:21 +0000 Subject: [PATCH 26/45] cleaning up documentation --- Documents/NMT/Live Doc Sample/Live_Docs_Overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documents/NMT/Live Doc Sample/Live_Docs_Overview.md b/Documents/NMT/Live Doc Sample/Live_Docs_Overview.md index d27237e..9b226ba 100644 --- a/Documents/NMT/Live Doc Sample/Live_Docs_Overview.md +++ b/Documents/NMT/Live Doc Sample/Live_Docs_Overview.md @@ -22,7 +22,7 @@ Key features: - **Real-Time Execution:** Functions are executed immediately with user-provided inputs, and results are logged in the console. - **Support for Complex Types:** Handles nested arrays, objects, GeoJSON, and custom PinRange types. -This tool is intended for those who want a **live, interactive way to explore API functionality** without writing custom scripts. +This tool is intended for those who want an **interactive way to use API functionality** without writing custom scripts. --- From b35d7105eb91e000e04bf527ea91bd33a7e7001d Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Tue, 9 Sep 2025 19:51:54 +0000 Subject: [PATCH 27/45] Few fixes to documentation --- Documents/NMT/Live Doc Sample/Live_Docs_Overview.md | 10 +++++----- public/Samples/live_docs/liveDocs_modal_tsx.tsx | 8 +------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/Documents/NMT/Live Doc Sample/Live_Docs_Overview.md b/Documents/NMT/Live Doc Sample/Live_Docs_Overview.md index 9b226ba..7e8b972 100644 --- a/Documents/NMT/Live Doc Sample/Live_Docs_Overview.md +++ b/Documents/NMT/Live Doc Sample/Live_Docs_Overview.md @@ -1,8 +1,8 @@ -# Live Docs Sample - JavaScript - Overview +# Live Docs Sample - Overview ## Table of Contents -- [Live Docs Sample - JavaScript - Overview](#live-docs-sample---javascript---overview) +- [Live Docs Sample - Overview](#live-docs-sample---overview) - [Table of Contents](#table-of-contents) - [Tool Description](#tool-description) - [How to use the tool](#how-to-use-the-tool) @@ -39,10 +39,10 @@ This tool is intended for those who want an **interactive way to use API functio - Selecting a function dynamically generates input fields for its parameters. ![Class Selection](./Live_Docs_Overview_1.png) - *Fig. 2: Class dropdown menus* +

Fig. 2: Class dropdown menus ![Function Selection](./Live_Docs_Overview_2.png) - *Fig. 3: Function dropdown menus* +

Fig. 3: Function dropdown menus 3. **Fill in Parameter Values** @@ -60,7 +60,7 @@ This tool is intended for those who want an **interactive way to use API functio ![Parameter Input Fields](./Live_Docs_Overview_3.png) - *Fig. 3: Example of parameter inputs for `validateRoutesForConduit` function.* +

Fig. 3: Example of parameter inputs for `validateRoutesForConduit` function. 4. **Execute the Function** diff --git a/public/Samples/live_docs/liveDocs_modal_tsx.tsx b/public/Samples/live_docs/liveDocs_modal_tsx.tsx index aae19a2..a3f28df 100644 --- a/public/Samples/live_docs/liveDocs_modal_tsx.tsx +++ b/public/Samples/live_docs/liveDocs_modal_tsx.tsx @@ -21,13 +21,7 @@ import { import PinRange from 'modules/comms/js/api/pinRange'; -/* -converting to .tsx -1. add a props interface - live docs modals props -2. add types to all state variables -3. export with type annotations -4. ensure all imports are correct -*/ + interface LiveDocsModalProps { open: boolean; From fc4f08c7e4b39fef37f8b9152456c790ef4ec94b Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Tue, 16 Sep 2025 20:19:05 +0000 Subject: [PATCH 28/45] created new branch with reporting samples for pole attachment and conduit capacity --- .../reporting_samples/conduit_capacity.py | 126 ++++++++++++++++++ .../reporting_samples/pole_attachment.py | 81 +++++++++++ public/Samples/reporting_samples/utils.py | 70 ++++++++++ 3 files changed, 277 insertions(+) create mode 100644 public/Samples/reporting_samples/conduit_capacity.py create mode 100644 public/Samples/reporting_samples/pole_attachment.py create mode 100644 public/Samples/reporting_samples/utils.py diff --git a/public/Samples/reporting_samples/conduit_capacity.py b/public/Samples/reporting_samples/conduit_capacity.py new file mode 100644 index 0000000..d12c85c --- /dev/null +++ b/public/Samples/reporting_samples/conduit_capacity.py @@ -0,0 +1,126 @@ +#! /bin/env python3 + +import requests +import argparse +import json +from pathlib import Path +from utils import ( + iqgeo_jwt_auth, + iqgeo_interactive_ropc_auth, + iqgeo_get_request, + set_auth_cookies, + BASE_URL +) + + +def get_all_conduits(design): + """Get all conduits in the design""" + return iqgeo_get_request(f"{BASE_URL}/feature/conduit", design).get("features", []) + + +def get_cable_segments(conduit_id, design): + """Get cable segments related to a specific conduit""" + return iqgeo_get_request( + f"{BASE_URL}/feature/conduit/{conduit_id}/relationship/cable_segments", + design + ).get("features", []) + + +def get_cable_diameter(cable_ref, design): + """ Get cable diameter from cable properties + ref = e.g. fiber_cable/4 + """ + return ( + iqgeo_get_request(f"{BASE_URL}/feature/{cable_ref}", design) + .get("properties", {}) + .get("diameter") + ) + + +def calc_fill_ratio(conduit_diameter, cable_diameters): + """ + Calculate fill ratio and determine if within limits. + + Implementation of: + https://www.corning.com/optical-communications/worldwide/en/home/Resources/system-design-calculators/fill-ratio-calculator.html + """ + if not conduit_diameter or conduit_diameter == 0: + return None, None + ratio = sum(d**2 for d in cable_diameters) / (conduit_diameter**2) + + if len(cable_diameters) == 1: + limit = 0.65 + elif len(cable_diameters) == 2: + limit = 0.31 + elif len(cable_diameters) == 3: + limit = 0.40 + else: + limit = 1.0 + + return ratio, limit + + +def main(token_file, design): + """script entrypoint.""" + + cookies = iqgeo_jwt_auth(token_file) + + set_auth_cookies(cookies) + + capacity_report = {} + conduits = get_all_conduits(design) + + for conduit in conduits: + cid = conduit["properties"].get("id") + conduit_d = conduit["properties"].get("diameter") + + segments = get_cable_segments(cid, design) + cable_refs = { + seg["properties"].get("cable") + for seg in segments + if seg["properties"].get("cable") + } + + cable_diameters = [] + for cref in cable_refs: + d = get_cable_diameter(cref, design) + if d: + cable_diameters.append(d) + + # use the printed values to test + + ratio, limit = calc_fill_ratio(conduit_d, cable_diameters) + if ratio is None: + status = "No diameter data" + else: + percent = f"{ratio*100:.1f}%" + if ratio <= limit and ratio > 0: + status = f"{percent} (OK), cable count: {len(cable_refs)}" + elif ratio == 0: + status = f"{percent} (EMPTY), cable count: {len(cable_refs)}" + else: + status = f"{percent} (OVERFILL), cable count: {len(cable_refs)}" + + capacity_report[f"conduit/{cid}"] = status + + print(json.dumps(capacity_report, indent=2)) + + +if __name__ == "__main__": + # TODO: import argpase ... + parser = argparse.ArgumentParser(description="Conduit capacity report") + parser.add_argument( + "--token_file", + type=Path, + default="token.txt", + help="Path to the pre-generated JWT token" + ) + parser.add_argument( + "--design", + type=str, + default=None, + help="Design ID to use, e.g. design/2FMyDesign" + ) + args = parser.parse_args() + + main(token_file=args.token_file, design=args.design) \ No newline at end of file diff --git a/public/Samples/reporting_samples/pole_attachment.py b/public/Samples/reporting_samples/pole_attachment.py new file mode 100644 index 0000000..114dc64 --- /dev/null +++ b/public/Samples/reporting_samples/pole_attachment.py @@ -0,0 +1,81 @@ +#! /bin/env python3 + +import requests +import argparse +import json +from pathlib import Path +from utils import ( + iqgeo_jwt_auth, + iqgeo_interactive_ropc_auth, + iqgeo_get_request, + set_auth_cookies, + BASE_URL +) + + +def get_all_poles(design): + """Get all poles in the design""" + return iqgeo_get_request(f"{BASE_URL}/feature/pole", design).get("features", []) + + +def get_pole_equipment(pole_id, design): + """Get equipment attached to a specific pole""" + return iqgeo_get_request( + f"{BASE_URL}/feature/pole/{pole_id}/relationship/equipment", design + ).get("features", []) + + +def get_pole_routes(pole_id, design): + """Get routes associated with a specific pole""" + return iqgeo_get_request( + f"{BASE_URL}/feature/pole/{pole_id}/relationship/routes", design + ).get("features", []) + + +def main(token_file, design): + """script entrypoint.""" + + cookies = iqgeo_jwt_auth(token_file) # or iqgeo_interactive_ropc_auth() + set_auth_cookies(cookies) + + # custom report section + attachment_report = {} + poles = get_all_poles(design) + + for pole in poles: + pid = pole["properties"].get("id") + + equipment = get_pole_equipment(pid, design) + routes = get_pole_routes(pid, design) + + equip_list = [e["properties"].get("name") for e in equipment if e.get("properties")] + route_list = [r["properties"].get("id") for r in routes if r.get("properties")] + + attachment_report[f"pole/{pid}"] = { + "equipment_count": len(equip_list), + "equipment": equip_list, + "route_count": len(route_list), + "routes": route_list, + } + + print(json.dumps(attachment_report, indent=2)) + + +if __name__ == "__main__": + # TODO: import argpase ... + parser = argparse.ArgumentParser(description="Conduit capacity report") + parser.add_argument( + "--token_file", + type=Path, + default="token.txt", + help="Path to the pre-generated JWT token" + ) + parser.add_argument( + "--design", + type=str, + default=None, + help="Design ID to use, e.g. design/2FMyDesign" + ) + args = parser.parse_args() + + main(token_file=args.token_file, design=args.design) \ No newline at end of file diff --git a/public/Samples/reporting_samples/utils.py b/public/Samples/reporting_samples/utils.py new file mode 100644 index 0000000..3194ae7 --- /dev/null +++ b/public/Samples/reporting_samples/utils.py @@ -0,0 +1,70 @@ +#! /bin/env python3 + +import requests +from pathlib import Path + + +BASE_URL = "http://host.docker.internal" +LOGIN_URL = f"{BASE_URL}/auth" +SESSION = requests.Session() +HEADERS = {} + + +# Authentication helpers +def iqgeo_jwt_auth(token_file: Path): + """ + Prompt user for JWT token and then set the auth header. + """ + # TODO: use argparse to pass token file path + if not token_file.exists(): + raise FileNotFoundError(f"Token file not found: {token_file}") + + token = token_file.read_text().strip() + response = SESSION.post(LOGIN_URL, data={"id_token": token}) + response.raise_for_status() + return response.cookies.get_dict() + + +def iqgeo_interactive_ropc_auth(): + """ + Prompt user for credentials and then send AUTH request. + Raises exception if not authorized, returns the auth cookie on success. + """ + user = input("Enter username: ") + password = input("Enter password: ") + + uauth = {"user": user, "pass": password} + + response = SESSION.post(LOGIN_URL, data=uauth) + response.raise_for_status() + return response.cookies.get_dict() + + +def iqgeo_get_request(endpoint, design): + """ + Hit a GET endpoint using the auth cookie for this session. + + Raises HTTP errors, and returns the request body JSON. + """ + params = {"design": design} + r = SESSION.get(endpoint, headers=HEADERS, params=params) + r.raise_for_status() + return r.json() + + + +def iqgeo_post_request(endpoint, design): + """ + Hit a POST endpoint using the auth cookie for this session. + + Raises HTTP errors, and returns the request body JSON. + """ + params = {"design": design} + r = SESSION.post(endpoint, headers=HEADERS, params=params) + r.raise_for_status() + return r.json() + +def set_auth_cookies(cookies: dict): + HEADERS["cookie"] = ( + f"myworldapp={cookies['myworldapp']}; csrf_token={cookies['csrf_token']}" + ) From aa18c4750672039a1d5b5943ffa515b37aae982d Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Wed, 17 Sep 2025 13:54:34 +0000 Subject: [PATCH 29/45] added get all features to lib --- public/Samples/reporting_samples/conduit_capacity.py | 9 +++++---- public/Samples/reporting_samples/pole_attachment.py | 9 +++++---- public/Samples/reporting_samples/token.txt | 1 + public/Samples/reporting_samples/utils.py | 4 ++++ 4 files changed, 15 insertions(+), 8 deletions(-) create mode 100644 public/Samples/reporting_samples/token.txt diff --git a/public/Samples/reporting_samples/conduit_capacity.py b/public/Samples/reporting_samples/conduit_capacity.py index d12c85c..a04c4b4 100644 --- a/public/Samples/reporting_samples/conduit_capacity.py +++ b/public/Samples/reporting_samples/conduit_capacity.py @@ -9,13 +9,14 @@ iqgeo_interactive_ropc_auth, iqgeo_get_request, set_auth_cookies, + get_all_features, BASE_URL ) -def get_all_conduits(design): - """Get all conduits in the design""" - return iqgeo_get_request(f"{BASE_URL}/feature/conduit", design).get("features", []) +# def get_all_conduits(design): +# """Get all conduits in the design""" +# return iqgeo_get_request(f"{BASE_URL}/feature/conduit", design).get("features", []) def get_cable_segments(conduit_id, design): @@ -68,7 +69,7 @@ def main(token_file, design): set_auth_cookies(cookies) capacity_report = {} - conduits = get_all_conduits(design) + conduits = get_all_features(feature_type="conduit", design=design) for conduit in conduits: cid = conduit["properties"].get("id") diff --git a/public/Samples/reporting_samples/pole_attachment.py b/public/Samples/reporting_samples/pole_attachment.py index 114dc64..c68605b 100644 --- a/public/Samples/reporting_samples/pole_attachment.py +++ b/public/Samples/reporting_samples/pole_attachment.py @@ -9,13 +9,14 @@ iqgeo_interactive_ropc_auth, iqgeo_get_request, set_auth_cookies, + get_all_features, BASE_URL ) -def get_all_poles(design): - """Get all poles in the design""" - return iqgeo_get_request(f"{BASE_URL}/feature/pole", design).get("features", []) +# def get_all_poles(design): +# """Get all poles in the design""" +# return iqgeo_get_request(f"{BASE_URL}/feature/pole", design).get("features", []) def get_pole_equipment(pole_id, design): @@ -40,7 +41,7 @@ def main(token_file, design): # custom report section attachment_report = {} - poles = get_all_poles(design) + poles = get_all_features(feature_type="pole", design=design) for pole in poles: pid = pole["properties"].get("id") diff --git a/public/Samples/reporting_samples/token.txt b/public/Samples/reporting_samples/token.txt new file mode 100644 index 0000000..3ca9134 --- /dev/null +++ b/public/Samples/reporting_samples/token.txt @@ -0,0 +1 @@ +eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJJUUdlbyIsImF1ZCI6IklRR2VvIiwiaWF0IjoxNzU3NjA5MTg0LCJleHAiOjE3ODkwODQ4MDAsInByZWZlcnJlZF91c2VybmFtZSI6ImFkbWluIiwicm9sZXMiOlsiQWRtaW5pc3RyYXRvciJdfQ.J6xL-Qt7U1SUfH_cZo0gYg_qCFo0jJ9tM1ELXgjeSQbxRacwEl_5MIU1Y-Sz8r9PLAPLkH89aOW07dXPtw5algDrL6jTsc6osc9BouJHATitjFHUvJoFMnMzVGWVfrlTvSBcqSHQr49u8-AhwHMVSgH7QiBrO5hbfTnt6voZGJuySo4avtD8C_hF6n5K6kW_4zQErroUlBkIje9yO2mT8Y0OfX-gaDSCTonJtoq3Ny3_UKgDS2DIQG7TxIhkisHat2bi_7GBekLx82VOrroHo7c39Qd2yUmE5uj5cfwiF7O2sHeb4Sut_0BDvXEylrpXDWyqxRlwidw_nF-e8NYVBw \ No newline at end of file diff --git a/public/Samples/reporting_samples/utils.py b/public/Samples/reporting_samples/utils.py index 3194ae7..43e639a 100644 --- a/public/Samples/reporting_samples/utils.py +++ b/public/Samples/reporting_samples/utils.py @@ -9,6 +9,10 @@ SESSION = requests.Session() HEADERS = {} +def get_all_features(feature_type, design): + """Get all features of a specific type in the design""" + return iqgeo_get_request(f"{BASE_URL}/feature/{feature_type}", design).get("features", []) + # Authentication helpers def iqgeo_jwt_auth(token_file: Path): From 28fb4cdd186ffdb55eacf3798078b4d75de90b13 Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Wed, 17 Sep 2025 14:49:47 +0000 Subject: [PATCH 30/45] removed token.txt --- .../Samples/reporting_samples/conduit_capacity.py | 5 ----- public/Samples/reporting_samples/pole_attachment.py | 5 ----- public/Samples/reporting_samples/token.txt | 1 - public/Samples/reporting_samples/utils.py | 13 ++++++++----- 4 files changed, 8 insertions(+), 16 deletions(-) delete mode 100644 public/Samples/reporting_samples/token.txt diff --git a/public/Samples/reporting_samples/conduit_capacity.py b/public/Samples/reporting_samples/conduit_capacity.py index a04c4b4..5c9e796 100644 --- a/public/Samples/reporting_samples/conduit_capacity.py +++ b/public/Samples/reporting_samples/conduit_capacity.py @@ -14,11 +14,6 @@ ) -# def get_all_conduits(design): -# """Get all conduits in the design""" -# return iqgeo_get_request(f"{BASE_URL}/feature/conduit", design).get("features", []) - - def get_cable_segments(conduit_id, design): """Get cable segments related to a specific conduit""" return iqgeo_get_request( diff --git a/public/Samples/reporting_samples/pole_attachment.py b/public/Samples/reporting_samples/pole_attachment.py index c68605b..258ba53 100644 --- a/public/Samples/reporting_samples/pole_attachment.py +++ b/public/Samples/reporting_samples/pole_attachment.py @@ -14,11 +14,6 @@ ) -# def get_all_poles(design): -# """Get all poles in the design""" -# return iqgeo_get_request(f"{BASE_URL}/feature/pole", design).get("features", []) - - def get_pole_equipment(pole_id, design): """Get equipment attached to a specific pole""" return iqgeo_get_request( diff --git a/public/Samples/reporting_samples/token.txt b/public/Samples/reporting_samples/token.txt deleted file mode 100644 index 3ca9134..0000000 --- a/public/Samples/reporting_samples/token.txt +++ /dev/null @@ -1 +0,0 @@ -eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJJUUdlbyIsImF1ZCI6IklRR2VvIiwiaWF0IjoxNzU3NjA5MTg0LCJleHAiOjE3ODkwODQ4MDAsInByZWZlcnJlZF91c2VybmFtZSI6ImFkbWluIiwicm9sZXMiOlsiQWRtaW5pc3RyYXRvciJdfQ.J6xL-Qt7U1SUfH_cZo0gYg_qCFo0jJ9tM1ELXgjeSQbxRacwEl_5MIU1Y-Sz8r9PLAPLkH89aOW07dXPtw5algDrL6jTsc6osc9BouJHATitjFHUvJoFMnMzVGWVfrlTvSBcqSHQr49u8-AhwHMVSgH7QiBrO5hbfTnt6voZGJuySo4avtD8C_hF6n5K6kW_4zQErroUlBkIje9yO2mT8Y0OfX-gaDSCTonJtoq3Ny3_UKgDS2DIQG7TxIhkisHat2bi_7GBekLx82VOrroHo7c39Qd2yUmE5uj5cfwiF7O2sHeb4Sut_0BDvXEylrpXDWyqxRlwidw_nF-e8NYVBw \ No newline at end of file diff --git a/public/Samples/reporting_samples/utils.py b/public/Samples/reporting_samples/utils.py index 43e639a..fff8cc7 100644 --- a/public/Samples/reporting_samples/utils.py +++ b/public/Samples/reporting_samples/utils.py @@ -9,10 +9,6 @@ SESSION = requests.Session() HEADERS = {} -def get_all_features(feature_type, design): - """Get all features of a specific type in the design""" - return iqgeo_get_request(f"{BASE_URL}/feature/{feature_type}", design).get("features", []) - # Authentication helpers def iqgeo_jwt_auth(token_file: Path): @@ -44,6 +40,13 @@ def iqgeo_interactive_ropc_auth(): return response.cookies.get_dict() + +def get_all_features(feature_type, design): + """Get all features of a specific type in the design""" + return iqgeo_get_request(f"{BASE_URL}/feature/{feature_type}", design).get("features", []) + + + def iqgeo_get_request(endpoint, design): """ Hit a GET endpoint using the auth cookie for this session. @@ -56,7 +59,6 @@ def iqgeo_get_request(endpoint, design): return r.json() - def iqgeo_post_request(endpoint, design): """ Hit a POST endpoint using the auth cookie for this session. @@ -68,6 +70,7 @@ def iqgeo_post_request(endpoint, design): r.raise_for_status() return r.json() + def set_auth_cookies(cookies: dict): HEADERS["cookie"] = ( f"myworldapp={cookies['myworldapp']}; csrf_token={cookies['csrf_token']}" From 5ede881744b4c4e4cbe6f261e0cef4007ae4350a Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Wed, 17 Sep 2025 15:27:39 +0000 Subject: [PATCH 31/45] added equipment housing and route in/out structure to output --- .../reporting_samples/pole_attachment.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/public/Samples/reporting_samples/pole_attachment.py b/public/Samples/reporting_samples/pole_attachment.py index 258ba53..ae4ed6d 100644 --- a/public/Samples/reporting_samples/pole_attachment.py +++ b/public/Samples/reporting_samples/pole_attachment.py @@ -28,6 +28,7 @@ def get_pole_routes(pole_id, design): ).get("features", []) + def main(token_file, design): """script entrypoint.""" @@ -44,8 +45,22 @@ def main(token_file, design): equipment = get_pole_equipment(pid, design) routes = get_pole_routes(pid, design) - equip_list = [e["properties"].get("name") for e in equipment if e.get("properties")] - route_list = [r["properties"].get("id") for r in routes if r.get("properties")] + equip_list = [ + { + "id": e["properties"].get("name"), + "root_housing": e["properties"].get("root_housing") + } + for e in equipment if e.get("properties") + ] + + route_list = [ + { + "id": r["properties"].get("id"), + "in_structure": r["properties"].get("in_structure"), + "out_structure": r["properties"].get("out_structure") + } + for r in routes if r.get("properties") + ] attachment_report[f"pole/{pid}"] = { "equipment_count": len(equip_list), From 8b5a8de7545dc6fba867800ba5028f9d6833ae70 Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Wed, 17 Sep 2025 16:13:20 +0000 Subject: [PATCH 32/45] removed helper function --- public/Samples/reporting_samples/pole_attachment.py | 1 + 1 file changed, 1 insertion(+) diff --git a/public/Samples/reporting_samples/pole_attachment.py b/public/Samples/reporting_samples/pole_attachment.py index ae4ed6d..1a1e695 100644 --- a/public/Samples/reporting_samples/pole_attachment.py +++ b/public/Samples/reporting_samples/pole_attachment.py @@ -56,6 +56,7 @@ def main(token_file, design): route_list = [ { "id": r["properties"].get("id"), + # f"route/{r["properties"].get("id")}": r["features"].get("myw").get("feature_type"), "in_structure": r["properties"].get("in_structure"), "out_structure": r["properties"].get("out_structure") } From fd9eb466299bb4b844893f67088e420babe4a5f7 Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Wed, 17 Sep 2025 20:56:13 +0000 Subject: [PATCH 33/45] cleaned up some code --- public/Samples/reporting_samples/conduit_capacity.py | 1 - 1 file changed, 1 deletion(-) diff --git a/public/Samples/reporting_samples/conduit_capacity.py b/public/Samples/reporting_samples/conduit_capacity.py index 5c9e796..9806b6c 100644 --- a/public/Samples/reporting_samples/conduit_capacity.py +++ b/public/Samples/reporting_samples/conduit_capacity.py @@ -84,7 +84,6 @@ def main(token_file, design): cable_diameters.append(d) # use the printed values to test - ratio, limit = calc_fill_ratio(conduit_d, cable_diameters) if ratio is None: status = "No diameter data" From 50ac735793ba103b9c9f8bc9769474906f5d53a4 Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Tue, 16 Sep 2025 20:19:05 +0000 Subject: [PATCH 34/45] created new branch with reporting samples for pole attachment and conduit capacity --- .../reporting_samples/conduit_capacity.py | 126 ++++++++++++++++++ .../reporting_samples/pole_attachment.py | 81 +++++++++++ public/Samples/reporting_samples/utils.py | 70 ++++++++++ 3 files changed, 277 insertions(+) create mode 100644 public/Samples/reporting_samples/conduit_capacity.py create mode 100644 public/Samples/reporting_samples/pole_attachment.py create mode 100644 public/Samples/reporting_samples/utils.py diff --git a/public/Samples/reporting_samples/conduit_capacity.py b/public/Samples/reporting_samples/conduit_capacity.py new file mode 100644 index 0000000..d12c85c --- /dev/null +++ b/public/Samples/reporting_samples/conduit_capacity.py @@ -0,0 +1,126 @@ +#! /bin/env python3 + +import requests +import argparse +import json +from pathlib import Path +from utils import ( + iqgeo_jwt_auth, + iqgeo_interactive_ropc_auth, + iqgeo_get_request, + set_auth_cookies, + BASE_URL +) + + +def get_all_conduits(design): + """Get all conduits in the design""" + return iqgeo_get_request(f"{BASE_URL}/feature/conduit", design).get("features", []) + + +def get_cable_segments(conduit_id, design): + """Get cable segments related to a specific conduit""" + return iqgeo_get_request( + f"{BASE_URL}/feature/conduit/{conduit_id}/relationship/cable_segments", + design + ).get("features", []) + + +def get_cable_diameter(cable_ref, design): + """ Get cable diameter from cable properties + ref = e.g. fiber_cable/4 + """ + return ( + iqgeo_get_request(f"{BASE_URL}/feature/{cable_ref}", design) + .get("properties", {}) + .get("diameter") + ) + + +def calc_fill_ratio(conduit_diameter, cable_diameters): + """ + Calculate fill ratio and determine if within limits. + + Implementation of: + https://www.corning.com/optical-communications/worldwide/en/home/Resources/system-design-calculators/fill-ratio-calculator.html + """ + if not conduit_diameter or conduit_diameter == 0: + return None, None + ratio = sum(d**2 for d in cable_diameters) / (conduit_diameter**2) + + if len(cable_diameters) == 1: + limit = 0.65 + elif len(cable_diameters) == 2: + limit = 0.31 + elif len(cable_diameters) == 3: + limit = 0.40 + else: + limit = 1.0 + + return ratio, limit + + +def main(token_file, design): + """script entrypoint.""" + + cookies = iqgeo_jwt_auth(token_file) + + set_auth_cookies(cookies) + + capacity_report = {} + conduits = get_all_conduits(design) + + for conduit in conduits: + cid = conduit["properties"].get("id") + conduit_d = conduit["properties"].get("diameter") + + segments = get_cable_segments(cid, design) + cable_refs = { + seg["properties"].get("cable") + for seg in segments + if seg["properties"].get("cable") + } + + cable_diameters = [] + for cref in cable_refs: + d = get_cable_diameter(cref, design) + if d: + cable_diameters.append(d) + + # use the printed values to test + + ratio, limit = calc_fill_ratio(conduit_d, cable_diameters) + if ratio is None: + status = "No diameter data" + else: + percent = f"{ratio*100:.1f}%" + if ratio <= limit and ratio > 0: + status = f"{percent} (OK), cable count: {len(cable_refs)}" + elif ratio == 0: + status = f"{percent} (EMPTY), cable count: {len(cable_refs)}" + else: + status = f"{percent} (OVERFILL), cable count: {len(cable_refs)}" + + capacity_report[f"conduit/{cid}"] = status + + print(json.dumps(capacity_report, indent=2)) + + +if __name__ == "__main__": + # TODO: import argpase ... + parser = argparse.ArgumentParser(description="Conduit capacity report") + parser.add_argument( + "--token_file", + type=Path, + default="token.txt", + help="Path to the pre-generated JWT token" + ) + parser.add_argument( + "--design", + type=str, + default=None, + help="Design ID to use, e.g. design/2FMyDesign" + ) + args = parser.parse_args() + + main(token_file=args.token_file, design=args.design) \ No newline at end of file diff --git a/public/Samples/reporting_samples/pole_attachment.py b/public/Samples/reporting_samples/pole_attachment.py new file mode 100644 index 0000000..114dc64 --- /dev/null +++ b/public/Samples/reporting_samples/pole_attachment.py @@ -0,0 +1,81 @@ +#! /bin/env python3 + +import requests +import argparse +import json +from pathlib import Path +from utils import ( + iqgeo_jwt_auth, + iqgeo_interactive_ropc_auth, + iqgeo_get_request, + set_auth_cookies, + BASE_URL +) + + +def get_all_poles(design): + """Get all poles in the design""" + return iqgeo_get_request(f"{BASE_URL}/feature/pole", design).get("features", []) + + +def get_pole_equipment(pole_id, design): + """Get equipment attached to a specific pole""" + return iqgeo_get_request( + f"{BASE_URL}/feature/pole/{pole_id}/relationship/equipment", design + ).get("features", []) + + +def get_pole_routes(pole_id, design): + """Get routes associated with a specific pole""" + return iqgeo_get_request( + f"{BASE_URL}/feature/pole/{pole_id}/relationship/routes", design + ).get("features", []) + + +def main(token_file, design): + """script entrypoint.""" + + cookies = iqgeo_jwt_auth(token_file) # or iqgeo_interactive_ropc_auth() + set_auth_cookies(cookies) + + # custom report section + attachment_report = {} + poles = get_all_poles(design) + + for pole in poles: + pid = pole["properties"].get("id") + + equipment = get_pole_equipment(pid, design) + routes = get_pole_routes(pid, design) + + equip_list = [e["properties"].get("name") for e in equipment if e.get("properties")] + route_list = [r["properties"].get("id") for r in routes if r.get("properties")] + + attachment_report[f"pole/{pid}"] = { + "equipment_count": len(equip_list), + "equipment": equip_list, + "route_count": len(route_list), + "routes": route_list, + } + + print(json.dumps(attachment_report, indent=2)) + + +if __name__ == "__main__": + # TODO: import argpase ... + parser = argparse.ArgumentParser(description="Conduit capacity report") + parser.add_argument( + "--token_file", + type=Path, + default="token.txt", + help="Path to the pre-generated JWT token" + ) + parser.add_argument( + "--design", + type=str, + default=None, + help="Design ID to use, e.g. design/2FMyDesign" + ) + args = parser.parse_args() + + main(token_file=args.token_file, design=args.design) \ No newline at end of file diff --git a/public/Samples/reporting_samples/utils.py b/public/Samples/reporting_samples/utils.py new file mode 100644 index 0000000..3194ae7 --- /dev/null +++ b/public/Samples/reporting_samples/utils.py @@ -0,0 +1,70 @@ +#! /bin/env python3 + +import requests +from pathlib import Path + + +BASE_URL = "http://host.docker.internal" +LOGIN_URL = f"{BASE_URL}/auth" +SESSION = requests.Session() +HEADERS = {} + + +# Authentication helpers +def iqgeo_jwt_auth(token_file: Path): + """ + Prompt user for JWT token and then set the auth header. + """ + # TODO: use argparse to pass token file path + if not token_file.exists(): + raise FileNotFoundError(f"Token file not found: {token_file}") + + token = token_file.read_text().strip() + response = SESSION.post(LOGIN_URL, data={"id_token": token}) + response.raise_for_status() + return response.cookies.get_dict() + + +def iqgeo_interactive_ropc_auth(): + """ + Prompt user for credentials and then send AUTH request. + Raises exception if not authorized, returns the auth cookie on success. + """ + user = input("Enter username: ") + password = input("Enter password: ") + + uauth = {"user": user, "pass": password} + + response = SESSION.post(LOGIN_URL, data=uauth) + response.raise_for_status() + return response.cookies.get_dict() + + +def iqgeo_get_request(endpoint, design): + """ + Hit a GET endpoint using the auth cookie for this session. + + Raises HTTP errors, and returns the request body JSON. + """ + params = {"design": design} + r = SESSION.get(endpoint, headers=HEADERS, params=params) + r.raise_for_status() + return r.json() + + + +def iqgeo_post_request(endpoint, design): + """ + Hit a POST endpoint using the auth cookie for this session. + + Raises HTTP errors, and returns the request body JSON. + """ + params = {"design": design} + r = SESSION.post(endpoint, headers=HEADERS, params=params) + r.raise_for_status() + return r.json() + +def set_auth_cookies(cookies: dict): + HEADERS["cookie"] = ( + f"myworldapp={cookies['myworldapp']}; csrf_token={cookies['csrf_token']}" + ) From db4ea0ff166e68291a849c5333c33b4ba00c8596 Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Wed, 17 Sep 2025 13:54:34 +0000 Subject: [PATCH 35/45] added get all features to lib --- public/Samples/reporting_samples/conduit_capacity.py | 9 +++++---- public/Samples/reporting_samples/pole_attachment.py | 9 +++++---- public/Samples/reporting_samples/token.txt | 1 + public/Samples/reporting_samples/utils.py | 4 ++++ 4 files changed, 15 insertions(+), 8 deletions(-) create mode 100644 public/Samples/reporting_samples/token.txt diff --git a/public/Samples/reporting_samples/conduit_capacity.py b/public/Samples/reporting_samples/conduit_capacity.py index d12c85c..a04c4b4 100644 --- a/public/Samples/reporting_samples/conduit_capacity.py +++ b/public/Samples/reporting_samples/conduit_capacity.py @@ -9,13 +9,14 @@ iqgeo_interactive_ropc_auth, iqgeo_get_request, set_auth_cookies, + get_all_features, BASE_URL ) -def get_all_conduits(design): - """Get all conduits in the design""" - return iqgeo_get_request(f"{BASE_URL}/feature/conduit", design).get("features", []) +# def get_all_conduits(design): +# """Get all conduits in the design""" +# return iqgeo_get_request(f"{BASE_URL}/feature/conduit", design).get("features", []) def get_cable_segments(conduit_id, design): @@ -68,7 +69,7 @@ def main(token_file, design): set_auth_cookies(cookies) capacity_report = {} - conduits = get_all_conduits(design) + conduits = get_all_features(feature_type="conduit", design=design) for conduit in conduits: cid = conduit["properties"].get("id") diff --git a/public/Samples/reporting_samples/pole_attachment.py b/public/Samples/reporting_samples/pole_attachment.py index 114dc64..c68605b 100644 --- a/public/Samples/reporting_samples/pole_attachment.py +++ b/public/Samples/reporting_samples/pole_attachment.py @@ -9,13 +9,14 @@ iqgeo_interactive_ropc_auth, iqgeo_get_request, set_auth_cookies, + get_all_features, BASE_URL ) -def get_all_poles(design): - """Get all poles in the design""" - return iqgeo_get_request(f"{BASE_URL}/feature/pole", design).get("features", []) +# def get_all_poles(design): +# """Get all poles in the design""" +# return iqgeo_get_request(f"{BASE_URL}/feature/pole", design).get("features", []) def get_pole_equipment(pole_id, design): @@ -40,7 +41,7 @@ def main(token_file, design): # custom report section attachment_report = {} - poles = get_all_poles(design) + poles = get_all_features(feature_type="pole", design=design) for pole in poles: pid = pole["properties"].get("id") diff --git a/public/Samples/reporting_samples/token.txt b/public/Samples/reporting_samples/token.txt new file mode 100644 index 0000000..3ca9134 --- /dev/null +++ b/public/Samples/reporting_samples/token.txt @@ -0,0 +1 @@ +eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJJUUdlbyIsImF1ZCI6IklRR2VvIiwiaWF0IjoxNzU3NjA5MTg0LCJleHAiOjE3ODkwODQ4MDAsInByZWZlcnJlZF91c2VybmFtZSI6ImFkbWluIiwicm9sZXMiOlsiQWRtaW5pc3RyYXRvciJdfQ.J6xL-Qt7U1SUfH_cZo0gYg_qCFo0jJ9tM1ELXgjeSQbxRacwEl_5MIU1Y-Sz8r9PLAPLkH89aOW07dXPtw5algDrL6jTsc6osc9BouJHATitjFHUvJoFMnMzVGWVfrlTvSBcqSHQr49u8-AhwHMVSgH7QiBrO5hbfTnt6voZGJuySo4avtD8C_hF6n5K6kW_4zQErroUlBkIje9yO2mT8Y0OfX-gaDSCTonJtoq3Ny3_UKgDS2DIQG7TxIhkisHat2bi_7GBekLx82VOrroHo7c39Qd2yUmE5uj5cfwiF7O2sHeb4Sut_0BDvXEylrpXDWyqxRlwidw_nF-e8NYVBw \ No newline at end of file diff --git a/public/Samples/reporting_samples/utils.py b/public/Samples/reporting_samples/utils.py index 3194ae7..43e639a 100644 --- a/public/Samples/reporting_samples/utils.py +++ b/public/Samples/reporting_samples/utils.py @@ -9,6 +9,10 @@ SESSION = requests.Session() HEADERS = {} +def get_all_features(feature_type, design): + """Get all features of a specific type in the design""" + return iqgeo_get_request(f"{BASE_URL}/feature/{feature_type}", design).get("features", []) + # Authentication helpers def iqgeo_jwt_auth(token_file: Path): From f2f9420058da1ba6e7e3fbf64b42db8bc5266ed1 Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Wed, 17 Sep 2025 14:49:47 +0000 Subject: [PATCH 36/45] removed token.txt --- .../Samples/reporting_samples/conduit_capacity.py | 5 ----- public/Samples/reporting_samples/pole_attachment.py | 5 ----- public/Samples/reporting_samples/token.txt | 1 - public/Samples/reporting_samples/utils.py | 13 ++++++++----- 4 files changed, 8 insertions(+), 16 deletions(-) delete mode 100644 public/Samples/reporting_samples/token.txt diff --git a/public/Samples/reporting_samples/conduit_capacity.py b/public/Samples/reporting_samples/conduit_capacity.py index a04c4b4..5c9e796 100644 --- a/public/Samples/reporting_samples/conduit_capacity.py +++ b/public/Samples/reporting_samples/conduit_capacity.py @@ -14,11 +14,6 @@ ) -# def get_all_conduits(design): -# """Get all conduits in the design""" -# return iqgeo_get_request(f"{BASE_URL}/feature/conduit", design).get("features", []) - - def get_cable_segments(conduit_id, design): """Get cable segments related to a specific conduit""" return iqgeo_get_request( diff --git a/public/Samples/reporting_samples/pole_attachment.py b/public/Samples/reporting_samples/pole_attachment.py index c68605b..258ba53 100644 --- a/public/Samples/reporting_samples/pole_attachment.py +++ b/public/Samples/reporting_samples/pole_attachment.py @@ -14,11 +14,6 @@ ) -# def get_all_poles(design): -# """Get all poles in the design""" -# return iqgeo_get_request(f"{BASE_URL}/feature/pole", design).get("features", []) - - def get_pole_equipment(pole_id, design): """Get equipment attached to a specific pole""" return iqgeo_get_request( diff --git a/public/Samples/reporting_samples/token.txt b/public/Samples/reporting_samples/token.txt deleted file mode 100644 index 3ca9134..0000000 --- a/public/Samples/reporting_samples/token.txt +++ /dev/null @@ -1 +0,0 @@ -eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJJUUdlbyIsImF1ZCI6IklRR2VvIiwiaWF0IjoxNzU3NjA5MTg0LCJleHAiOjE3ODkwODQ4MDAsInByZWZlcnJlZF91c2VybmFtZSI6ImFkbWluIiwicm9sZXMiOlsiQWRtaW5pc3RyYXRvciJdfQ.J6xL-Qt7U1SUfH_cZo0gYg_qCFo0jJ9tM1ELXgjeSQbxRacwEl_5MIU1Y-Sz8r9PLAPLkH89aOW07dXPtw5algDrL6jTsc6osc9BouJHATitjFHUvJoFMnMzVGWVfrlTvSBcqSHQr49u8-AhwHMVSgH7QiBrO5hbfTnt6voZGJuySo4avtD8C_hF6n5K6kW_4zQErroUlBkIje9yO2mT8Y0OfX-gaDSCTonJtoq3Ny3_UKgDS2DIQG7TxIhkisHat2bi_7GBekLx82VOrroHo7c39Qd2yUmE5uj5cfwiF7O2sHeb4Sut_0BDvXEylrpXDWyqxRlwidw_nF-e8NYVBw \ No newline at end of file diff --git a/public/Samples/reporting_samples/utils.py b/public/Samples/reporting_samples/utils.py index 43e639a..fff8cc7 100644 --- a/public/Samples/reporting_samples/utils.py +++ b/public/Samples/reporting_samples/utils.py @@ -9,10 +9,6 @@ SESSION = requests.Session() HEADERS = {} -def get_all_features(feature_type, design): - """Get all features of a specific type in the design""" - return iqgeo_get_request(f"{BASE_URL}/feature/{feature_type}", design).get("features", []) - # Authentication helpers def iqgeo_jwt_auth(token_file: Path): @@ -44,6 +40,13 @@ def iqgeo_interactive_ropc_auth(): return response.cookies.get_dict() + +def get_all_features(feature_type, design): + """Get all features of a specific type in the design""" + return iqgeo_get_request(f"{BASE_URL}/feature/{feature_type}", design).get("features", []) + + + def iqgeo_get_request(endpoint, design): """ Hit a GET endpoint using the auth cookie for this session. @@ -56,7 +59,6 @@ def iqgeo_get_request(endpoint, design): return r.json() - def iqgeo_post_request(endpoint, design): """ Hit a POST endpoint using the auth cookie for this session. @@ -68,6 +70,7 @@ def iqgeo_post_request(endpoint, design): r.raise_for_status() return r.json() + def set_auth_cookies(cookies: dict): HEADERS["cookie"] = ( f"myworldapp={cookies['myworldapp']}; csrf_token={cookies['csrf_token']}" From a83745f71b72b8729fdc4ca324923bd85e3ce171 Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Wed, 17 Sep 2025 15:27:39 +0000 Subject: [PATCH 37/45] added equipment housing and route in/out structure to output --- .../reporting_samples/pole_attachment.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/public/Samples/reporting_samples/pole_attachment.py b/public/Samples/reporting_samples/pole_attachment.py index 258ba53..ae4ed6d 100644 --- a/public/Samples/reporting_samples/pole_attachment.py +++ b/public/Samples/reporting_samples/pole_attachment.py @@ -28,6 +28,7 @@ def get_pole_routes(pole_id, design): ).get("features", []) + def main(token_file, design): """script entrypoint.""" @@ -44,8 +45,22 @@ def main(token_file, design): equipment = get_pole_equipment(pid, design) routes = get_pole_routes(pid, design) - equip_list = [e["properties"].get("name") for e in equipment if e.get("properties")] - route_list = [r["properties"].get("id") for r in routes if r.get("properties")] + equip_list = [ + { + "id": e["properties"].get("name"), + "root_housing": e["properties"].get("root_housing") + } + for e in equipment if e.get("properties") + ] + + route_list = [ + { + "id": r["properties"].get("id"), + "in_structure": r["properties"].get("in_structure"), + "out_structure": r["properties"].get("out_structure") + } + for r in routes if r.get("properties") + ] attachment_report[f"pole/{pid}"] = { "equipment_count": len(equip_list), From d632df69bc944281a0106bd6e61ba13728b33209 Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Wed, 17 Sep 2025 16:13:20 +0000 Subject: [PATCH 38/45] removed helper function --- public/Samples/reporting_samples/pole_attachment.py | 1 + 1 file changed, 1 insertion(+) diff --git a/public/Samples/reporting_samples/pole_attachment.py b/public/Samples/reporting_samples/pole_attachment.py index ae4ed6d..1a1e695 100644 --- a/public/Samples/reporting_samples/pole_attachment.py +++ b/public/Samples/reporting_samples/pole_attachment.py @@ -56,6 +56,7 @@ def main(token_file, design): route_list = [ { "id": r["properties"].get("id"), + # f"route/{r["properties"].get("id")}": r["features"].get("myw").get("feature_type"), "in_structure": r["properties"].get("in_structure"), "out_structure": r["properties"].get("out_structure") } From e3d5630144a503d7953dae264a7dc367915da6aa Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Wed, 17 Sep 2025 20:56:13 +0000 Subject: [PATCH 39/45] cleaned up some code --- public/Samples/reporting_samples/conduit_capacity.py | 1 - 1 file changed, 1 deletion(-) diff --git a/public/Samples/reporting_samples/conduit_capacity.py b/public/Samples/reporting_samples/conduit_capacity.py index 5c9e796..9806b6c 100644 --- a/public/Samples/reporting_samples/conduit_capacity.py +++ b/public/Samples/reporting_samples/conduit_capacity.py @@ -84,7 +84,6 @@ def main(token_file, design): cable_diameters.append(d) # use the printed values to test - ratio, limit = calc_fill_ratio(conduit_d, cable_diameters) if ratio is None: status = "No diameter data" From 749202265dda37250521fbebc72119d36b50aa2e Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Thu, 18 Sep 2025 18:47:05 +0000 Subject: [PATCH 40/45] code clean up from feedback --- .../reporting_samples/conduit_capacity.py | 16 +++----- .../reporting_samples/pole_attachment.py | 25 ++++++------- public/Samples/reporting_samples/utils.py | 37 ++++++++++--------- 3 files changed, 37 insertions(+), 41 deletions(-) diff --git a/public/Samples/reporting_samples/conduit_capacity.py b/public/Samples/reporting_samples/conduit_capacity.py index 9806b6c..b23910a 100644 --- a/public/Samples/reporting_samples/conduit_capacity.py +++ b/public/Samples/reporting_samples/conduit_capacity.py @@ -1,29 +1,26 @@ #! /bin/env python3 -import requests import argparse import json from pathlib import Path from utils import ( iqgeo_jwt_auth, - iqgeo_interactive_ropc_auth, iqgeo_get_request, set_auth_cookies, get_all_features, - BASE_URL + BASE_URL, ) def get_cable_segments(conduit_id, design): """Get cable segments related to a specific conduit""" return iqgeo_get_request( - f"{BASE_URL}/feature/conduit/{conduit_id}/relationship/cable_segments", - design + f"{BASE_URL}/feature/conduit/{conduit_id}/relationship/cable_segments", design ).get("features", []) def get_cable_diameter(cable_ref, design): - """ Get cable diameter from cable properties + """Get cable diameter from cable properties ref = e.g. fiber_cable/4 """ return ( @@ -102,20 +99,19 @@ def main(token_file, design): if __name__ == "__main__": - # TODO: import argpase ... parser = argparse.ArgumentParser(description="Conduit capacity report") parser.add_argument( "--token_file", type=Path, default="token.txt", - help="Path to the pre-generated JWT token" + help="Path to the pre-generated JWT token", ) parser.add_argument( "--design", type=str, default=None, - help="Design ID to use, e.g. design/2FMyDesign" + help="Design ID to use, e.g. design/2FMyDesign", ) args = parser.parse_args() - main(token_file=args.token_file, design=args.design) \ No newline at end of file + main(token_file=args.token_file, design=args.design) diff --git a/public/Samples/reporting_samples/pole_attachment.py b/public/Samples/reporting_samples/pole_attachment.py index 1a1e695..ba873c4 100644 --- a/public/Samples/reporting_samples/pole_attachment.py +++ b/public/Samples/reporting_samples/pole_attachment.py @@ -1,16 +1,14 @@ #! /bin/env python3 -import requests import argparse import json from pathlib import Path from utils import ( iqgeo_jwt_auth, - iqgeo_interactive_ropc_auth, iqgeo_get_request, set_auth_cookies, get_all_features, - BASE_URL + BASE_URL, ) @@ -28,11 +26,10 @@ def get_pole_routes(pole_id, design): ).get("features", []) - def main(token_file, design): """script entrypoint.""" - cookies = iqgeo_jwt_auth(token_file) # or iqgeo_interactive_ropc_auth() + cookies = iqgeo_jwt_auth(token_file) # or iqgeo_interactive_ropc_auth() set_auth_cookies(cookies) # custom report section @@ -48,19 +45,20 @@ def main(token_file, design): equip_list = [ { "id": e["properties"].get("name"), - "root_housing": e["properties"].get("root_housing") + "root_housing": e["properties"].get("root_housing"), } - for e in equipment if e.get("properties") + for e in equipment + if e.get("properties") ] route_list = [ { "id": r["properties"].get("id"), - # f"route/{r["properties"].get("id")}": r["features"].get("myw").get("feature_type"), "in_structure": r["properties"].get("in_structure"), - "out_structure": r["properties"].get("out_structure") + "out_structure": r["properties"].get("out_structure"), } - for r in routes if r.get("properties") + for r in routes + if r.get("properties") ] attachment_report[f"pole/{pid}"] = { @@ -74,20 +72,19 @@ def main(token_file, design): if __name__ == "__main__": - # TODO: import argpase ... parser = argparse.ArgumentParser(description="Conduit capacity report") parser.add_argument( "--token_file", type=Path, default="token.txt", - help="Path to the pre-generated JWT token" + help="Path to the pre-generated JWT token", ) parser.add_argument( "--design", type=str, default=None, - help="Design ID to use, e.g. design/2FMyDesign" + help="Design ID to use, e.g. design/2FMyDesign", ) args = parser.parse_args() - main(token_file=args.token_file, design=args.design) \ No newline at end of file + main(token_file=args.token_file, design=args.design) diff --git a/public/Samples/reporting_samples/utils.py b/public/Samples/reporting_samples/utils.py index fff8cc7..babda45 100644 --- a/public/Samples/reporting_samples/utils.py +++ b/public/Samples/reporting_samples/utils.py @@ -1,5 +1,3 @@ -#! /bin/env python3 - import requests from pathlib import Path @@ -15,14 +13,16 @@ def iqgeo_jwt_auth(token_file: Path): """ Prompt user for JWT token and then set the auth header. """ - # TODO: use argparse to pass token file path if not token_file.exists(): raise FileNotFoundError(f"Token file not found: {token_file}") token = token_file.read_text().strip() response = SESSION.post(LOGIN_URL, data={"id_token": token}) response.raise_for_status() - return response.cookies.get_dict() + cookies = response.cookies.get_dict() + HEADERS[ + "cookie" + ] = f"myworldapp={cookies['myworldapp']}; csrf_token={cookies['csrf_token']}" def iqgeo_interactive_ropc_auth(): @@ -37,41 +37,44 @@ def iqgeo_interactive_ropc_auth(): response = SESSION.post(LOGIN_URL, data=uauth) response.raise_for_status() - return response.cookies.get_dict() - + cookies = response.cookies.get_dict() + HEADERS[ + "cookie" + ] = f"myworldapp={cookies['myworldapp']}; csrf_token={cookies['csrf_token']}" -def get_all_features(feature_type, design): +def get_all_features(feature_type, design=None): """Get all features of a specific type in the design""" - return iqgeo_get_request(f"{BASE_URL}/feature/{feature_type}", design).get("features", []) - + return iqgeo_get_request(f"{BASE_URL}/feature/{feature_type}", design).get( + "features", [] + ) -def iqgeo_get_request(endpoint, design): +def iqgeo_get_request(endpoint, design=None): """ Hit a GET endpoint using the auth cookie for this session. Raises HTTP errors, and returns the request body JSON. """ - params = {"design": design} + params = {"design": design} if design is not None else None r = SESSION.get(endpoint, headers=HEADERS, params=params) r.raise_for_status() return r.json() -def iqgeo_post_request(endpoint, design): +def iqgeo_post_request(endpoint, design=None, data=None): """ Hit a POST endpoint using the auth cookie for this session. Raises HTTP errors, and returns the request body JSON. """ - params = {"design": design} - r = SESSION.post(endpoint, headers=HEADERS, params=params) + params = {"design": design} if design is not None else None + r = SESSION.post(endpoint, headers=HEADERS, params=params, data=data) r.raise_for_status() return r.json() def set_auth_cookies(cookies: dict): - HEADERS["cookie"] = ( - f"myworldapp={cookies['myworldapp']}; csrf_token={cookies['csrf_token']}" - ) + HEADERS[ + "cookie" + ] = f"myworldapp={cookies['myworldapp']}; csrf_token={cookies['csrf_token']}" From a392bd3ae6d082e59ded45a960dd98ec29635302 Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Mon, 22 Sep 2025 20:13:09 +0000 Subject: [PATCH 41/45] began working on spatial queries --- .../reporting_samples/conduit_capacity.py | 6 ++- .../reporting_samples/pole_attachment.py | 6 ++- .../reporting_samples/spatial_query.py | 48 +++++++++++++++++++ public/Samples/reporting_samples/utils.py | 34 +++++++++++-- 4 files changed, 87 insertions(+), 7 deletions(-) create mode 100644 public/Samples/reporting_samples/spatial_query.py diff --git a/public/Samples/reporting_samples/conduit_capacity.py b/public/Samples/reporting_samples/conduit_capacity.py index b23910a..b6a00c0 100644 --- a/public/Samples/reporting_samples/conduit_capacity.py +++ b/public/Samples/reporting_samples/conduit_capacity.py @@ -8,6 +8,7 @@ iqgeo_get_request, set_auth_cookies, get_all_features, + iqgeo_interactive_ropc_auth, BASE_URL, ) @@ -56,9 +57,10 @@ def calc_fill_ratio(conduit_diameter, cable_diameters): def main(token_file, design): """script entrypoint.""" - cookies = iqgeo_jwt_auth(token_file) + # cookies = iqgeo_jwt_auth(token_file) - set_auth_cookies(cookies) + # set_auth_cookies(cookies) + iqgeo_interactive_ropc_auth() capacity_report = {} conduits = get_all_features(feature_type="conduit", design=design) diff --git a/public/Samples/reporting_samples/pole_attachment.py b/public/Samples/reporting_samples/pole_attachment.py index ba873c4..fc5565a 100644 --- a/public/Samples/reporting_samples/pole_attachment.py +++ b/public/Samples/reporting_samples/pole_attachment.py @@ -8,6 +8,7 @@ iqgeo_get_request, set_auth_cookies, get_all_features, + iqgeo_interactive_ropc_auth, BASE_URL, ) @@ -29,8 +30,9 @@ def get_pole_routes(pole_id, design): def main(token_file, design): """script entrypoint.""" - cookies = iqgeo_jwt_auth(token_file) # or iqgeo_interactive_ropc_auth() - set_auth_cookies(cookies) + # cookies = iqgeo_jwt_auth(token_file) # or iqgeo_interactive_ropc_auth() + # set_auth_cookies(cookies) + iqgeo_interactive_ropc_auth() # custom report section attachment_report = {} diff --git a/public/Samples/reporting_samples/spatial_query.py b/public/Samples/reporting_samples/spatial_query.py new file mode 100644 index 0000000..2c21b35 --- /dev/null +++ b/public/Samples/reporting_samples/spatial_query.py @@ -0,0 +1,48 @@ +#! /bin/env python3 + +import json +from utils import query_spatial, iqgeo_interactive_ropc_auth + +def report_features(feature_type, geometry, tolerance=0): + """ + Generic report function: prints properties of features returned by query_spatial. + """ + results = query_spatial(feature_type, geometry, tolerance) + print(f"--- {feature_type.upper()} results ---") + for f in results.get("features", []): + props = f.get("properties", {}) + print(props) + + +if __name__ == "__main__": + + iqgeo_interactive_ropc_auth() + # Example 1: Point + point = {"type": "Point", "coordinates": [0.14208, 52.23095]} + report_features("pole", point, tolerance=60) + # report_features("conduit", point, tolerance=60) + + # Example 2: LineString + line = { + "type": "LineString", + "coordinates": [ + [0.13422048802249265, 52.220846611354546], + [0.135095125230265, 52.22157378945272], + [0.14540334946042321, 52.22735251836545], + ], + } + report_features("pole", line, tolerance=25) + + # Example 3: Polygon + polygon = { + "type": "Polygon", + "coordinates": [[ + [0.1400, 52.2300], + [0.1450, 52.2300], + [0.1450, 52.2350], + [0.1400, 52.2350], + [0.1400, 52.2300] + ]] + } + report_features("pole", polygon, tolerance=10) + diff --git a/public/Samples/reporting_samples/utils.py b/public/Samples/reporting_samples/utils.py index babda45..c0f84e7 100644 --- a/public/Samples/reporting_samples/utils.py +++ b/public/Samples/reporting_samples/utils.py @@ -3,6 +3,7 @@ BASE_URL = "http://host.docker.internal" +# BASE_URL = "http://localhost" LOGIN_URL = f"{BASE_URL}/auth" SESSION = requests.Session() HEADERS = {} @@ -50,13 +51,15 @@ def get_all_features(feature_type, design=None): ) -def iqgeo_get_request(endpoint, design=None): +def iqgeo_get_request(endpoint, params =None, design=None): """ Hit a GET endpoint using the auth cookie for this session. Raises HTTP errors, and returns the request body JSON. """ - params = {"design": design} if design is not None else None + if design is not None: + params = params or {} + params["design"] = design r = SESSION.get(endpoint, headers=HEADERS, params=params) r.raise_for_status() return r.json() @@ -74,7 +77,32 @@ def iqgeo_post_request(endpoint, design=None, data=None): return r.json() -def set_auth_cookies(cookies: dict): +def set_auth_cookies(cookies:dict ): + if not cookies: + raise ValueError("Authentication cookies are missing. Make sure your auth function returns a valid dict.") + HEADERS[ "cookie" ] = f"myworldapp={cookies['myworldapp']}; csrf_token={cookies['csrf_token']}" + + +def query_spatial(feature_type, geometry, tolerance=0): + """ + General spatial query for any feature type. + Supports Point, LineString, and Polygon geometries. + """ + geom_type = geometry.get("type") + + if geom_type == "Point": + lon, lat = geometry["coordinates"] + url = f"{BASE_URL}/feature/{feature_type}" + params = {"lat": lat, "lon": lon, "tolerance": tolerance} + return iqgeo_get_request(url, params=params) + + elif geom_type in ["LineString", "Polygon"]: + url = f"{BASE_URL}/feature/{feature_type}" + data = {"geometry": geometry, "tolerance": tolerance} + return iqgeo_post_request(url, data=data) + + else: + raise ValueError(f"Unsupported geometry type: {geom_type}") \ No newline at end of file From 8c95a69317ab57aad8e58bc391c26fd881e4f644 Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Mon, 22 Sep 2025 22:05:05 +0000 Subject: [PATCH 42/45] added spatial query functionality --- .../reporting_samples/conduit_capacity.py | 5 +-- .../reporting_samples/pole_attachment.py | 4 +-- .../reporting_samples/spatial_query.py | 34 +++++++++++++++---- public/Samples/reporting_samples/utils.py | 13 ++++--- 4 files changed, 38 insertions(+), 18 deletions(-) diff --git a/public/Samples/reporting_samples/conduit_capacity.py b/public/Samples/reporting_samples/conduit_capacity.py index b6a00c0..6e8db4c 100644 --- a/public/Samples/reporting_samples/conduit_capacity.py +++ b/public/Samples/reporting_samples/conduit_capacity.py @@ -57,10 +57,7 @@ def calc_fill_ratio(conduit_diameter, cable_diameters): def main(token_file, design): """script entrypoint.""" - # cookies = iqgeo_jwt_auth(token_file) - - # set_auth_cookies(cookies) - iqgeo_interactive_ropc_auth() + iqgeo_jwt_auth(token_file) capacity_report = {} conduits = get_all_features(feature_type="conduit", design=design) diff --git a/public/Samples/reporting_samples/pole_attachment.py b/public/Samples/reporting_samples/pole_attachment.py index fc5565a..1283992 100644 --- a/public/Samples/reporting_samples/pole_attachment.py +++ b/public/Samples/reporting_samples/pole_attachment.py @@ -30,9 +30,7 @@ def get_pole_routes(pole_id, design): def main(token_file, design): """script entrypoint.""" - # cookies = iqgeo_jwt_auth(token_file) # or iqgeo_interactive_ropc_auth() - # set_auth_cookies(cookies) - iqgeo_interactive_ropc_auth() + iqgeo_jwt_auth(token_file) # custom report section attachment_report = {} diff --git a/public/Samples/reporting_samples/spatial_query.py b/public/Samples/reporting_samples/spatial_query.py index 2c21b35..3e4ad18 100644 --- a/public/Samples/reporting_samples/spatial_query.py +++ b/public/Samples/reporting_samples/spatial_query.py @@ -1,7 +1,9 @@ #! /bin/env python3 import json -from utils import query_spatial, iqgeo_interactive_ropc_auth +import argparse +from pathlib import Path +from utils import query_spatial, iqgeo_jwt_auth def report_features(feature_type, geometry, tolerance=0): """ @@ -13,16 +15,16 @@ def report_features(feature_type, geometry, tolerance=0): props = f.get("properties", {}) print(props) +def main(token_file): -if __name__ == "__main__": + iqgeo_jwt_auth(token_file) - iqgeo_interactive_ropc_auth() - # Example 1: Point + # Point point = {"type": "Point", "coordinates": [0.14208, 52.23095]} report_features("pole", point, tolerance=60) # report_features("conduit", point, tolerance=60) - # Example 2: LineString + # LineString line = { "type": "LineString", "coordinates": [ @@ -33,7 +35,7 @@ def report_features(feature_type, geometry, tolerance=0): } report_features("pole", line, tolerance=25) - # Example 3: Polygon + # Polygon polygon = { "type": "Polygon", "coordinates": [[ @@ -45,4 +47,24 @@ def report_features(feature_type, geometry, tolerance=0): ]] } report_features("pole", polygon, tolerance=10) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Conduit capacity report") + parser.add_argument( + "--token_file", + type=Path, + default="token.txt", + help="Path to the pre-generated JWT token", + ) + # parser.add_argument( + # "--design", + # type=str, + # default=None, + # help="Design ID to use, e.g. design/2FMyDesign", + # ) + args = parser.parse_args() + + main(token_file=args.token_file) + \ No newline at end of file diff --git a/public/Samples/reporting_samples/utils.py b/public/Samples/reporting_samples/utils.py index c0f84e7..aafbf95 100644 --- a/public/Samples/reporting_samples/utils.py +++ b/public/Samples/reporting_samples/utils.py @@ -65,19 +65,21 @@ def iqgeo_get_request(endpoint, params =None, design=None): return r.json() -def iqgeo_post_request(endpoint, design=None, data=None): +def iqgeo_post_request(endpoint, params = None, design=None, data=None): """ Hit a POST endpoint using the auth cookie for this session. Raises HTTP errors, and returns the request body JSON. """ - params = {"design": design} if design is not None else None - r = SESSION.post(endpoint, headers=HEADERS, params=params, data=data) + if design is not None: + params = params or {} + params["design"] = design + r = SESSION.post(endpoint, headers=HEADERS, params=params, json=data) r.raise_for_status() return r.json() -def set_auth_cookies(cookies:dict ): +def set_auth_cookies(cookies: dict): if not cookies: raise ValueError("Authentication cookies are missing. Make sure your auth function returns a valid dict.") @@ -100,8 +102,9 @@ def query_spatial(feature_type, geometry, tolerance=0): return iqgeo_get_request(url, params=params) elif geom_type in ["LineString", "Polygon"]: - url = f"{BASE_URL}/feature/{feature_type}" + url = f"{BASE_URL}/feature/{feature_type}/get" data = {"geometry": geometry, "tolerance": tolerance} + print(geometry, tolerance) return iqgeo_post_request(url, data=data) else: From f7bb7939929a7a5fb594bcec8afb945a6dd73515 Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Tue, 23 Sep 2025 13:54:53 +0000 Subject: [PATCH 43/45] cleaned up some code, moved adding cookies to header to auth functions --- .../reporting_samples/conduit_capacity.py | 2 -- .../reporting_samples/pole_attachment.py | 4 +-- .../reporting_samples/spatial_query.py | 31 ++++++++----------- public/Samples/reporting_samples/utils.py | 17 +++------- 4 files changed, 18 insertions(+), 36 deletions(-) diff --git a/public/Samples/reporting_samples/conduit_capacity.py b/public/Samples/reporting_samples/conduit_capacity.py index 6e8db4c..b338f20 100644 --- a/public/Samples/reporting_samples/conduit_capacity.py +++ b/public/Samples/reporting_samples/conduit_capacity.py @@ -6,9 +6,7 @@ from utils import ( iqgeo_jwt_auth, iqgeo_get_request, - set_auth_cookies, get_all_features, - iqgeo_interactive_ropc_auth, BASE_URL, ) diff --git a/public/Samples/reporting_samples/pole_attachment.py b/public/Samples/reporting_samples/pole_attachment.py index 1283992..5dd5d48 100644 --- a/public/Samples/reporting_samples/pole_attachment.py +++ b/public/Samples/reporting_samples/pole_attachment.py @@ -6,9 +6,7 @@ from utils import ( iqgeo_jwt_auth, iqgeo_get_request, - set_auth_cookies, get_all_features, - iqgeo_interactive_ropc_auth, BASE_URL, ) @@ -30,7 +28,7 @@ def get_pole_routes(pole_id, design): def main(token_file, design): """script entrypoint.""" - iqgeo_jwt_auth(token_file) + iqgeo_jwt_auth(token_file) # custom report section attachment_report = {} diff --git a/public/Samples/reporting_samples/spatial_query.py b/public/Samples/reporting_samples/spatial_query.py index 3e4ad18..bfecded 100644 --- a/public/Samples/reporting_samples/spatial_query.py +++ b/public/Samples/reporting_samples/spatial_query.py @@ -5,6 +5,7 @@ from pathlib import Path from utils import query_spatial, iqgeo_jwt_auth + def report_features(feature_type, geometry, tolerance=0): """ Generic report function: prints properties of features returned by query_spatial. @@ -15,14 +16,14 @@ def report_features(feature_type, geometry, tolerance=0): props = f.get("properties", {}) print(props) + def main(token_file): iqgeo_jwt_auth(token_file) # Point point = {"type": "Point", "coordinates": [0.14208, 52.23095]} - report_features("pole", point, tolerance=60) - # report_features("conduit", point, tolerance=60) + report_features("manhole", point, tolerance=60) # LineString line = { @@ -38,16 +39,18 @@ def main(token_file): # Polygon polygon = { "type": "Polygon", - "coordinates": [[ - [0.1400, 52.2300], - [0.1450, 52.2300], - [0.1450, 52.2350], - [0.1400, 52.2350], - [0.1400, 52.2300] - ]] + "coordinates": [ + [ + [0.1400, 52.2300], + [0.1450, 52.2300], + [0.1450, 52.2350], + [0.1400, 52.2350], + [0.1400, 52.2300], + ] + ], } report_features("pole", polygon, tolerance=10) - + if __name__ == "__main__": parser = argparse.ArgumentParser(description="Conduit capacity report") @@ -57,14 +60,6 @@ def main(token_file): default="token.txt", help="Path to the pre-generated JWT token", ) - # parser.add_argument( - # "--design", - # type=str, - # default=None, - # help="Design ID to use, e.g. design/2FMyDesign", - # ) args = parser.parse_args() main(token_file=args.token_file) - - \ No newline at end of file diff --git a/public/Samples/reporting_samples/utils.py b/public/Samples/reporting_samples/utils.py index aafbf95..dc5646d 100644 --- a/public/Samples/reporting_samples/utils.py +++ b/public/Samples/reporting_samples/utils.py @@ -51,7 +51,7 @@ def get_all_features(feature_type, design=None): ) -def iqgeo_get_request(endpoint, params =None, design=None): +def iqgeo_get_request(endpoint, params=None, design=None): """ Hit a GET endpoint using the auth cookie for this session. @@ -65,7 +65,7 @@ def iqgeo_get_request(endpoint, params =None, design=None): return r.json() -def iqgeo_post_request(endpoint, params = None, design=None, data=None): +def iqgeo_post_request(endpoint, params=None, design=None, data=None): """ Hit a POST endpoint using the auth cookie for this session. @@ -79,15 +79,6 @@ def iqgeo_post_request(endpoint, params = None, design=None, data=None): return r.json() -def set_auth_cookies(cookies: dict): - if not cookies: - raise ValueError("Authentication cookies are missing. Make sure your auth function returns a valid dict.") - - HEADERS[ - "cookie" - ] = f"myworldapp={cookies['myworldapp']}; csrf_token={cookies['csrf_token']}" - - def query_spatial(feature_type, geometry, tolerance=0): """ General spatial query for any feature type. @@ -104,8 +95,8 @@ def query_spatial(feature_type, geometry, tolerance=0): elif geom_type in ["LineString", "Polygon"]: url = f"{BASE_URL}/feature/{feature_type}/get" data = {"geometry": geometry, "tolerance": tolerance} - print(geometry, tolerance) + # print(geometry, tolerance) return iqgeo_post_request(url, data=data) else: - raise ValueError(f"Unsupported geometry type: {geom_type}") \ No newline at end of file + raise ValueError(f"Unsupported geometry type: {geom_type}") From b4ba346dc3d854c19aabde16c9bf23465fac3d9e Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Tue, 23 Sep 2025 15:44:11 +0000 Subject: [PATCH 44/45] cleaned up code --- public/Samples/reporting_samples/conduit_capacity.py | 0 public/Samples/reporting_samples/pole_attachment.py | 0 public/Samples/reporting_samples/spatial_query.py | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 100755 public/Samples/reporting_samples/conduit_capacity.py mode change 100644 => 100755 public/Samples/reporting_samples/pole_attachment.py mode change 100644 => 100755 public/Samples/reporting_samples/spatial_query.py diff --git a/public/Samples/reporting_samples/conduit_capacity.py b/public/Samples/reporting_samples/conduit_capacity.py old mode 100644 new mode 100755 diff --git a/public/Samples/reporting_samples/pole_attachment.py b/public/Samples/reporting_samples/pole_attachment.py old mode 100644 new mode 100755 diff --git a/public/Samples/reporting_samples/spatial_query.py b/public/Samples/reporting_samples/spatial_query.py old mode 100644 new mode 100755 index bfecded..401c05e --- a/public/Samples/reporting_samples/spatial_query.py +++ b/public/Samples/reporting_samples/spatial_query.py @@ -11,7 +11,7 @@ def report_features(feature_type, geometry, tolerance=0): Generic report function: prints properties of features returned by query_spatial. """ results = query_spatial(feature_type, geometry, tolerance) - print(f"--- {feature_type.upper()} results ---") + print(f"--- {feature_type.upper()} spatial query ---") for f in results.get("features", []): props = f.get("properties", {}) print(props) From 8dd13c8a9ebb09317b6f4f3c5092bac0dfdf8221 Mon Sep 17 00:00:00 2001 From: Birwa balar Date: Fri, 26 Sep 2025 16:13:12 +0000 Subject: [PATCH 45/45] added all documentation for reporting samples --- .../Reporting_Samples/Reporting_Samples_1.png | Bin 0 -> 125606 bytes .../Reporting_Samples_DeepDive.md | 576 ++++++++++++++++++ .../Reporting_Samples_Overview.md | 56 ++ .../reporting_samples/spatial_query.py | 1 - 4 files changed, 632 insertions(+), 1 deletion(-) create mode 100644 Documents/Reporting_Samples/Reporting_Samples_1.png create mode 100644 Documents/Reporting_Samples/Reporting_Samples_DeepDive.md create mode 100644 Documents/Reporting_Samples/Reporting_Samples_Overview.md diff --git a/Documents/Reporting_Samples/Reporting_Samples_1.png b/Documents/Reporting_Samples/Reporting_Samples_1.png new file mode 100644 index 0000000000000000000000000000000000000000..0dc3d91a64d6fbe238c2c7f941b7c3bbed03af41 GIT binary patch literal 125606 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

*6~KeEABZ7~U^;8-n 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 E1DbaCEC2ui literal 0 HcmV?d00001 diff --git a/Documents/Reporting_Samples/Reporting_Samples_DeepDive.md b/Documents/Reporting_Samples/Reporting_Samples_DeepDive.md new file mode 100644 index 0000000..52fd000 --- /dev/null +++ b/Documents/Reporting_Samples/Reporting_Samples_DeepDive.md @@ -0,0 +1,576 @@ +# Reporting Samples - Code Deep Dive + +## Table of Contents + +## Table of Contents + +- [Reporting Samples - Code Deep Dive](#rest-apis---code-deep-dive) + - [Table of Contents](#table-of-contents) + - [Tool Description](#tool-description) + - [Tool files](#tool-files) + - [How the tool works](#how-the-tool-works) + - [utils\.py](#utilspy) + - [conduit\_capacity\.py](#conduit_capacitypy) + - [pole\_attachment\.py](#pole_attachmentpy) + - [spatial\_query\.py](#spatial_querypy) +--- + + +## Tool Description + +This sample provides examples for how to query the database and create reports similar to the Enterprise "Data Warehouse" reports using the available Platform REST APIs. These examples are designed for Professional customers to: + +- Authenticate via **RPOC auth** or **JWT auth** to get started +- Query feature data in various ways to mimic "Data Warehouse" reporting + + +The goal is to make REST API–based reporting as straightforward as possible, even without a replica database. All examples are written in **Python** with examples for conduit capacity, pole attachment, and spatial querying reports. + +As a stretch goal, we may also provide **code-free options** using tools like **FME** or **Postman**, to give Professional Edition customers an experience closer to Enterprise’s no-code “Data Warehouse” reporting workflows. + +Use this sample as a reference if you want to: + +- Understand spatial query workflows. +- Extend results handling into custom reporting or UI logic. +- Experiment quickly with geometry-based searches before building larger tools. + +## Tool Files + +- `utils.py` - Python lib helper file +- `conduit_capacity.py` - Reporting example for conduit capacity +- `pole_attachment.py` - Reporting example for pole attachment +- `spatial_query.py` - Reporting example for querying geometry with tolerance + +All files are located in the `modules/custom/public/js/Samples/reporting_samples` folder + +## How the tool works + +In this section we will go over the tool source code describing how it works. + +### utils.py + +The code starts with the relevant `import` statements. Make sure your Python environment has the libraries installed. + +``` +import requests +from pathlib import Path +``` + +- The `requests` library is used to send the HTTP requests to the server +- the `Path` liobrary is used to input the `token.txt` file for JWT authentication + +Next, some global variables are created + +```BASE_URL = "http://host.docker.internal" +# BASE_URL = "http://localhost" +LOGIN_URL = f"{BASE_URL}/auth" +SESSION = requests.Session() +HEADERS = {} +``` + +- `BASE_URL` is the URL for the requests. If you are running inside a docker container, the base URL will be `http://host.docker.internal`. Otherwise, the base URl is `localhost` +- `LOGIN_URL` is the URL for authentication +- `SESSION` is called to ensure cookie persistence. The authentication request will return a cookie that needs to be used in the following requests +- `HEADERS` will be passed through to the reporting samples as after a cookie is recieved, it must be added to all subsequent requests + + +First, we have the two authentication helper functions. Below is the JWT authentication helper function. + +``` +def iqgeo_jwt_auth(token_file: Path): + """ + Prompt user for JWT token and then set the auth header. + """ + if not token_file.exists(): + raise FileNotFoundError(f"Token file not found: {token_file}") + + token = token_file.read_text().strip() + response = SESSION.post(LOGIN_URL, data={"id_token": token}) + response.raise_for_status() + cookies = response.cookies.get_dict() + HEADERS[ + "cookie" + ] = f"myworldapp={cookies['myworldapp']}; csrf_token={cookies['csrf_token']}" +``` +- This function takes in the `token.txt` as a parameter to authenticate using the unique token. +- It then send a POST request using the data inside the token file and the `LOGIN_URL`, takes the response cookie, and sets the cookie in the `HEADER` + + +Next authentication helper function is the ROPC authentication function. + +``` +def iqgeo_interactive_ropc_auth(): + """ + Prompt user for credentials and then send AUTH request. + Raises exception if not authorized, returns the auth cookie on success. + """ + user = input("Enter username: ") + password = input("Enter password: ") + + uauth = {"user": user, "pass": password} + + response = SESSION.post(LOGIN_URL, data=uauth) + response.raise_for_status() + cookies = response.cookies.get_dict() + HEADERS[ + "cookie" + ] = f"myworldapp={cookies['myworldapp']}; csrf_token={cookies['csrf_token']}" +``` +- This function is similar to the JWT, however this time, we prompt the user for a username and password to authenticate. +- The inputted data, `LOGIN_URL` is sent with a POST request to recieve the cookie in response, which is then set in the `HEADER` + + +The next few functions are used by the individual examples to build off of. + +``` +def get_all_features(feature_type, design=None): + """Get all features of a specific type in the design""" + return iqgeo_get_request(f"{BASE_URL}/feature/{feature_type}", design).get( + "features", [] + ) +``` +- This function will take in `feature_type` and `design`, set to `None`, parameters +- It will return all the features using a get request given the `BASE_URL`, `feature_type`, and `design` specification + + +```def iqgeo_get_request(endpoint, params=None, design=None): + """ + Hit a GET endpoint using the auth cookie for this session. + + Raises HTTP errors, and returns the request body JSON. + """ + if design is not None: + params = params or {} + params["design"] = design + r = SESSION.get(endpoint, headers=HEADERS, params=params) + r.raise_for_status() + return r.json() +``` +- This function handles the GET requests made in the sample report files +- It takes in the `endpoint` URL to send request to, and the optional `params` and `design` to filter the query +- The return is the raw json data response from the GET request + +``` +def iqgeo_post_request(endpoint, params=None, design=None, data=None): + """ + Hit a POST endpoint using the auth cookie for this session. + + Raises HTTP errors, and returns the request body JSON. + """ + if design is not None: + params = params or {} + params["design"] = design + r = SESSION.post(endpoint, headers=HEADERS, params=params, json=data) + r.raise_for_status() + return r.json() +``` +- This function handles the POST request made in the sample report files +- It takes in the `endpoint` URL, and the optional `params`, `design`, and `data` to filter the query +- The return is the raw json data response from the + + +``` +def query_spatial(feature_type, geometry, tolerance=0): + """ + General spatial query for any feature type. + Supports Point, LineString, and Polygon geometries. + """ + geom_type = geometry.get("type") + + if geom_type == "Point": + lon, lat = geometry["coordinates"] + url = f"{BASE_URL}/feature/{feature_type}" + params = {"lat": lat, "lon": lon, "tolerance": tolerance} + return iqgeo_get_request(url, params=params) + + elif geom_type in ["LineString", "Polygon"]: + url = f"{BASE_URL}/feature/{feature_type}/get" + data = {"geometry": geometry, "tolerance": tolerance} + return iqgeo_post_request(url, data=data) + else: + raise ValueError(f"Unsupported geometry type: {geom_type}") +``` +- This function calls the spatial query requests using both the GET and POST helper functions +- It takes in the `feature_type` that the user wants to query, the `geometry` with its coordinates, and the `tolerance` to add to the coordinates +- First, it checks the geometry type from the `geometry` parameter to determine which type of geometry, `Point`, `LineString`, or `Polygon` +- If point, the `lat` and `lon` are used to pass into the parameters using a GET request +- If `LineString` or `Polygon`, the request is sent as a POST request to keep the endpoint URL clean + - The `data` is sent with the `geometry` and `tolerance` + + + +### conduit_capacity.py + +The code starts with the relevant `import` statements. + +``` +import argparse +import json +from pathlib import Path +from utils import ( + iqgeo_jwt_auth, + iqgeo_get_request, + get_all_features, + BASE_URL, +) +``` +- The `argparse` library is used to parse the arugments passed in to run the python file +- The `json` library is used to read the cookies dictionary and REST request response +- the `Path` liobrary is used to input the `token.txt` file for JWT authentication +- The imports from `utils` are the helper functions explained above to be used in the `conduit_capacity.py` + +The first function is the `get_cable_segments` which is used to get all the feature data of the fiber cable segments that are in relationship with a conduit given its ID. + +``` +def get_cable_segments(conduit_id, design): + """Get cable segments related to a specific conduit""" + return iqgeo_get_request( + f"{BASE_URL}/feature/conduit/{conduit_id}/relationship/cable_segments", design + ).get("features", []) +``` +- This function takes in the `conduit_id` and `design` as a parameter +- It will return the raw cable segment data using the `iqgeo_get_request` helper function + + +``` +def get_cable_diameter(cable_ref, design): + """Get cable diameter from cable properties + ref = e.g. fiber_cable/4 + """ + return ( + iqgeo_get_request(f"{BASE_URL}/feature/{cable_ref}", design) + .get("properties", {}) + .get("diameter") + ) +``` +- This function takes in the cable reference and design as parameters +- It returns the diameter data of the cable passed into the function + - This will be used to calculate the cable capacity percentage + + +``` +def calc_fill_ratio(conduit_diameter, cable_diameters): + """ + Calculate fill ratio and determine if within limits. + + Implementation of: + https://www.corning.com/optical-communications/worldwide/en/home/Resources/system-design-calculators/fill-ratio-calculator.html + """ + if not conduit_diameter or conduit_diameter == 0: + return None, None + ratio = sum(d**2 for d in cable_diameters) / (conduit_diameter**2) + + if len(cable_diameters) == 1: + limit = 0.65 + elif len(cable_diameters) == 2: + limit = 0.31 + elif len(cable_diameters) == 3: + limit = 0.40 + else: + limit = 1.0 + + return ratio, limit +``` +- This function uses the `conduit_diameter` and `cable_diameter` to calculate the fill ratio of a conduit +- First, it calculates the `ratio` using the sum of the `cable_diameter` squared over the `conduit_diameter` squared +- Then, using the amount of cables per conduit, calculates a `limit` +- The function then returns the `ratio` and `limit` + + +``` +def main(token_file, design): + """script entrypoint.""" + + iqgeo_jwt_auth(token_file) + + capacity_report = {} + conduits = get_all_features(feature_type="conduit", design=design) + + for conduit in conduits: + cid = conduit["properties"].get("id") + conduit_d = conduit["properties"].get("diameter") + + segments = get_cable_segments(cid, design) + cable_refs = { + seg["properties"].get("cable") + for seg in segments + if seg["properties"].get("cable") + } + + cable_diameters = [] + for cref in cable_refs: + d = get_cable_diameter(cref, design) + if d: + cable_diameters.append(d) + + # use the printed values to test + ratio, limit = calc_fill_ratio(conduit_d, cable_diameters) + if ratio is None: + status = "No diameter data" + else: + percent = f"{ratio*100:.1f}%" + if ratio <= limit and ratio > 0: + status = f"{percent} (OK), cable count: {len(cable_refs)}" + elif ratio == 0: + status = f"{percent} (EMPTY), cable count: {len(cable_refs)}" + else: + status = f"{percent} (OVERFILL), cable count: {len(cable_refs)}" + + capacity_report[f"conduit/{cid}"] = status + + print(json.dumps(capacity_report, indent=2)) +``` +- This is the main python funtion which takes in the `token_file` and `design` as parameters from the arguments +- First, it will call the `iqgeo_jwt_auth` function to authenticate the user +- Then, create some variables that will be used in the later helper function calls + - `capacity_report` will be returned at the end with all the conduit capacity information + - `conduits` is the list of conduits using the request in the `utils.py` file +- The function will then loop through each conduit in `conduits` + - Each conduit's ID is set to the `cid` variable + - Each conduit's diameter is set to the `conduit_d` variable + - Using the `cid` and `design`, the function then calls the `get_cable_segments` function to get a list of all the segments associated with the particular conduit + - Using the list of segments, it creates a list of `cable_refs`, this each reference to a fiber cable inside the properties of the cable segment + - Then, creating a list of `cable_diameters`, the function loops through all the cables in `cable_refs` to get the diameter of each cable and append to the list of `cable_diameters` + - Passing the `conduit_d` and `cable_diameters` into the `calc_fill_ratio` function, the `ratio` and `limit` is then received + - The is the `ratio` is used to calculate a `percent`, set a status for how full each conduit is, and add the information to the `capacity_report` to print out + +``` +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Conduit capacity report") + parser.add_argument( + "--token_file", + type=Path, + default="token.txt", + help="Path to the pre-generated JWT token", + ) + parser.add_argument( + "--design", + type=str, + default=None, + help="Design ID to use, e.g. design/2FMyDesign", + ) + args = parser.parse_args() + + main(token_file=args.token_file, design=args.design) +``` +This block makes the script runnable from the command line. It sets up two arguments: +- `--token_file` is the path to the JWT token file (default: `token.txt`) +- `--design` is the ID of the design to use (optional) + + +### pole_attachment.py + +The code starts with the relevent `impot` statements. + +``` +import argparse +import json +from pathlib import Path +from utils import ( + iqgeo_jwt_auth, + iqgeo_get_request, + get_all_features, + BASE_URL, +) +``` +- The `argparse` library is used to parse the arguments passed when running the Python file +- The `json` library is used to pretty-print the attachment report results +- The `Path` library is used to input the `token.txt` file for JWT authentication +- The imports from `utils` are the helper functions explained above, which handle authentication and REST API requests + +The first helper function gets equipment related to a specific pole. + +``` +def get_pole_equipment(pole_id, design): + """Get equipment attached to a specific pole""" + return iqgeo_get_request( + f"{BASE_URL}/feature/pole/{pole_id}/relationship/equipment", design + ).get("features", []) +``` +- This functions takes in the `pole_id` and `design` as parameters +- It uses the `iqgeo_get_request` helper to query all equipment features attached to that pole +- The return is a list of equipment in JSON format + +The next helper functions gets the routes associated with a pole. + +``` +def get_pole_routes(pole_id, design): + """Get routes associated with a specific pole""" + return iqgeo_get_request( + f"{BASE_URL}/feature/pole/{pole_id}/relationship/routes", design + ).get("features", []) +``` +- This function takes in the `pole_id` and `design` as parameters +- It uses the `iqgeo_get_request` helper to query all routes connected to that pole +- The return is a list of route features in JSON format + +```def main(token_file, design): + """script entrypoint.""" + + iqgeo_jwt_auth(token_file) + + # custom report section + attachment_report = {} + poles = get_all_features(feature_type="pole", design=design) + + for pole in poles: + pid = pole["properties"].get("id") + + equipment = get_pole_equipment(pid, design) + routes = get_pole_routes(pid, design) + + equip_list = [ + { + "id": e["properties"].get("name"), + "root_housing": e["properties"].get("root_housing"), + } + for e in equipment + if e.get("properties") + ] + + route_list = [ + { + "id": r["properties"].get("id"), + "in_structure": r["properties"].get("in_structure"), + "out_structure": r["properties"].get("out_structure"), + } + for r in routes + if r.get("properties") + ] + + attachment_report[f"pole/{pid}"] = { + "equipment_count": len(equip_list), + "equipment": equip_list, + "route_count": len(route_list), + "routes": route_list, + } + + print(json.dumps(attachment_report, indent=2)) +``` +- The function starts by authenticating with the `iqgeo_jwt_auth` helper using the provided token file +- It then retrieves all poles in the given design using the `get_all_features` function +- For each pole: + - It retrieves attached equipment (`get_pole_equipment`) and connected routes (`get_pole_routes`) + - It builds a list of equipment details (`equip_list`) including the equipment name and root housing + - It builds a list of route details (`route_list`) including route ID, in_structure, and out_structure + - It adds these results into the attachment_report dictionary under the pole's ID +- Finally, the report is printed in a JSON format output + +The script ends with a runnable block to parse arguments from the command line. + +``` +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Conduit capacity report") + parser.add_argument( + "--token_file", + type=Path, + default="token.txt", + help="Path to the pre-generated JWT token", + ) + parser.add_argument( + "--design", + type=str, + default=None, + help="Design ID to use, e.g. design/2FMyDesign", + ) + args = parser.parse_args() + + main(token_file=args.token_file, design=args.design) +``` +This block makes the script runnable from the command line. It sets up two arguments: +- `--token_file` is the path to the JWT token file (default: `token.txt`) +- `--design` is the ID of the design to use (optional) + +### spatial_query.py + +This example shows how to perform spatial queries against the Platform REST API using different geometry types: Point, LineString, and Polygon. It demonstrates how to use the `query_spatial` helper function (from `utils.py`) to search for features within a specified tolerance. + +The code starts with the relevant imports: + +``` +import argparse +from pathlib import Path +from utils import query_spatial, iqgeo_jwt_auth +``` +- `json` is used to format and print results +- `argparse` handles command line arguments +- `Path` manages the token.txt file for JWT authentication +- The imports from `utils` (`query_spatial`, `iqgeo_jwt_auth`) provide authentication and query helpers + +``` +def report_features(feature_type, geometry, tolerance=0): + """ + Generic report function: prints properties of features returned by query_spatial. + """ + results = query_spatial(feature_type, geometry, tolerance) + print(f"--- {feature_type.upper()} spatial query ---") + for f in results.get("features", []): + props = f.get("properties", {}) + print(props) +``` +- Calls the `query_spatial` helper to run a query with the given feature type, geometry, and tolerance +- Iterates through the returned `features` list and prints out the `properties` of each result +- This function is generic and can be reused for any feature type and geometry combination + + +``` +def main(token_file): + + iqgeo_jwt_auth(token_file) + + # Point + point = {"type": "Point", "coordinates": [0.14208, 52.23095]} + report_features("manhole", point, tolerance=60) + + # LineString + line = { + "type": "LineString", + "coordinates": [ + [0.13422048802249265, 52.220846611354546], + [0.135095125230265, 52.22157378945272], + [0.14540334946042321, 52.22735251836545], + ], + } + report_features("pole", line, tolerance=25) + + # Polygon + polygon = { + "type": "Polygon", + "coordinates": [ + [ + [0.1400, 52.2300], + [0.1450, 52.2300], + [0.1450, 52.2350], + [0.1400, 52.2350], + [0.1400, 52.2300], + ] + ], + } + report_features("pole", polygon, tolerance=10) +``` +- First authenticates using the provided token file +- Runs three example spatial queries: + - Point query: finds manholes near a given coordinate within 60m + - LineString query: finds poles intersecting a drawn line within 25m tolerance + - Polygon query: finds poles inside a bounding box polygon with 10m tolerance + +This shows how different geometries can be used to target specific areas or assets in the network. + + +Lastly, the command-line execution +``` +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Conduit capacity report") + parser.add_argument( + "--token_file", + type=Path, + default="token.txt", + help="Path to the pre-generated JWT token", + ) + args = parser.parse_args() + + main(token_file=args.token_file) +``` +- Accepts one argument: + - `--token_file`: path to the JWT token file (defasult: `token.txt`) + diff --git a/Documents/Reporting_Samples/Reporting_Samples_Overview.md b/Documents/Reporting_Samples/Reporting_Samples_Overview.md new file mode 100644 index 0000000..e3f5363 --- /dev/null +++ b/Documents/Reporting_Samples/Reporting_Samples_Overview.md @@ -0,0 +1,56 @@ +# Reporting Samples - Overview + +## Table of Contents + +- [Reporting Samples - Overview](#reporting-samples---overview) + - [Table of Contents](#table-of-contents) + - [Tool Description](#tool-description) + - [How to use the tool](#how-to-use-the-tool) + +--- + +## Tool Description + +This sample provides examples for how to query the database and create reports similar to the Enterprise "Data Warehouse" reports using the available REST APIs. These examples are designed for Professional customers to: + +- Authenticate via **RPOC auth** or **JWT auth** to get started +- Query feature data in various ways to mimic "Data Warehouse" reporting + + +The goal is to make REST API–based reporting as straightforward as possible, even without a replica database. All examples are written in **Python** with examples for conduit capacity, pole attachment, and spatial querying reports. + +As a stretch goal, we may also provide **code-free options** using tools like **FME** or **Postman**, to give Professional Edition customers an experience closer to Enterprise’s no-code “Data Warehouse” reporting workflows. + +Use this sample as a reference if you want to: + +- Understand spatial query workflows. +- Extend results handling into custom reporting or UI logic. +- Experiment quickly with geometry-based searches before building larger tools. + + +## How to use the tool + +The python scripts for reporting are located `modules/devrel-samples/public/Samples/reporting_samples`. The samples are three Python scripts that can be excuted within VS Code using the "Run Python File" command, or creating an executable for each script. Below are the instructions for creating the executable: + +1. Creating the executable + `chmod +x .py` + +2. Run as executable + `./.py` + +3. Using arguments + Each of the scripts take command line arguments for authentication and/or design specs. To use Python Argparse, run the Python files like so: + `./.py --token_file --design ` + + Note: `spatial_query.py` only takes in the token file path argument. + +4. OR use the `python` command to run + `python3 .py --token_file --design ` + + +The script will pause briefly while authenticating with the token. Once authenticated, the report is printed to the terminal in JSON format. + + +![Conduit Capacity REST API Output](./Reporting_Samples_1.png) + +

Fig. 1: Conduit Capacity report output example.

\ No newline at end of file diff --git a/public/Samples/reporting_samples/spatial_query.py b/public/Samples/reporting_samples/spatial_query.py index 401c05e..79b02c5 100755 --- a/public/Samples/reporting_samples/spatial_query.py +++ b/public/Samples/reporting_samples/spatial_query.py @@ -1,6 +1,5 @@ #! /bin/env python3 -import json import argparse from pathlib import Path from utils import query_spatial, iqgeo_jwt_auth