chromium/chrome/browser/resources/ash/settings/os_page_availability.ts

// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview
 * This is the single source of truth for top-level page availability in
 * ChromeOS Settings. An available page is one reachable to the user (ie. the
 * route exists). A page may be (un)available based on guest mode and/or enabled
 * features.
 *
 * NOTE: This is separate from page visibility, which deals with what pages are
 * visible to the user. For example, after removing infinite scroll b/272139876
 * the bluetooth page can be available/accessible, but might not be the active
 * visible page.
 */

import {Section} from './mojom-webui/routes.mojom-webui.js';
import {routes} from './router.js';

/**
 * Defines which top-level pages/sections are available to the user. Page keys
 * should must derive from the Section enum in routes.mojom.
 */
export type OsPageAvailability = Record<Section, boolean>;

/**
 * Used to create the page availability object depending on route existence.
 * For example, the kAboutChromeOs page should be available if the corresponding
 * ABOUT route exists.
 *
 * Note: This function can be used in tests to create the page availability
 * object with expected values after overriding the set of available routes.
 */
export function createPageAvailability(): OsPageAvailability {
  return {
    [Section.kAboutChromeOs]: !!routes.ABOUT,
    [Section.kAccessibility]: !!routes.OS_ACCESSIBILITY,
    [Section.kApps]: !!routes.APPS,
    [Section.kBluetooth]: !!routes.BLUETOOTH,
    [Section.kDevice]: !!routes.DEVICE,
    [Section.kKerberos]: !!routes.KERBEROS,
    [Section.kMultiDevice]: !!routes.MULTIDEVICE,
    [Section.kNetwork]: !!routes.INTERNET,
    [Section.kPeople]: !!routes.OS_PEOPLE,
    [Section.kPersonalization]: !!routes.PERSONALIZATION,
    [Section.kPrivacyAndSecurity]: !!routes.OS_PRIVACY,

    // Only available when OsSettingsRevampWayfinding feature is enabled.
    [Section.kSystemPreferences]: !!routes.SYSTEM_PREFERENCES,

    // Only available when OsSettingsRevampWayfinding feature is disabled.
    [Section.kCrostini]: !!routes.CROSTINI,
    [Section.kDateAndTime]: !!routes.DATETIME,
    [Section.kFiles]: !!routes.FILES,
    [Section.kLanguagesAndInput]: !!routes.OS_LANGUAGES,
    [Section.kPrinting]: !!routes.OS_PRINTING,
    [Section.kReset]: !!routes.OS_RESET,
    [Section.kSearchAndAssistant]: !!routes.OS_SEARCH,
  };
}