import React, { PureComponent } from 'react'; import { Label } from 'app/core/components/Label/Label'; import SimplePicker from 'app/core/components/Picker/SimplePicker'; import { getBackendSrv, BackendSrv } from 'app/core/services/backend_srv'; import { DashboardSearchHit } from 'app/types'; export interface Props { resourceUri: string; } export interface State { homeDashboardId: number; theme: string; timezone: string; dashboards: DashboardSearchHit[]; } const themes = [{ value: '', text: 'Default' }, { value: 'dark', text: 'Dark' }, { value: 'light', text: 'Light' }]; const timezones = [ { value: '', text: 'Default' }, { value: 'browser', text: 'Local browser time' }, { value: 'utc', text: 'UTC' }, ]; export class SharedPreferences extends PureComponent { backendSrv: BackendSrv = getBackendSrv(); constructor(props) { super(props); console.log('props', props); this.state = { homeDashboardId: 0, theme: '', timezone: '', dashboards: [], }; } async componentDidMount() { const prefs = await this.backendSrv.get(`/api/${this.props.resourceUri}/preferences`); const dashboards = await this.backendSrv.search({ starred: true }); this.setState({ homeDashboardId: prefs.homeDashboardId, theme: prefs.theme, timezone: prefs.timezone, dashboards: [{ id: 0, title: 'Default', tags: [], type: '', uid: '', uri: '', url: '' }, ...dashboards], }); } onSubmitForm = async event => { event.preventDefault(); const { homeDashboardId, theme, timezone } = this.state; await this.backendSrv.put(`/api/${this.props.resourceUri}/preferences`, { homeDashboardId, theme, timezone, }); }; onThemeChanged = (theme: string) => { this.setState({ theme }); }; onTimeZoneChanged = (timezone: string) => { this.setState({ timezone }); }; onHomeDashboardChanged = (dashboardId: number) => { this.setState({ homeDashboardId: dashboardId }); }; render() { const { theme, timezone, homeDashboardId, dashboards } = this.state; return (

Preferences

UI Theme item.value === theme)} options={themes} getOptionValue={i => i.value} getOptionLabel={i => i.text} onSelected={theme => this.onThemeChanged(theme.value)} width={20} />
dashboard.id === homeDashboardId)} getOptionValue={i => i.id} getOptionLabel={i => i.title} onSelected={(dashboard: DashboardSearchHit) => this.onHomeDashboardChanged(dashboard.id)} options={dashboards} placeholder="Chose default dashboard" width={20} />
item.value === timezone)} getOptionValue={i => i.value} getOptionLabel={i => i.text} onSelected={timezone => this.onTimeZoneChanged(timezone.value)} options={timezones} width={20} />
); } } export default SharedPreferences;