Skip to content

Portal Configuration (Front-End)

This document describes how to configure the Domain Services Ops front‑end via portal.json.

Location in repo

apps/domain-services-ops/src/portal.json


Purpose

portal.json is a single, environment-specific configuration file used by the FE to define branding, data sources, page types, and default behaviors (time zone, formats, etc.).


Key Fields

Top-level

Field Type Description
siteName string Product name shown in the header.
authHost string (URL) Base URL for authentication service.
lastDays number Default lookback window for pages that support date filtering.
logo string (path) Path to the logo asset under src/assets.
style.backgroundColor string (hex) Global background color.
style.primaryColor string (hex) Primary brand color (buttons, highlights).
style.secondaryColor string (hex) Secondary brand color.

pages[]

Each entry defines one visible page in the portal. Common properties:

Field Type Description
name string Menu title.
type enum One of: JobList, Accounts, UserGroups, AutomationList.
enabled boolean Show/hide the page.
configuration object Page-specific configuration (see below).

JobList configuration

Field Type Description
dataSources[] array One or more data sources (jobs + job logs).
newSignalRDataObj boolean Use the new SignalR data transport.
dateTimeFormat string Display format (e.g., yyyy-MM-dd HH:mm:ss).
timeZone string IANA time zone (e.g., Asia/Singapore, UTC).
disabledColumns[] array Columns to hide.
autoRefreshIntervalSeconds number Auto refresh interval.
parameters[] array Optional filters (e.g., tag).

dataSources[] object
- authHost, host, connection — primary jobs source
- authHostJobLog, hostJobLog, connectionJobLog — job log source

Note: Endpoint names are case-sensitive on some servers. Keep DSWebAPI/DSWebApi consistent with the backend route names.

AutomationList configuration

Field Type Description
dataSources[] array Scalar/workflow data source.
disabledTriggerNow boolean Disable the Trigger Now action.
jobRefferingPage string Route name for the jobs page (e.g., jobs).
disabledTextField object Toggle editability of name and group.
disabledColumns[] array Columns to hide in the automation grid.

Time Zone

Set timeZone per page using a valid IANA value. Examples: - Asia/Singapore — SG local time - UTC — Coordinated Universal Time - Asia/Jakarta, Europe/Copenhagen, etc.

This lets each page follow regional display needs without rebuilding the app.


Example portal.json

{
  "siteName": "DHI Operational Forecast",
  "authHost": "http://IAS-Depl1/DSAuth",
  "lastDays": 2,
  "logo": "assets/DHILogo.png",
  "style": {
    "backgroundColor": "#FFF",
    "primaryColor": "#004165",
    "secondaryColor": "#0098DB"
  },
  "pages": [
    {
      "name": "Jobs Minion",
      "type": "JobList",
      "enabled": true,
      "configuration": {
        "dataSources": [
          {
            "authHost": "http://IAS-Depl1/DSAuth",
            "host": "http://IAS-Depl1/DSWebApi",
            "connection": "wf-jobs-Minion",
            "authHostJobLog": "http://IAS-Depl1/DSAuth",
            "hostJobLog": "http://IAS-Depl1/DSWebAPI",
            "connectionJobLog": "wf-logs"
          }
        ],
        "newSignalRDataObj": true,
        "dateTimeFormat": "yyyy-MM-dd HH:mm:ss",
        "timeZone": "Asia/Singapore",
        "disabledColumns": [
          "accountId"
        ],
        "autoRefreshIntervalSeconds": 30,
        "parameters": [
          {
            "parameter": "tag",
            "label": "Tag"
          }
        ]
      }
    },
    {
      "name": "Jobs Titan",
      "type": "JobList",
      "enabled": true,
      "configuration": {
        "dataSources": [
          {
            "authHost": "http://IAS-Depl1/DSAuth",
            "host": "http://IAS-Depl1/DSWebApi",
            "connection": "wf-jobs-Titan",
            "authHostJobLog": "http://IAS-Depl1/DSAuth",
            "hostJobLog": "http://IAS-Depl1/DSWebAPI",
            "connectionJobLog": "wf-logs"
          }
        ],
        "newSignalRDataObj": true,
        "dateTimeFormat": "yyyy-MM-dd HH:mm:ss",
        "timeZone": "UTC",
        "disabledColumns": [
          "accountId"
        ],
        "autoRefreshIntervalSeconds": 30,
        "parameters": [
          {
            "parameter": "tag",
            "label": "Tag"
          }
        ]
      }
    },
    {
      "name": "Accounts",
      "type": "Accounts",
      "enabled": true,
      "configuration": {
        "authHost": "http://IAS-Depl1/DSAuth"
      }
    },
    {
      "name": "User Groups",
      "type": "UserGroups",
      "enabled": true,
      "configuration": {
        "authHost": "http://IAS-Depl1/DSAuth"
      }
    },
    {
      "name": "Automations",
      "type": "AutomationList",
      "enabled": true,
      "configuration": {
        "dataSources": [
          {
            "host": "http://IAS-Depl1/DSWebAPI",
            "connection": "wf-scalars",
            "connectionJobLog": "wf-jobs"
          }
        ],
        "disabledTriggerNow": false,
        "jobRefferingPage": "jobs",
        "disabledTextField": {
          "name": true,
          "group": true
        },
        "disabledColumns": [
          "triggerCondition.conditional",
          "triggerCondition.isMet"
        ]
      }
    }
  ]
}

Naming & Environments

  • Primary file: portal.json (checked into source control).
  • Per‑environment pattern (optional):
    • portal.local.json, portal.dev.json, portal.prod.json
    • Load the correct file at build time or via an environment variable (e.g., PORTAL_CONFIG_PATH).

Keep authHost, host, and hostJobLog on HTTPS in production environments whenever possible.


Quick Checklist

  • [ ] Place portal.json under apps/domain-services-ops/src/
  • [ ] Verify endpoint casing (DSWebAPI vs DSWebApi) matches backend routes
  • [ ] Set each page’s timeZone to a valid IANA ID
  • [ ] Confirm autoRefreshIntervalSeconds per ops needs
  • [ ] Hide sensitive columns with disabledColumns
  • [ ] Test Trigger Now permission and visibility in AutomationList