Skip to content

Commit

Permalink
[Enhancement] add displayName to field and show displayName whenever …
Browse files Browse the repository at this point in the history
…available (#1538)

* add displayName to field and show displayName whenever available
* format csv with displayName
* copy displayName over when call addDataToMap createNewDataEntry
* Add to layer hover and legend

Signed-off-by: Shan He <heshan0131@gmail.com>
Signed-off-by: Giuseppe Macri <macri.giuseppe@gmail.com>
Co-authored-by: Giuseppe Macrì <macri.giuseppe@gmail.com>
  • Loading branch information
heshan0131 and macrigiuseppe committed Jul 19, 2021
1 parent a0d2a76 commit 8524061
Show file tree
Hide file tree
Showing 33 changed files with 344 additions and 82 deletions.
3 changes: 1 addition & 2 deletions package.json
Expand Up @@ -193,7 +193,6 @@
"babel-plugin-transform-builtin-extend": "^1.1.0",
"babel-tape-runner": "^3.0.0",
"babelify": "^10.0.0",
"coveralls": "^3.0.6",
"documentation": "^9.1.1",
"enzyme": "^3.9.0",
"enzyme-adapter-react-16": "^1.10.0",
Expand All @@ -211,7 +210,7 @@
"jest-puppeteer": "^4.4.0",
"jsdom": "^16.4.0",
"json-loader": "^0.5.4",
"nyc": "^11.4.1",
"nyc": "^15.1.0",
"prettier": "1.19.1",
"progress-bar-webpack-plugin": "^2.1.0",
"puppeteer": "^2.1.1",
Expand Down
8 changes: 6 additions & 2 deletions src/actions/actions.d.ts
Expand Up @@ -40,6 +40,8 @@ export type ProtoDataset = {
name: string;
type?: string;
format?: string;
displayName?: string;
id?: string;
}[];
rows: any[][];
};
Expand All @@ -63,7 +65,7 @@ export type AddDataToMapPayload = {
datasets: ProtoDataset[] | ProtoDataset;
options?: AddDataToMapOptions;
config?: ParsedConfig;
info?: Partial<MapInfo>
info?: Partial<MapInfo>;
};

