Сайт

Проект

sdk.project — точка входа к тому, что открыто в рабочей области проекта. Сам граф хранится в sdk.project.nodeEditor.

Активный проект

getActive(): Promise<ProjectSnapshot | undefined>

Резолвится в undefined, если проект не открыт.

ProjectSnapshot:

| Поле | Тип | Описание | | --- | --- | --- | | id | ProjectId | Id проекта. | | displayName | string | Имя проекта. | | versionId | ProjectVersionId | Id версии проекта. | | orchestratorId? | OrchestratorId | Выбранный для проекта orchestrator; отсутствует, если не выбран. |

События

| Событие | Payload | Когда срабатывает | | --- | --- | --- | | onChangeActiveProject | ProjectSnapshot \| undefined | Активным стал другой проект или проект закрыт (undefined). | | onUpdateProject | ProjectSnapshot | Данные проекта изменились. | | onSaveProject | ProjectSnapshot | Проект сохранён. |

  • onChangeActiveProject также срабатывает повторно для того же проекта, когда меняются данные активного проекта — имя, нотация, расширение или оркестратор, либо когда проект синхронизируется, и может сработать дважды, пока проект открывается. Если важны только переключения, сравнивайте id.
  • onUpdateProject срабатывает для любого проекта, а не только для активного, — проверяйте id. Также он срабатывает прямо перед onSaveProject при каждом сохранении.
context.subscriptions.push(
  sdk.project.onSaveProject((project) => {
    // например, опубликовать текущий DSL
  }),
)
let activeId: string | undefined

context.subscriptions.push(
  sdk.project.onChangeActiveProject((project) => {
    if (project?.id === activeId) return
    activeId = project?.id
    // активный проект действительно сменился
  }),
)

Панели

sdk.project.panel.left   // ExtensionSdkPanelHandle
sdk.project.panel.right  // ExtensionSdkPanelHandle
sdk.project.panel.bottom // ExtensionSdkPanelHandle

Каждый ExtensionSdkPanelHandle управляет одной из панелей workspace проекта:

| Элемент | Возвращает | Описание | | --- | --- | --- | | panelId | — | Id панели: 'project:panel.left', 'project:panel.right' или 'project:panel.bottom' (также ProjectPanelIds.Left / .Right / .Bottom). Передавайте его в webview.show({ panel }). | | open() | void | Открывает панель. Ничего не делает, если она уже открыта. | | close() | void | Закрывает панель. Ничего не делает, если она уже закрыта. | | setSize(size) | void | Меняет размер панели. size — проценты (0–100), а не пиксели; значение ограничивается пределами панели. | | getSize() | Promise<number \| undefined> | Текущий размер в процентах; если панель не отрисована — последний известный размер или размер по умолчанию. |

open(), close() и setSize() работают по принципу fire-and-forget: возвращаются сразу и не сообщают об ошибках. getSize() отклоняется, если панель недоступна. Событий у дескриптора нет.

| Панель | Мин. размер | Макс. размер | Размер по умолчанию | | --- | --- | --- | --- | | left | 5 | 60 | 25 | | right | 5 | 60 | 25 | | bottom | 5 | 70 | 30 |

sdk.project.panel.bottom.open()
sdk.project.panel.bottom.setSize(40) // 40%
const size = await sdk.project.panel.bottom.getSize()