Skip to content

Commit d5a18ea

Browse files
authored
The default palette for the color selection dialog in charts (#2916)
1 parent cdb0eb8 commit d5a18ea

File tree

12 files changed

+186
-71
lines changed

12 files changed

+186
-71
lines changed

src/shared/types/wizard/bars.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ export interface BarOneColorSettings {
7474
export interface BarTwoColorSettings {
7575
colorType: BarsColorType.TwoColor;
7676
settings: {
77-
palette: string;
77+
palette: string | undefined;
7878
negativeColorIndex?: number;
7979
negativeColor?: string;
8080
positiveColorIndex?: number;

src/ui/units/wizard/components/Dialogs/DialogColor/ColorSettingsContainer/ColorSettingsContainer.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import {
3333
} from '../../../../selectors/dialogColor';
3434
import type {ExtraSettings} from '../DialogColor';
3535
import DialogColorGradientBody from '../DialogColorGradient/DialogColorGradient';
36-
import DialogColorPalette, {DEFAULT_COLOR} from '../DialogColorPalette/DialogColorPalette';
36+
import {DEFAULT_COLOR, PaletteContainer} from '../DialogColorPalette/DialogColorPalette';
3737

3838
import './ColorSettingsContainer.scss';
3939

@@ -108,7 +108,7 @@ class ColorSettingsContainer extends React.Component<Props> {
108108

109109
private renderPaletteBody = () => {
110110
return (
111-
<DialogColorPalette
111+
<PaletteContainer
112112
onPaletteItemClick={this.onPaletteItemClick}
113113
paletteState={this.props.paletteState}
114114
setPaletteState={(paletteState: Partial<PaletteState>) => {

src/ui/units/wizard/components/Dialogs/DialogColor/DialogColorPalette/DialogColorPalette.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ export interface Props {
5252
colorSectionFields?: Field[];
5353
}
5454

55-
class PaletteContainer extends React.Component<Props> {
55+
export class PaletteContainer extends React.Component<Props> {
5656
render() {
5757
return (
5858
<div className={b('container')}>
@@ -105,6 +105,7 @@ class PaletteContainer extends React.Component<Props> {
105105

106106
const options = getPaletteSelectorItems({
107107
colorPalettes,
108+
withAuto: true,
108109
});
109110

110111
return (
@@ -116,7 +117,7 @@ class PaletteContainer extends React.Component<Props> {
116117
className={b('palette-select')}
117118
onUpdate={([selectedPalette]) => {
118119
this.props.setPaletteState({
119-
palette: selectedPalette,
120+
palette: selectedPalette ?? undefined,
120121
mountedColors: {},
121122
});
122123
}}

src/ui/units/wizard/components/Dialogs/DialogField/components/BarsSettings/BarsSettings.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,9 @@ export const BarsSettings: React.FC<BarsSettingsProps> = (props: BarsSettingsPro
8282

8383
const handlePaletteUpdate = React.useCallback(
8484
(palette: string) => {
85-
let updateParams: Partial<TableBarsSettings['colorSettings']['settings']> = {palette};
85+
let updateParams: Partial<TableBarsSettings['colorSettings']['settings']> = {
86+
palette: palette || undefined,
87+
};
8688

8789
switch (state.colorSettings.colorType) {
8890
case BarsColorType.OneColor: {

src/ui/units/wizard/components/Dialogs/DialogField/components/BarsSettings/components/ColorControls/ColorsControl.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ export const ColorsControl: React.FC<ColorsControlProps> = (props: ColorsControl
2828
return getPaletteColors(colorSettings.settings.palette, colorPalettes);
2929
}, [colorPalettes, colorSettings.settings.palette]);
3030

31+
const selectedPalette = colorSettings.settings.palette ?? '';
32+
3133
switch (colorSettings.colorType) {
3234
case BarsColorType.OneColor: {
3335
const currentColor = getColorByColorSettings({
@@ -41,7 +43,7 @@ export const ColorsControl: React.FC<ColorsControlProps> = (props: ColorsControl
4143
title={i18n('wizard', 'label_bars-color')}
4244
setting={
4345
<PaletteColorControl
44-
palette={colorSettings.settings.palette}
46+
palette={selectedPalette}
4547
controlQa={DialogFieldBarsSettingsQa.ColorSelector}
4648
currentColor={currentColor}
4749
currentColorIndex={colorSettings.settings.colorIndex}
@@ -77,7 +79,7 @@ export const ColorsControl: React.FC<ColorsControlProps> = (props: ColorsControl
7779
title={i18n('wizard', 'label_bars-positive-color')}
7880
setting={
7981
<PaletteColorControl
80-
palette={colorSettings.settings.palette}
82+
palette={selectedPalette}
8183
controlQa={DialogFieldBarsSettingsQa.PositiveColorSelector}
8284
currentColor={positiveColor}
8385
currentColorIndex={colorSettings.settings.positiveColorIndex}
@@ -96,7 +98,7 @@ export const ColorsControl: React.FC<ColorsControlProps> = (props: ColorsControl
9698
title={i18n('wizard', 'label_bars-negative-color')}
9799
setting={
98100
<PaletteColorControl
99-
palette={colorSettings.settings.palette}
101+
palette={selectedPalette}
100102
controlQa={DialogFieldBarsSettingsQa.NegativeColorSelector}
101103
currentColor={negativeColor}
102104
currentColorIndex={colorSettings.settings.negativeColorIndex}

src/ui/units/wizard/components/Dialogs/DialogField/components/ButtonColorDialog/ButtonColorDialog.tsx

Lines changed: 37 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@ import block from 'bem-cn-lite';
55
import AutogeneratedPaletteIcon from 'components/AutogeneratedPaletteIcon/AutogeneratedPaletteIcon';
66
import {i18n} from 'i18n';
77
import {useDispatch, useSelector} from 'react-redux';
8-
import type {ColorsConfig, Field, GradientType, InternalPaletteId} from 'shared';
8+
import type {ColorsConfig, Field, GradientType, InternalPaletteId, Palette} from 'shared';
99
import {fetchColorPalettes} from 'store/actions/colorPaletteEditor';
1010
import {selectColorPalettesDict} from 'store/selectors/colorPaletteEditor';
11+
import {getDefaultPaletteLabel} from 'ui/units/wizard/utils/palette';
12+
import {getDefaultColorPalette} from 'ui/utils';
1113

1214
import {openDialogColor} from '../../../../../actions/dialogColor';
1315
import {PaletteIcon, PaletteType} from '../../../../PaletteIcon/PaletteIcon';
@@ -52,17 +54,48 @@ export const ButtonColorDialog: React.FC<ButtonColorDialogProps> = (
5254
} = props;
5355

5456
const colorPalette = colorPalettes[paletteId];
57+
const defaultColorPalette = getDefaultColorPalette({
58+
colorPalettes: Object.values(colorPalettes),
59+
});
5560

56-
let paletteName: string;
57-
61+
let paletteName: string | JSX.Element;
5862
if (colorPalette) {
5963
paletteName = colorPalette.displayName;
64+
} else if (!paletteId) {
65+
paletteName = getDefaultPaletteLabel(defaultColorPalette);
6066
} else if (paletteType === PaletteType.ColorPalette) {
6167
paletteName = i18n('wizard.palette', `label_${paletteId as InternalPaletteId}`);
6268
} else {
6369
paletteName = i18n('wizard', `label_${paletteId as GradientType}`);
6470
}
6571

72+
const icon = React.useMemo(() => {
73+
let customColorPalette = colorPalette;
74+
if (!customColorPalette && !paletteId && 'colors' in defaultColorPalette) {
75+
customColorPalette = defaultColorPalette;
76+
}
77+
78+
if (customColorPalette) {
79+
return (
80+
<AutogeneratedPaletteIcon
81+
className={b('icon')}
82+
colors={customColorPalette.colors}
83+
isGradient={customColorPalette.isGradient}
84+
/>
85+
);
86+
}
87+
88+
const systemColorPalette = defaultColorPalette as Palette;
89+
90+
return (
91+
<PaletteIcon
92+
paletteId={paletteId || systemColorPalette.id}
93+
paletteType={paletteType}
94+
className={b('icon')}
95+
/>
96+
);
97+
}, [colorPalette, defaultColorPalette, paletteId, paletteType]);
98+
6699
return (
67100
<Button
68101
qa={qa}
@@ -83,20 +116,7 @@ export const ButtonColorDialog: React.FC<ButtonColorDialogProps> = (
83116
}
84117
>
85118
<span className={b('content-container')}>
86-
{colorPalette ? (
87-
<AutogeneratedPaletteIcon
88-
className={b('icon')}
89-
colors={colorPalette.colors}
90-
isGradient={colorPalette.isGradient}
91-
/>
92-
) : (
93-
<PaletteIcon
94-
paletteId={paletteId}
95-
paletteType={paletteType}
96-
className={b('icon')}
97-
/>
98-
)}
99-
119+
{icon}
100120
<span>{paletteName}</span>
101121
</span>
102122
</Button>

src/ui/units/wizard/components/Dialogs/DialogField/utils/barsSettings.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import {
77
isMeasureType,
88
isNumberField,
99
} from 'shared';
10-
import {getTenantDefaultColorPaletteId} from 'ui/constants/common';
1110

1211
const PLACEHOLDERS_WITH_BARS_SETTINGS: Record<string, Record<string, boolean>> = {
1312
[WizardVisualizationId.FlatTable]: {
@@ -23,7 +22,7 @@ export const getDefaultBarsSettings = (): TableBarsSettings => ({
2322
colorSettings: {
2423
colorType: BarsColorType.TwoColor,
2524
settings: {
26-
palette: getTenantDefaultColorPaletteId(),
25+
palette: undefined,
2726
positiveColorIndex: 2,
2827
negativeColorIndex: 1,
2928
},

src/ui/units/wizard/components/Dialogs/DialogMetricSettings/DialogMetricSettings.tsx

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import type {CommonSharedExtraSettings} from '../../../../../../shared';
1212
import {DialogMetricSettingsQa} from '../../../../../../shared';
1313
import type {DatalensGlobalState} from '../../../../../../ui';
1414
import DialogManager from '../../../../../components/DialogManager/DialogManager';
15-
import {getTenantDefaultColorPaletteId} from '../../../../../constants/common';
1615
import {closeDialog} from '../../../../../store/actions/dialog';
1716
import {selectColorPalettes} from '../../../../../store/selectors/colorPaletteEditor';
1817
import {getPaletteColors, isValidHexColor} from '../../../../../utils';
@@ -32,7 +31,12 @@ const b = block('dialog-metric-settings');
3231
type StateProps = ReturnType<typeof mapStateToProps>;
3332
type DispatchProps = ReturnType<typeof mapDispatchToProps>;
3433
type OwnProps = {
35-
onSave: (args: {palette: string; color: string; size: string; colorIndex?: number}) => void;
34+
onSave: (args: {
35+
palette: string | undefined;
36+
color: string;
37+
size: string;
38+
colorIndex?: number;
39+
}) => void;
3640
};
3741

3842
interface Props extends StateProps, DispatchProps, OwnProps {}
@@ -41,7 +45,7 @@ interface State {
4145
size: string;
4246
currentColor: string;
4347
colorIndex?: number;
44-
palette: string;
48+
palette: string | undefined;
4549
colorErrorText?: string;
4650
paletteColors: string[];
4751
}
@@ -57,7 +61,7 @@ class DialogMetricSettings extends React.PureComponent<Props, State> {
5761
constructor(props: Props) {
5862
super(props);
5963

60-
const palette = props.palette || getTenantDefaultColorPaletteId();
64+
const palette = props.palette;
6165
const paletteColors = getPaletteColors(palette, props.colorPalettes);
6266

6367
// if font settings is empty take index 0 by default
@@ -72,7 +76,7 @@ class DialogMetricSettings extends React.PureComponent<Props, State> {
7276
color: props.metricFontColor,
7377
}),
7478
palette,
75-
colorIndex: props.metricFontColorIndex || defaultIndex,
79+
colorIndex: props.metricFontColorIndex ?? defaultIndex,
7680
paletteColors,
7781
};
7882
}
@@ -146,7 +150,7 @@ class DialogMetricSettings extends React.PureComponent<Props, State> {
146150
<MinifiedPalette
147151
onPaletteUpdate={this.handlePaletteUpdate}
148152
onPaletteItemClick={this.onPaletteItemClick}
149-
palette={this.state.palette}
153+
palette={this.state.palette ?? ''}
150154
currentColor={this.state.currentColor}
151155
errorText={this.state.colorErrorText}
152156
controlQa="dialog-metric-settings-palette"
@@ -165,7 +169,7 @@ class DialogMetricSettings extends React.PureComponent<Props, State> {
165169
this.setState({currentColor: preparedColor, colorIndex: undefined});
166170
};
167171

168-
private handlePaletteUpdate = (paletteName: string) => {
172+
private handlePaletteUpdate = (paletteName: string | undefined) => {
169173
const {colorPalettes} = this.props;
170174
const updatedColors = getPaletteColors(paletteName, colorPalettes);
171175
const newColor = updatedColors[0];

src/ui/units/wizard/components/MinifiedPalette/MinifiedPalette.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ export const MinifiedPalette: React.FC<MinifiedPaletteProps> = (props: MinifiedP
5555

5656
useEnterClick(paletteRef, handleEnterPress);
5757

58-
const options = getPaletteSelectorItems({colorPalettes});
58+
const options = getPaletteSelectorItems({colorPalettes, withAuto: true});
5959

6060
const colors = React.useMemo(
6161
() => getPaletteColors(palette, colorPalettes),
@@ -68,7 +68,7 @@ export const MinifiedPalette: React.FC<MinifiedPaletteProps> = (props: MinifiedP
6868
qa={DialogFieldBarsSettingsQa.MinifiedPaletteSelector}
6969
className={b('selector')}
7070
popupClassName={b('selector-popup')}
71-
onUpdate={([paletteId]) => onPaletteUpdate(paletteId)}
71+
onUpdate={([paletteId]) => onPaletteUpdate(paletteId ?? undefined)}
7272
renderSelectedOption={(option) => {
7373
return <SelectOptionWithIcon option={option} />;
7474
}}

src/ui/units/wizard/constants/dialogColor.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
import {i18n} from 'i18n';
22
import {GradientNullModes, GradientType, WizardVisualizationId} from 'shared';
3-
import {
4-
getAvailableClientPalettesMap,
5-
getTenantDefaultColorPaletteId,
6-
selectDefaultClientGradient,
7-
} from 'ui/constants/common';
3+
import {getAvailableClientPalettesMap, selectDefaultClientGradient} from 'ui/constants/common';
84

95
export const DEFAULT_BORDERS = 'show';
106
export const DEFAULT_THRESHOLDS_MODE = 'auto';
@@ -15,7 +11,7 @@ export const DEFAULT_TWO_POINT_GRADIENT = selectDefaultClientGradient(DEFAULT_GR
1511

1612
export const DEFAULT_PALETTE_STATE = {
1713
mountedColors: {},
18-
palette: getTenantDefaultColorPaletteId(),
14+
palette: '',
1915
selectedValue: null,
2016
polygonBorders: DEFAULT_BORDERS,
2117
};

0 commit comments

Comments
 (0)