1// Copyright (C) 2024 The Android Open Source Project 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15import m from 'mithril'; 16import {MenuItem} from '../../../widgets/menu'; 17import {Icons} from '../../../base/semantic_icons'; 18import {Chart, ChartConfig, ChartOption, toTitleCase} from './chart'; 19 20interface AddChartMenuItemAttrs { 21 readonly chartConfig: ChartConfig; 22 readonly chartOptions: Array<ChartOption>; 23 readonly addChart: (chart: Chart) => void; 24} 25 26export class AddChartMenuItem 27 implements m.ClassComponent<AddChartMenuItemAttrs> 28{ 29 private renderAddChartOptions( 30 config: ChartConfig, 31 chartOptions: Array<ChartOption>, 32 addChart: (chart: Chart) => void, 33 ): m.Children { 34 return chartOptions.map((option) => { 35 return m(MenuItem, { 36 label: toTitleCase(option), 37 onclick: () => addChart({option, config}), 38 }); 39 }); 40 } 41 42 view({attrs}: m.Vnode<AddChartMenuItemAttrs>) { 43 return m( 44 MenuItem, 45 {label: 'Add chart', icon: Icons.Chart}, 46 this.renderAddChartOptions( 47 attrs.chartConfig, 48 attrs.chartOptions, 49 attrs.addChart, 50 ), 51 ); 52 } 53} 54