diff --git a/src/components/Table/index.tsx b/src/components/Table/index.tsx index d9c737e..88a3936 100644 --- a/src/components/Table/index.tsx +++ b/src/components/Table/index.tsx @@ -1,6 +1,7 @@ import { memo, useEffect, useState, ReactNode } from 'react' import { InputNumber, Select, Table as RawTable, Tag, SelectProps, TableProps } from 'antd' import { DefaultOptionType, SelectValue } from 'antd/lib/select' +import { ColumnProps } from 'antd/lib/table' import { Rule } from 'rc-field-form/lib/interface' import { tryAddKeys } from './EditableTable' @@ -32,11 +33,11 @@ export const makeNumericRender = (fixed?: number) => (value: any, _: object): Re ) } -export const makeNumericColumnOptions = (fixed?: number, sorterKey?: string) => ({ +export const makeNumericColumnOptions = (fixed?: number, sorterKey?: string): columnPropsOther => ({ editable: true, initialValue: 0, width: 100, - sorter: sorterKey ? makeNumericSorter(sorterKey) : null, + sorter: sorterKey ? makeNumericSorter(sorterKey) : undefined, formItemRules: [ { required: true, @@ -51,7 +52,7 @@ export const makeNumericColumnOptions = (fixed?: number, sorterKey?: string) => other - объект с дополнительными свойствами колонки поддерживаются все базовые свойства из описания https://ant.design/components/table/#Column плю дополнительные для колонок EditableTable: */ -interface columnPropsOther { +type columnPropsOther = ColumnProps & { // редактируемая колонка editable?: boolean // react компонента редактора @@ -309,3 +310,69 @@ export type TableContainer = TableProps & { export const Table = memo(({dataSource, children, ...other}) => ( {children} )) + +const rawTimezones = { + 'Калининград': 2, + 'Москва': 3, + 'Самара': 4, + 'Екатеринбург': 5, + 'Омск': 6, + 'Красноярск': 7, + 'Новосибирск': 7, + 'Иркутск': 8, + 'Чита': 9, + 'Владивосток': 10, + 'Магадан': 11, + 'Южно-Сахалинск': 11, + 'Среднеколымск': 11, + 'Анадырь': 12, + 'Петропавловск-Камчатский': 12, +} + +const timezoneOptions = Object + .entries(rawTimezones) + .sort((a, b) => a[1] - b[1]) + .map(([id, hours]) => ({ + label: `UTC${hours > 0 ? '+':''}${('0' + hours).slice(-2)} :: ${id}`, + value: id, + })) + +export type TimezoneSelectProps = SelectProps & { + // +} + +export const TimezoneSelect = memo(({ onChange, ...other }) => { + const [id, setId] = useState(null) + + useEffect(() => onChange?.({ + timezoneId: id, + hours: id ? rawTimezones[id] : 0, + isOverride: false, + }, []), [id, onChange]) + + return (