Skip to main content

Documentation

info

This is currently under development. Additional documentation is being added so please check back again for updates.

ossdk.project_form.setValues()

Set a value for specific fields of a project.

/src/elements/ButtonMenu.tsx
<Button
variant="outlined"
disabled={!loaded || !projectKey}
onClick={async () => {
await ossdk.project_form.setValues({ zip: String(90000 + Math.round(1000 * Math.random())) })
alert('Zip code set to random value')
console.log('setValues complete')
}}
>
Set Field
</Button>

Accepted fields

  is_residential: boolean
title: string
identifier: string
business_name: string | null
address: string | null
zip: string | null
state: string | null
locality: string | null
county: string | null
country_iso2: string | null
lat: number
lon: number
lead_source: string
business_identifier: string
number_of_storeys: number | null
number_of_phases: number | null
number_of_wires: number | null
roof_type_name: string
site_notes: string
notes: string
roof_type: string
custom_project_info_1: string
custom_project_info_2: string
custom_project_info_3: string
custom_project_info_4: string
custom_project_info_5: string
roof_type_id: number | null

ossdk.project_form.getDesignData()

Returns the project's design data.

/src/elements/ButtonMenu.tsx
const doGetDesignData = async (ossdk) => {
ossdk.project_form.getDesignData().then((designData) => {
setModalTitle('Design Data')
setDataModalContent(JSON.stringify(designData, null, 2))
setShowDataModal(true)
})
}

ossdk.project_form.save

Save the project.


ossdk.project_form.save()

ossdk.project_form.saveState

The current state of saving the project. Can be one of the following states:

  • 'none'
  • 'new'
  • 'unsaved'
  • 'saving'
  • 'saved'
type SaveState = 'none' | 'new' | 'unsaved' | 'saving' | 'saved'

const projectSaveState: SaveState = ossdk.project_form.saveState

ossdk.project_form.dirty_fields

This array contains all the fields that have changed but have not been saved - i.e. the field is 'dirty'. If this array contains the value 'design' then this indicates that the design data for this project is 'dirty.'


// fields can contain 'design'
const fields: any[] = ossdk.project_form.dirty_fields

ossdk.studio.view.animateToLonLat()

Set the longitude and latitude of the design page, with a scrolling animation.

Arguments

  • lonLat: [number, number]. Coordinates to be used by the design.
  • duration?: number. Time in milliseconds, that would take the animation to finish.
/src/commands.ts
export const setLonLat = async (ossdk) => {
var selectedView = await ossdk.studio.selectedView();
var lonLat = [selectedView.mapData.center[0] + 0.0001, selectedView.mapData.center[1]];

await ossdk.studio.view.animateToLonLat(lonLat, 1000);
};

ossdk.studio.setComponents()

Set hardware explicitly for the current system. "Panel" sets the panel-type but panels must be placed manually.

Arguments

  • components: { code: string, quantity?: number }[]. Components and quantities to add.
  • keepExistingComponents?: Boolean (optional, default: false). By default this will clear all components of the current system before adding the specified components.
  • systemUuid?: string. Optionally update a specific system. If omitted it will update the currently selected system. Can be retrieved from ossdk.project_form.values.systems.
/src/elements/ButtonMenu.tsx
<Button
variant={'outlined'}
disabled={!loaded || !projectKey}
onClick={async () => {
await ossdk.studio.setComponents([
{ code: 'Solaria PowerXT-400R-PM' },
{ code: 'Fronius Primo 5.0-1 208-240 [240V]' },
{ code: 'EVOLVE LFP 5kW/14kWh' },
])
alert(
'US Bundle 1\nComponents added to the system\nModule: Solaria PowerXT-400R-PM\nInverter: Fronius Primo 5.0-1 208-240 [240V]\nBattery: EVOLVE LFP 5kW/14kWh'
)
}}
>
US Bundle 1
</Button>

ossdk.studio.view.setShadingVisibility()

Adds an orange overlay on the design that highlights shaded areas.

Arguments

  • value?: boolean. optional, if provided this will set the shading visibility.
/src/elements/ButtonMenu.tsx
<Button
variant="outlined"
disabled={!loaded || !projectKey}
onClick={() => ossdk.studio.view.setShadingVisibility()}
>
Toggle Shade
</Button>

ossdk.studio.getSystemImageUrl()

Get the system image for a specific project.

Arguments

  • systemUuid: string. The UUID for the system to be generated. Can be retrieved from ossdk.project_form.values.systems.
  • width?: number. The width of the image in px.
  • heigth?: number. The height of the image in px.
/src/elements/ButtonMenu.tsx
<Button
variant="outlined"
disabled={!loaded || !projectKey}
onClick={() => {
ossdk.studio.getSystemImageUrl(system.uuid).then((systemImageUrl) => {
window.open(systemImageUrl)
})
}}
>
System Image
</Button>

ossdk.flows.generateDocument()

Generate a project document

Arguments

  • projectId?: number. optional
  • orgId?: number. optional
  • documentType: string. Possible values (proposal, contract, owners_manual, installation_instructions, energy_yield_report, shade_report, structural_report_mcs, pv_site_plan)
  • systemUuid: string. Can be retrieved from ossdk.project_form.values.systems.
  • paymentOptionId?: number. optional. See Getting a list of Payment Options.
/src/elements/ButtonMenu.tsx
<Button
variant="outlined"
disabled={!loaded || !projectKey}
onClick={() => {
let systemUuid = system.uuid

if (!systemUuid) {
showAlertMessage('No selected system to generate share report. Create or load a system.', 'error')
return
}

ossdk.flows.generateDocument({ systemUuid, documentType: 'shade_report' }).then((data) => {
console.log('Document created', data)
showAlertMessage(`Document created: ${data.title}`, 'success')
window.open(data.url)
})
}}
>
Generate Document
</Button>

ossdk.signals.queueProcessed

This signal is dispatched as various processing events occur within the SDK. When the idle attribute is true, then the system is not currently performing calculations and is not busy updating the project.


interface UpdateInfo {
idle: boolean // indicates no calculations or changes are being made to the project
}

ossdk.studio.queueProcessed.add((updateInfo: UpdateInfo) => {
const { idle } = updateInfo
setIdle(idle)
})