@grafana/ui
Version:
Grafana Components Library
1 lines • 3.04 kB
Source Map (JSON)
{"version":3,"file":"WeekStartPicker.mjs","sources":["../../../../src/components/DateTimePickers/WeekStartPicker.tsx"],"sourcesContent":["import { useCallback, useMemo } from 'react';\n\nimport { BootData } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { Combobox } from '../Combobox/Combobox';\nimport { ComboboxOption } from '../Combobox/types';\n\nexport interface Props {\n onChange: (weekStart?: WeekStart) => void;\n value?: WeekStart;\n width?: number;\n autoFocus?: boolean;\n onBlur?: () => void;\n disabled?: boolean;\n inputId?: string;\n}\n\nexport type WeekStart = 'saturday' | 'sunday' | 'monday';\nconst weekStarts: ComboboxOption[] = [\n { value: '', label: 'Default' },\n { value: 'saturday', label: 'Saturday' },\n { value: 'sunday', label: 'Sunday' },\n { value: 'monday', label: 'Monday' },\n];\n\nexport function isWeekStart(value: string): value is WeekStart {\n return ['saturday', 'sunday', 'monday'].includes(value);\n}\n\ndeclare global {\n interface Window {\n grafanaBootData?: BootData;\n }\n}\n\n/**\n * Returns the system or user defined week start (as defined in bootData)\n * Or you can pass in an override weekStart string and have it be validated and returned as WeekStart type if valid\n */\nexport function getWeekStart(override?: string): WeekStart {\n if (override && isWeekStart(override)) {\n return override;\n }\n\n const preference = window?.grafanaBootData?.user?.weekStart;\n if (preference && isWeekStart(preference)) {\n return preference;\n }\n\n return 'monday';\n}\n\nexport const WeekStartPicker = (props: Props) => {\n const { onChange, width, autoFocus = false, onBlur, value, disabled = false, inputId } = props;\n\n const onChangeWeekStart = useCallback(\n (selectable: ComboboxOption | null) => {\n if (selectable && selectable.value !== undefined) {\n onChange(isWeekStart(selectable.value) ? selectable.value : undefined);\n }\n },\n [onChange]\n );\n\n const selected = useMemo(() => weekStarts.find((item) => item.value === value)?.value ?? '', [value]);\n\n return (\n <Combobox\n id={inputId}\n value={selected}\n placeholder={selectors.components.WeekStartPicker.placeholder}\n autoFocus={autoFocus}\n width={width}\n options={weekStarts}\n onChange={onChangeWeekStart}\n onBlur={onBlur}\n disabled={disabled}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BO,SAAS,YAAY,KAAmC,EAAA;AAC7D,EAAA,OAAO,CAAC,UAAY,EAAA,QAAA,EAAU,QAAQ,CAAA,CAAE,SAAS,KAAK,CAAA;AACxD;AAYO,SAAS,aAAa,QAA8B,EAAA;AAxC3D,EAAA,IAAA,EAAA,EAAA,EAAA;AAyCE,EAAI,IAAA,QAAA,IAAY,WAAY,CAAA,QAAQ,CAAG,EAAA;AACrC,IAAO,OAAA,QAAA;AAAA;AAGT,EAAA,MAAM,UAAa,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,eAAR,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAyB,SAAzB,IAA+B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAA;AAClD,EAAI,IAAA,UAAA,IAAc,WAAY,CAAA,UAAU,CAAG,EAAA;AACzC,IAAO,OAAA,UAAA;AAAA;AAGT,EAAO,OAAA,QAAA;AACT;;;;"}