| // Copyright 2019 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| /** |
| * @fileoverview A file containing common constants used in the Approvals |
| * feature. |
| */ |
| |
| // Only approvers are allowed to set an approval state to one of these states. |
| export const APPROVER_RESTRICTED_STATUSES = new Set( |
| ['NA', 'Approved', 'NotApproved']); |
| |
| // Map the internal enum names used in Monorail's backend from approval |
| // statuses to user friendly names. |
| export const STATUS_ENUM_TO_TEXT = { |
| '': 'NotSet', |
| 'NEEDS_REVIEW': 'NeedsReview', |
| 'NA': 'NA', |
| 'REVIEW_REQUESTED': 'ReviewRequested', |
| 'REVIEW_STARTED': 'ReviewStarted', |
| 'NEED_INFO': 'NeedInfo', |
| 'APPROVED': 'Approved', |
| 'NOT_APPROVED': 'NotApproved', |
| }; |
| |
| // Reverse mapping of user friendly names to internal enum names. |
| // Note that NotSet -> NOT_SET maps differently in reverse because |
| // the backend sends an empty message to communicate NOT_SET. |
| export const TEXT_TO_STATUS_ENUM = { |
| 'NotSet': 'NOT_SET', |
| 'NeedsReview': 'NEEDS_REVIEW', |
| 'NA': 'NA', |
| 'ReviewRequested': 'REVIEW_REQUESTED', |
| 'ReviewStarted': 'REVIEW_STARTED', |
| 'NeedInfo': 'NEED_INFO', |
| 'Approved': 'APPROVED', |
| 'NotApproved': 'NOT_APPROVED', |
| }; |
| |
| // Statuses mapped to CSS classes used to apply custom styles per |
| // status like background colors. |
| export const STATUS_CLASS_MAP = { |
| 'NotSet': 'status-notset', |
| 'NeedsReview': 'status-notset', |
| 'NA': 'status-na', |
| 'ReviewRequested': 'status-pending', |
| 'ReviewStarted': 'status-pending', |
| 'NeedInfo': 'status-pending', |
| 'Approved': 'status-approved', |
| 'NotApproved': 'status-rejected', |
| }; |
| |
| // Hardcoded frontent documentation for each approval status. |
| export const STATUS_DOCSTRING_MAP = { |
| 'NotSet': '', |
| 'NeedsReview': 'Review/survey not started', |
| 'NA': 'Approval gate not required', |
| 'ReviewRequested': 'Approval requested', |
| 'ReviewStarted': 'Approval in progress', |
| 'NeedInfo': 'Approval review needs more information', |
| 'Approved': 'Approved for Launch', |
| 'NotApproved': 'Not Approved for Launch', |
| }; |
| |
| // The Material Design icon names that are attached to each |
| // CSS class. |
| export const CLASS_ICON_MAP = { |
| 'status-na': 'remove', |
| 'status-notset': 'warning', |
| 'status-pending': 'autorenew', |
| 'status-approved': 'done', |
| 'status-rejected': 'close', |
| }; |
| |
| // Statuses formated as an Array rather than an Object for ease of use |
| // by components. |
| export const APPROVAL_STATUSES = Object.keys(STATUS_CLASS_MAP).map( |
| (status) => ({status, docstring: STATUS_DOCSTRING_MAP[status], rank: 1})); |