UNPKG

@grafana/ui

Version:
1 lines 8.99 kB
{"version":3,"file":"TimeZonePicker.mjs","sources":["../../../../src/components/DateTimePickers/TimeZonePicker.tsx"],"sourcesContent":["import { toLower, isEmpty, isString } from 'lodash';\nimport { useMemo, useCallback } from 'react';\n\nimport {\n SelectableValue,\n getTimeZoneInfo,\n TimeZoneInfo,\n getTimeZoneGroups,\n GroupedTimeZones,\n TimeZone,\n InternalTimeZones,\n} from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { Select } from '../Select/Select';\n\nimport { TimeZoneGroup } from './TimeZonePicker/TimeZoneGroup';\nimport { formatUtcOffset } from './TimeZonePicker/TimeZoneOffset';\nimport { CompactTimeZoneOption, WideTimeZoneOption, SelectableZone } from './TimeZonePicker/TimeZoneOption';\n\nexport interface Props {\n onChange: (timeZone?: TimeZone) => void;\n value?: TimeZone;\n width?: number;\n autoFocus?: boolean;\n onBlur?: () => void;\n includeInternal?: boolean | InternalTimeZones[];\n disabled?: boolean;\n inputId?: string;\n menuShouldPortal?: boolean;\n openMenuOnFocus?: boolean;\n}\n\nexport const TimeZonePicker = (props: Props) => {\n const {\n onChange,\n width,\n autoFocus = false,\n onBlur,\n value,\n includeInternal = false,\n disabled = false,\n inputId,\n menuShouldPortal = true,\n openMenuOnFocus = true,\n } = props;\n const groupedTimeZones = useTimeZones(includeInternal);\n const selected = useSelectedTimeZone(groupedTimeZones, value);\n const filterBySearchIndex = useFilterBySearchIndex();\n const TimeZoneOption = width && width <= 45 ? CompactTimeZoneOption : WideTimeZoneOption;\n\n const onChangeTz = useCallback(\n (selectable: SelectableValue<string>) => {\n if (!selectable || !isString(selectable.value)) {\n return onChange(value);\n }\n onChange(selectable.value);\n },\n [onChange, value]\n );\n\n return (\n <Select\n inputId={inputId}\n value={selected}\n placeholder={t('time-picker.zone.select-search-input', 'Type to search (country, city, abbreviation)')}\n autoFocus={autoFocus}\n menuShouldPortal={menuShouldPortal}\n openMenuOnFocus={openMenuOnFocus}\n width={width}\n filterOption={filterBySearchIndex}\n options={groupedTimeZones}\n onChange={onChangeTz}\n onBlur={onBlur}\n components={{ Option: TimeZoneOption, Group: TimeZoneGroup }}\n disabled={disabled}\n aria-label={t('time-picker.zone.select-aria-label', 'Time zone picker')}\n />\n );\n};\n\ninterface SelectableZoneGroup extends SelectableValue<string> {\n options: SelectableZone[];\n}\n\nconst useTimeZones = (includeInternal: boolean | InternalTimeZones[]): SelectableZoneGroup[] => {\n const now = Date.now();\n\n const timeZoneGroups = useMemo(() => {\n return getTimeZoneGroups(includeInternal).map((group: GroupedTimeZones) => {\n const options = group.zones.reduce((options: SelectableZone[], zone) => {\n const info = getTimeZoneInfo(zone, now);\n\n if (!info) {\n return options;\n }\n\n const name = info.name.replace(/_/g, ' ');\n\n options.push({\n label: name,\n value: info.zone,\n searchIndex: getSearchIndex(name, info, now),\n });\n\n return options;\n }, []);\n\n return {\n label: group.name,\n options,\n };\n });\n }, [includeInternal, now]);\n\n return timeZoneGroups;\n};\n\nconst useSelectedTimeZone = (\n groups: SelectableZoneGroup[],\n timeZone: TimeZone | undefined\n): SelectableZone | undefined => {\n return useMemo(() => {\n if (timeZone === undefined) {\n return undefined;\n }\n\n const tz = toLower(timeZone);\n\n const group = groups.find((group) => {\n if (!group.label) {\n return isInternal(tz);\n }\n return tz.startsWith(toLower(group.label));\n });\n\n return group?.options.find((option) => {\n if (isEmpty(tz)) {\n return option.value === InternalTimeZones.default;\n }\n return toLower(option.value) === tz;\n });\n }, [groups, timeZone]);\n};\n\nconst isInternal = (timeZone: TimeZone): boolean => {\n switch (timeZone) {\n case InternalTimeZones.default:\n case InternalTimeZones.localBrowserTime:\n case InternalTimeZones.utc:\n return true;\n\n default:\n return false;\n }\n};\n\nconst useFilterBySearchIndex = () => {\n return useCallback((option: SelectableValue, searchQuery: string) => {\n if (!searchQuery || !option.data || !option.data.searchIndex) {\n return true;\n }\n return option.data.searchIndex.indexOf(toLower(searchQuery)) > -1;\n }, []);\n};\n\nconst getSearchIndex = (label: string, info: TimeZoneInfo, timestamp: number): string => {\n const parts: string[] = [\n toLower(info.zone),\n toLower(info.abbreviation),\n toLower(formatUtcOffset(timestamp, info.zone)),\n ];\n\n if (label !== info.zone) {\n parts.push(toLower(label));\n }\n\n for (const country of info.countries) {\n parts.push(toLower(country.name));\n parts.push(toLower(country.code));\n }\n\n return parts.join('|');\n};\n"],"names":["options","group"],"mappings":"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"}