Skip to content
Snippets Groups Projects
sapiRegion.ts 1.98 KiB
Newer Older
Xiao Gui's avatar
Xiao Gui committed
import { SAPI } from "..";
import { SapiRegionalFeatureModel, SapiRegionMapInfoModel, SapiRegionModel } from "../type";
import { strToRgb, hexToRgb } from 'common/util'
Xiao Gui's avatar
Xiao Gui committed

export class SAPIRegion{
Xiao Gui's avatar
Xiao Gui committed
  static GetDisplayColor(region: SapiRegionModel): [number, number, number]{
    if (!region) {
      throw new Error(`region must be provided!`)
    }
    if (region.hasAnnotation?.displayColor) {
      return hexToRgb(region.hasAnnotation.displayColor)
    }
    return strToRgb(JSON.stringify(region))
  }

  private prefix: string

Xiao Gui's avatar
Xiao Gui committed
  constructor(
    private sapi: SAPI,
    public atlasId: string,
    public parcId: string,
    public id: string,
  ){
    this.prefix = `${this.sapi.bsEndpoint}/atlases/${encodeURIComponent(this.atlasId)}/parcellations/${encodeURIComponent(this.parcId)}/regions/${encodeURIComponent(this.id)}`
Xiao Gui's avatar
Xiao Gui committed
  }

  getFeatures(spaceId: string): Promise<SapiRegionalFeatureModel[]> {
    return this.sapi.http.get<SapiRegionalFeatureModel[]>(
      `${this.prefix}/features`,
Xiao Gui's avatar
Xiao Gui committed
      {
        params: {
          space_id: spaceId
        }
      }
    ).toPromise()
  }

  getFeatureInstance(instanceId: string, spaceId: string = null): Promise<SapiRegionalFeatureModel> {
Xiao Gui's avatar
Xiao Gui committed
    return this.sapi.http.get<SapiRegionalFeatureModel>(
      `${this.prefix}/features/${encodeURIComponent(instanceId)}`,
      {
        params: {
          space_id: spaceId
        }
      }
    ).toPromise()
  }

  getMapInfo(spaceId: string): Promise<SapiRegionMapInfoModel> {
    return this.sapi.http.get<SapiRegionMapInfoModel>(
      `${this.prefix}/regional_map/info`,
      {
        params: {
          space_id: spaceId
        }
      }
    ).toPromise()
  }

  getMapUrl(spaceId: string): string {
    return `${this.prefix}/regional_map/map?space_id=${encodeURI(spaceId)}`
  }

  getDetail(spaceId: string): Promise<SapiRegionModel> {
    return this.sapi.http.get<SapiRegionModel>(
      `${this.prefix}/${this.id}`,
Xiao Gui's avatar
Xiao Gui committed
      {
        params: {
          space_id: spaceId
        }
      }
    ).toPromise()
  }
}