Path: blob/master/src/packages/next/components/account/config/register.ts
5943 views
/*1* This file is part of CoCalc: Copyright © 2021 Sagemath, Inc.2* License: MS-RSL – see LICENSE.md for details3*/45import type { IconName } from "@cocalc/frontend/components/icon";67import { capitalize } from "@cocalc/util/misc";8import { register as registerSearch } from "./search/entries";910export const components: { [main: string]: { [sub: string]: Function } } = {};1112interface Options {13path: string;14title?: string;15icon?: IconName | "ai";16desc?: string;17Component: Function;18danger?: boolean;19search?: string | object;20}2122interface Entry {23title: string;24icon?: IconName | "ai";25desc?: string;26danger?: boolean;27}2829export const menu: {30[main: string]: {31[sub: string]: Entry;32};33} = {};3435export default function register(opts: Options) {36const { path, icon, desc = "", Component, danger, search } = opts;37const [main, sub] = path.split("/");38const title = opts.title ?? capitalize(sub);3940if (components[main] == null) {41components[main] = {};42}43components[main][sub] = Component;4445if (desc || search) {46registerSearch({ path, title, desc, icon, search });47}4849if (menu[main] == null) {50menu[main] = {};51}52menu[main][sub] = { title, icon, desc, danger };53}5455export const topIcons: { [key: string]: IconName } = {56search: "search",57account: "user",58editor: "edit",59system: "gear",60licenses: "key",61purchases: "credit-card",62support: "support",63} as const;646566