Custom thousands separator formatting in grid cell values

This commit is contained in:
Stela Augustinova
2025-12-03 13:53:47 +01:00
parent c1f216c7c7
commit 78e838f2f0
2 changed files with 18 additions and 10 deletions

View File

@@ -200,6 +200,12 @@ function stringifyJsonToGrid(value): ReturnType<typeof stringifyCellValue> {
return { value: '(JSON)', gridStyle: 'nullCellStyle' }; return { value: '(JSON)', gridStyle: 'nullCellStyle' };
} }
function formatNumberCustomSeparator(value, thousandsSeparator) {
const [intPart, decPart] = value.split('.');
const intPartWithSeparator = intPart.replace(/\B(?=(\d{3})+(?!\d))/g, thousandsSeparator);
return decPart ? `${intPartWithSeparator}.${decPart}` : intPartWithSeparator;
}
export function stringifyCellValue( export function stringifyCellValue(
value, value,
intent: intent:
@@ -210,7 +216,7 @@ export function stringifyCellValue(
| 'exportIntent' | 'exportIntent'
| 'clipboardIntent', | 'clipboardIntent',
editorTypes?: DataEditorTypesBehaviour, editorTypes?: DataEditorTypesBehaviour,
gridFormattingOptions?: { useThousandsSeparator?: boolean }, gridFormattingOptions?: { thousandsSeparator?: string},
jsonParsedValue?: any jsonParsedValue?: any
): { ): {
value: string; value: string;
@@ -351,13 +357,15 @@ export function stringifyCellValue(
if (_isNumber(value)) { if (_isNumber(value)) {
switch (intent) { switch (intent) {
case 'gridCellIntent': case 'gridCellIntent':
return { const separator = gridFormattingOptions?.thousandsSeparator;
value: let formattedValue;
gridFormattingOptions?.useThousandsSeparator && (value >= 10000 || value <= -10000) if (separator === 'none' || (value < 1000 && value > -1000)) formattedValue = value.toString();
? value.toLocaleString() else if (separator === 'system') formattedValue = value.toLocaleString();
: value.toString(), else if (separator === 'space') formattedValue = formatNumberCustomSeparator(value.toString(), ' ');
gridStyle: 'valueCellStyle', else if (separator === 'nobreakspace') formattedValue = formatNumberCustomSeparator(value.toString(), '\u202F');
}; else if (separator === 'comma') formattedValue = formatNumberCustomSeparator(value.toString(), ',');
else if (separator === 'dot') formattedValue = formatNumberCustomSeparator(value.toString(), '.');
return { value: formattedValue, gridStyle: 'valueCellStyle' };
default: default:
return { value: value.toString() }; return { value: value.toString() };
} }

View File

@@ -1,6 +1,6 @@
<script lang="ts"> <script lang="ts">
import _ from 'lodash'; import _ from 'lodash';
import { getBoolSettingsValue } from '../settings/settingsTools'; import { getStringSettingsValue } from '../settings/settingsTools';
import { stringifyCellValue } from 'dbgate-tools'; import { stringifyCellValue } from 'dbgate-tools';
export let rowData; export let rowData;
@@ -13,7 +13,7 @@
value, value,
'gridCellIntent', 'gridCellIntent',
editorTypes, editorTypes,
{ useThousandsSeparator: getBoolSettingsValue('dataGrid.thousandsSeparator', false) }, { thousandsSeparator: getStringSettingsValue('dataGrid.thousandsSeparatorChar', 'system') },
jsonParsedValue jsonParsedValue
); );