2022-08-08 13:32:50 +00:00
|
|
|
import {allCommands} from 'app/client/components/commands';
|
2022-03-22 13:41:11 +00:00
|
|
|
import {GristDoc} from 'app/client/components/GristDoc';
|
|
|
|
import {ViewFieldRec} from 'app/client/models/entities/ViewFieldRec';
|
|
|
|
import {textButton} from 'app/client/ui2018/buttons';
|
2022-04-07 14:58:16 +00:00
|
|
|
import {ColorOption, colorSelect} from 'app/client/ui2018/ColorSelect';
|
2022-09-06 01:51:57 +00:00
|
|
|
import {theme, vars} from 'app/client/ui2018/cssVars';
|
2022-08-08 13:32:50 +00:00
|
|
|
import {ConditionalStyle} from 'app/client/widgets/ConditionalStyle';
|
|
|
|
import {Disposable, dom, DomContents, fromKo, MultiHolder, Observable, styled} from 'grainjs';
|
2022-03-22 13:41:11 +00:00
|
|
|
|
|
|
|
export class CellStyle extends Disposable {
|
2022-08-08 13:32:50 +00:00
|
|
|
private _textColor: Observable<string|undefined>;
|
|
|
|
private _fillColor: Observable<string|undefined>;
|
|
|
|
private _fontBold: Observable<boolean|undefined>;
|
|
|
|
private _fontUnderline: Observable<boolean|undefined>;
|
|
|
|
private _fontItalic: Observable<boolean|undefined>;
|
|
|
|
private _fontStrikethrough: Observable<boolean|undefined>;
|
2022-03-22 13:41:11 +00:00
|
|
|
|
|
|
|
constructor(
|
2022-08-08 13:32:50 +00:00
|
|
|
private _field: ViewFieldRec,
|
|
|
|
private _gristDoc: GristDoc,
|
|
|
|
private _defaultTextColor: string
|
2022-03-22 13:41:11 +00:00
|
|
|
) {
|
|
|
|
super();
|
2022-08-08 13:32:50 +00:00
|
|
|
this._textColor = fromKo(this._field.textColor);
|
|
|
|
this._fillColor = fromKo(this._field.fillColor);
|
|
|
|
this._fontBold = fromKo(this._field.fontBold);
|
|
|
|
this._fontUnderline = fromKo(this._field.fontUnderline);
|
|
|
|
this._fontItalic = fromKo(this._field.fontItalic);
|
|
|
|
this._fontStrikethrough = fromKo(this._field.fontStrikethrough);
|
2022-03-22 13:41:11 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public buildDom(): DomContents {
|
|
|
|
const holder = new MultiHolder();
|
|
|
|
return [
|
2022-08-08 13:32:50 +00:00
|
|
|
cssLine(
|
|
|
|
cssLabel('CELL STYLE', dom.autoDispose(holder)),
|
|
|
|
cssButton('Open row styles', dom.on('click', allCommands.viewTabOpen.run)),
|
|
|
|
),
|
2022-03-22 13:41:11 +00:00
|
|
|
cssRow(
|
|
|
|
colorSelect(
|
2022-04-07 14:58:16 +00:00
|
|
|
{
|
2022-08-08 13:32:50 +00:00
|
|
|
textColor: new ColorOption(
|
|
|
|
{ color: this._textColor, defaultColor: this._defaultTextColor, noneText: 'default'}
|
|
|
|
),
|
|
|
|
fillColor: new ColorOption(
|
|
|
|
{ color: this._fillColor, allowsNone: true, noneText: 'none'}
|
|
|
|
),
|
|
|
|
fontBold: this._fontBold,
|
|
|
|
fontItalic: this._fontItalic,
|
|
|
|
fontUnderline: this._fontUnderline,
|
|
|
|
fontStrikethrough: this._fontStrikethrough
|
2022-04-07 14:58:16 +00:00
|
|
|
},
|
2022-03-22 13:41:11 +00:00
|
|
|
// Calling `field.widgetOptionsJson.save()` saves both fill and text color settings.
|
2022-08-08 13:32:50 +00:00
|
|
|
() => this._field.widgetOptionsJson.save()
|
2022-03-22 13:41:11 +00:00
|
|
|
)
|
|
|
|
),
|
2022-08-08 13:32:50 +00:00
|
|
|
dom.create(ConditionalStyle, "Cell Style", this._field, this._gristDoc)
|
2022-03-22 13:41:11 +00:00
|
|
|
];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-08-08 13:32:50 +00:00
|
|
|
const cssLine = styled('div', `
|
2022-03-22 13:41:11 +00:00
|
|
|
display: flex;
|
2022-08-08 13:32:50 +00:00
|
|
|
margin: 16px 16px 12px 16px;
|
|
|
|
justify-content: space-between;
|
|
|
|
align-items: baseline;
|
2022-03-22 13:41:11 +00:00
|
|
|
`);
|
|
|
|
|
2022-08-08 13:32:50 +00:00
|
|
|
const cssLabel = styled('div', `
|
2022-09-06 01:51:57 +00:00
|
|
|
color: ${theme.text};
|
2022-08-08 13:32:50 +00:00
|
|
|
text-transform: uppercase;
|
|
|
|
font-size: ${vars.xsmallFontSize};
|
2022-03-22 13:41:11 +00:00
|
|
|
`);
|
|
|
|
|
2022-08-08 13:32:50 +00:00
|
|
|
const cssButton = styled(textButton, `
|
|
|
|
font-size: ${vars.mediumFontSize};
|
2022-03-22 13:41:11 +00:00
|
|
|
`);
|
|
|
|
|
2022-08-08 13:32:50 +00:00
|
|
|
const cssRow = styled('div', `
|
2022-03-22 13:41:11 +00:00
|
|
|
display: flex;
|
2022-08-08 13:32:50 +00:00
|
|
|
margin: 8px 16px;
|
|
|
|
align-items: center;
|
|
|
|
&-top-space {
|
|
|
|
margin-top: 24px;
|
|
|
|
}
|
|
|
|
&-disabled {
|
2022-09-06 01:51:57 +00:00
|
|
|
color: ${theme.disabledText};
|
2022-08-08 13:32:50 +00:00
|
|
|
}
|
2022-03-22 13:41:11 +00:00
|
|
|
`);
|