mirror of
https://github.com/getredash/redash.git
synced 2026-03-23 13:00:10 -04:00
* Migrate table editor to React: skeleton, Grid tab * Columns tab * Cleanup * Columns tab: DnD column sorting * Columns types should be JSX * New Columns tab UI/X * Use Sortable component on Columns tab * Tests: Grid Settings * Tests: Columns Settings * Tests: Editors for Text, Number, Boolean and Date/Time columns * Tests: Editors for Image and Link columns * Minor UI fix * Trigger build * Debounce inputs
68 lines
1.9 KiB
JavaScript
68 lines
1.9 KiB
JavaScript
import React from 'react';
|
|
import PropTypes from 'prop-types';
|
|
import { useDebouncedCallback } from 'use-debounce';
|
|
import Input from 'antd/lib/input';
|
|
import Popover from 'antd/lib/popover';
|
|
import Icon from 'antd/lib/icon';
|
|
import { createDateTimeFormatter } from '@/lib/value-format';
|
|
|
|
function Editor({ column, onChange }) {
|
|
const [onChangeDebounced] = useDebouncedCallback(onChange, 200);
|
|
|
|
return (
|
|
<React.Fragment>
|
|
<div className="m-b-15">
|
|
<label htmlFor={`table-column-editor-${column.name}-datetime-format`}>
|
|
Date/Time format
|
|
<Popover
|
|
content={(
|
|
<React.Fragment>
|
|
Format
|
|
<a href="https://momentjs.com/docs/#/displaying/format/" target="_blank" rel="noopener noreferrer">specs.</a>
|
|
</React.Fragment>
|
|
)}
|
|
>
|
|
<Icon className="m-l-5" type="question-circle" theme="filled" />
|
|
</Popover>
|
|
</label>
|
|
<Input
|
|
id={`table-column-editor-${column.name}-datetime-format`}
|
|
data-test="Table.ColumnEditor.DateTime.Format"
|
|
defaultValue={column.dateTimeFormat}
|
|
onChange={event => onChangeDebounced({ dateTimeFormat: event.target.value })}
|
|
/>
|
|
</div>
|
|
</React.Fragment>
|
|
);
|
|
}
|
|
|
|
Editor.propTypes = {
|
|
column: PropTypes.shape({
|
|
name: PropTypes.string.isRequired,
|
|
dateTimeFormat: PropTypes.string,
|
|
}).isRequired,
|
|
onChange: PropTypes.func.isRequired,
|
|
};
|
|
|
|
export default function initDateTimeColumn(column) {
|
|
const format = createDateTimeFormatter(column.dateTimeFormat);
|
|
|
|
function prepareData(row) {
|
|
return {
|
|
text: format(row[column.name]),
|
|
};
|
|
}
|
|
|
|
function DateTimeColumn({ row }) { // eslint-disable-line react/prop-types
|
|
const { text } = prepareData(row);
|
|
return text;
|
|
}
|
|
|
|
DateTimeColumn.prepareData = prepareData;
|
|
|
|
return DateTimeColumn;
|
|
}
|
|
|
|
initDateTimeColumn.friendlyName = 'Date/Time';
|
|
initDateTimeColumn.Editor = Editor;
|