export function addDataToMap(
Expand Down Expand Up @@ -93,7 +95,9 @@ export type KeplerGlInitPayload = {
initialUiState?: Partial<UiState>;
};

export function keplerGlInit(options?: KeplerGlInitPayload): {
export function keplerGlInit(
options?: KeplerGlInitPayload
): {
type: ActionTypes.INIT;
payload: KeplerGlInitPayload;
};
9 changes: 5 additions & 4 deletions src/components/common/field-selector.js
Expand Up @@ -29,7 +29,8 @@ import {toArray} from 'utils/utils';
import {notNullorUndefined} from 'utils/data-utils';
import FieldTokenFactory from '../common/field-token';

const defaultDisplayOption = d => d.name;
const defaultDisplayOption = d => d.displayName || d.name;
const defaultValueOption = d => d.name;

const StyledToken = styled.div`
display: inline-block;
Expand Down Expand Up @@ -128,8 +129,8 @@ function FieldSelectorFactory(FieldListItemFactory) {
.map(d =>
fields.find(f =>
notNullorUndefined(d) && d.name
? d.name === defaultDisplayOption(f)
: d === defaultDisplayOption(f)
? d.name === defaultValueOption(f)
: d === defaultValueOption(f)
)
)
.filter(d => d)
Expand All @@ -156,7 +157,7 @@ function FieldSelectorFactory(FieldListItemFactory) {
getOptionValue={d => d}
closeOnSelect={this.props.closeOnSelect}
displayOption={defaultDisplayOption}
filterOption="name"
filterOption="displayName"
fixedOptions={this.props.suggested}
inputTheme={this.props.inputTheme}
size={this.props.size}
Expand Down
2 changes: 1 addition & 1 deletion src/components/common/histogram-plot.js
Expand Up @@ -62,7 +62,7 @@ function HistogramPlotFactory() {
const y = useMemo(
() =>
scaleLinear()
.domain([0, max(histogram, getValue)])
.domain([0, Number(max(histogram, getValue))])
.range([0, height]),
[histogram, height, getValue]
);
Expand Down
2 changes: 1 addition & 1 deletion src/components/common/item-selector/item-selector.js
Expand Up @@ -277,6 +277,7 @@ class ItemSelector extends Component {
className: classnames({
active: this.state.showTypeahead
}),
displayOption,
disabled: this.props.disabled,
onClick: this._showTypeahead,
error: this.props.isError,
Expand All @@ -294,7 +295,6 @@ class ItemSelector extends Component {
{...dropdownSelectProps}
selectedItems={toArray(this.props.selectedItems)}
placeholder={this.props.placeholder}
displayOption={displayOption}
removeItem={this._removeItem}
CustomChickletComponent={this.props.CustomChickletComponent}
inputTheme={this.props.inputTheme}
Expand Down
8 changes: 7 additions & 1 deletion src/components/map/layer-hover-info.js
Expand Up @@ -118,7 +118,13 @@ const EntryInfoRow = ({item, fields, data, primaryData, compareType}) => {
compareType
});

return <Row name={field.name} value={displayValue} deltaValue={displayDeltaValue} />;
return (
<Row
name={field.displayName || field.name}
value={displayValue}
deltaValue={displayDeltaValue}
/>
);
};

// TODO: supporting comparative value for aggregated cells as well
Expand Down
Expand Up @@ -115,22 +115,25 @@ function TooltipChickletFactory(dataId, config, onChange, fields) {
};

render() {
const {disabled, name, remove} = this.props;
const {disabled, item, displayOption, remove} = this.props;
const {show} = this.state;
const tooltipField = config.fieldsToShow[dataId].find(
fieldToShow => fieldToShow.name === name
fieldToShow => fieldToShow.name === item.name
);
if (!tooltipField) {
return null;
}
const formatLabels = getFormatLabels(fields, tooltipField.name);
const hasFormat = Boolean(tooltipField.format);
const selectionIndex = formatLabels.findIndex(fl => getValue(fl) === tooltipField.format);
const hashStyle = show ? hashStyles.SHOW : hasFormat ? hashStyles.ACTIVE : null;

return (
<ChickletButton ref={node => (this.node = node)}>
<ChickletTag>{name}</ChickletTag>
<ChickletTag>{displayOption(item)}</ChickletTag>
{formatLabels.length > 1 && (
<ChickletAddonWrapper>
<ChickletAddon data-tip data-for={`addon-${name}`}>
<ChickletAddon data-tip data-for={`addon-${tooltipField.name}`}>
<IconDiv status={hashStyle}>
<Hash
height="8px"
Expand All @@ -140,7 +143,7 @@ function TooltipChickletFactory(dataId, config, onChange, fields) {
}}
/>
</IconDiv>
<Tooltip id={`addon-${name}`} effect="solid">
<Tooltip id={`addon-${tooltipField.name}`} effect="solid">
<span>
{hasFormat ? (
getFormatTooltip(formatLabels, tooltipField.format)
Expand All @@ -155,7 +158,7 @@ function TooltipChickletFactory(dataId, config, onChange, fields) {
<DropdownList
options={formatLabels}
selectionIndex={selectionIndex}
displayOption={item => item.label}
displayOption={({label}) => label}
onOptionSelected={(result, e) => {
e.stopPropagation();
this.setState({
Expand All @@ -164,9 +167,9 @@ function TooltipChickletFactory(dataId, config, onChange, fields) {

const oldFieldsToShow = config.fieldsToShow[dataId];
const fieldsToShow = oldFieldsToShow.map(fieldToShow => {
return fieldToShow.name === name
return fieldToShow.name === tooltipField.name
? {
name,
name: tooltipField.name,
format: getValue(result)
}
: fieldToShow;
Expand Down
2 changes: 1 addition & 1 deletion src/components/side-panel/panel-header.js
Expand Up @@ -89,7 +89,7 @@ const StyledToolbar = styled(Toolbar)`
export const PanelAction = ({item, onClick}) => (
<StyledPanelAction data-tip data-for={`${item.id}-action`} onClick={onClick}>
{item.label ? <p>{item.label}</p> : null}
<a target={item.blank ? '_blank' : ''} href={item.href}>
<a target={item.blank ? '_blank' : ''} href={item.href} rel="noreferrer">
<item.iconComponent height="20px" {...item.iconComponentProps} />
</a>
{item.tooltip ? (
Expand Down
5 changes: 4 additions & 1 deletion src/connect/with-local-selector.d.ts
@@ -1,8 +1,11 @@
import {Component} from 'react';
import KeplerGlContext from 'components/context';
import {ConnectedComponent} from 'react-redux';

interface ContextSelector {
(state: any, context: any): KeplerGlContext;
}

export default function withLocalSelector<P, S>(component: Component<P, S>): Component<P, S>;
export default function withLocalSelector<P, S>(
component: ConnectedComponent<P, S>
): Component<P, S>;
3 changes: 2 additions & 1 deletion src/layers/base-layer.js
Expand Up @@ -337,7 +337,8 @@ class Layer {
return {
label: this.visConfigSettings[this.visualChannels[key].range].label,
measure: this.config[this.visualChannels[key].field]
? this.config[this.visualChannels[key].field].name
? (this.config[this.visualChannels[key].field].displayName ||
this.config[this.visualChannels[key].field].name)
: this.visualChannels[key].defaultMeasure
};
}
Expand Down
4 changes: 3 additions & 1 deletion src/processors/data-processor.js
Expand Up @@ -308,6 +308,8 @@ export function getFieldsFromData(data, fieldOrder) {

return {
name,
id: name,
displayName: name,
format,
fieldIdx: index,
type: analyzerTypeToFieldType(type),
Expand Down Expand Up @@ -538,7 +540,7 @@ export function processGeojson(rawData) {
* @returns {string} csv string
*/
export function formatCsv(data, fields) {
const columns = fields.map(f => f.name);
const columns = fields.map(f => f.displayName || f.name);
const formattedData = [columns];

// parse geojson object as string
Expand Down
2 changes: 1 addition & 1 deletion src/processors/file-handler.d.ts
Expand Up @@ -18,7 +18,7 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

import {ProtoDataset, AddDataToMapPayload} from 'actions/actions';
import {AddDataToMapPayload} from 'actions/actions';

export type FileCacheItem = {
data: any;
Expand Down
2 changes: 1 addition & 1 deletion src/reducers/vis-state-selectors.js
Expand Up @@ -20,7 +20,7 @@

import {createSelector} from 'reselect';

// NOTE: default formats must match file-handler.js
// NOTE: default formats must match file-handler-test.js
const DEFAULT_FILE_EXTENSIONS = ['csv', 'json', 'geojson'];
const DEFAULT_FILE_FORMATS = ['CSV', 'Json', 'GeoJSON'];

Expand Down
8 changes: 4 additions & 4 deletions src/utils/dom-to-image.js
Expand Up @@ -115,7 +115,7 @@ function toSvg(node, options) {

/**
* @param {Node} node - The DOM Node object to render
* @param {Object} options - Rendering options, @see {@link toSvg}
* @param {Object} options - Rendering options
* @return {Promise} - A promise that is fulfilled with a Uint8Array containing RGBA pixel data.
* */
function toPixelData(node, options) {
Expand All @@ -126,7 +126,7 @@ function toPixelData(node, options) {

/**
* @param {Node} node - The DOM Node object to render
* @param {Object} options - Rendering options, @see {@link toSvg}
* @param {Object} options - Rendering options
* @return {Promise} - A promise that is fulfilled with a PNG image data URL
* */
function toPng(node, options) {
Expand All @@ -135,7 +135,7 @@ function toPng(node, options) {

/**
* @param {Node} node - The DOM Node object to render
* @param {Object} options - Rendering options, @see {@link toSvg}
* @param {Object} options - Rendering options
* @return {Promise} - A promise that is fulfilled with a JPEG image data URL
* */
function toJpeg(node, options) {
Expand All @@ -145,7 +145,7 @@ function toJpeg(node, options) {

/**
* @param {Node} node - The DOM Node object to render
* @param {Object} options - Rendering options, @see {@link toSvg}
* @param {Object} options - Rendering options
* @return {Promise} - A promise that is fulfilled with a PNG image blob
* */
function toBlob(node, options) {
Expand Down
9 changes: 4 additions & 5 deletions src/utils/table-utils/kepler-table.d.ts
Expand Up @@ -7,11 +7,14 @@ export type Field = {
analyzerType: string;
id?: string;
name: string;
displayName: string;
format: string;
type: string;
fieldIdx: number;
valueAccessor(v: any[]): any;
filterProps?: any;
metadata?: any;
displayName: string;
};

export type GpuFilter = {
Expand Down Expand Up @@ -45,11 +48,7 @@ export type FilterDatasetOpt = {
ignoreDomain?: boolean;
};

export function sortDatasetByColumn(
dataset: Dataset,
column: string,
mode?: string
): Dataset;
export function sortDatasetByColumn(dataset: Dataset, column: string, mode?: string): Dataset;

export function findPointFieldPairs(fields: Feild[]): FieldPair[];

Expand Down
2 changes: 2 additions & 0 deletions src/utils/table-utils/kepler-table.js
Expand Up @@ -71,6 +71,8 @@ class KeplerTable {
const fields = data.fields.map((f, i) => ({
...f,
fieldIdx: i,
id: f.name,
displayName: f.displayName || f.name,
valueAccessor: maybeToDate.bind(
null,
// is time
Expand Down
8 changes: 8 additions & 0 deletions test/browser/components/geocoder-panel-test.js
Expand Up @@ -62,6 +62,8 @@ test('GeocoderPanel - render', t => {
fields: [
{
name: 'lt',
id: 'lt',
displayName: 'lt',
format: '',
fieldIdx: 0,
type: 'integer',
Expand All @@ -70,6 +72,8 @@ test('GeocoderPanel - render', t => {
},
{
name: 'ln',
id: 'ln',
displayName: 'ln',
format: '',
fieldIdx: 1,
type: 'integer',
Expand All @@ -78,6 +82,8 @@ test('GeocoderPanel - render', t => {
},
{
name: 'icon',
id: 'icon',
displayName: 'icon',
format: '',
fieldIdx: 2,
type: 'string',
Expand All @@ -86,6 +92,8 @@ test('GeocoderPanel - render', t => {
},
{
name: 'text',
id: 'text',
displayName: 'text',
format: '',
fieldIdx: 3,
type: 'string',
Expand Down

0 comments on commit 8524061

Please sign in to comment.