dosubot[bot] commented on issue #29140:
URL: https://github.com/apache/superset/issues/29140#issuecomment-2157141731
<!-- Greeting -->
Hello, @duyhd! I'm here to help you with any issues, bugs, or questions you
may have. I can also guide you on becoming a contributor. Let's work together
to solve this!
<!-- Answer -->
To change the number format in Apache Superset from "226,049,182,616.69₫" to
"226.049.182.616,69₫", you need to set a custom D3 format locale. This can be
done using the `setD3Format` function provided in the
`NumberFormatterRegistrySingleton.ts` file.
Here is an example of how you can set the D3 format locale to achieve the
desired number format:
```ts
import { setD3Format } from 'path-to-NumberFormatterRegistrySingleton';
const vietnameseLocale = {
decimal: ',',
thousands: '.',
grouping: [3],
currency: ['₫', ''],
};
setD3Format(vietnameseLocale);
```
This code sets the decimal separator to a comma (`,`), the thousands
separator to a period (`.`), and specifies the currency symbol for Vietnamese
đồng (₫). After setting this locale, numbers will be formatted as
"226.049.182.616,69₫"
<sup>[[1]](https://github.com/apache/superset/blob/master/superset-frontend/packages/superset-ui-core/src/number-format/NumberFormatterRegistrySingleton.ts)</sup><sup>[[2]](https://github.com/apache/superset/blob/master/superset-frontend/packages/superset-ui-demo/storybook/stories/superset-ui-number-format/NumberFormat.stories.tsx)</sup>.
Additionally, you can use the `@superset-ui/number-format` package to
validate and preview the number format. Here is an example of how you can use
this package:
```tsx
import { PureComponent } from 'react';
import { formatNumber } from '@superset-ui/core';
class NumberFormatValidator extends PureComponent {
state: { formatString: string; testValues: (number | null | undefined)[] }
= {
formatString: '.3~s',
testValues: [
987654321,
12345.6789,
3000,
400.14,
70.00002,
1,
0,
-1,
-70.00002,
-400.14,
-3000,
-12345.6789,
-987654321,
Number.POSITIVE_INFINITY,
Number.NEGATIVE_INFINITY,
NaN,
null,
undefined,
],
};
constructor(props) {
super(props);
this.handleFormatChange = this.handleFormatChange.bind(this);
}
handleFormatChange(event) {
this.setState({
formatString: event.target.value,
});
}
render() {
const { formatString, testValues } = this.state;
return (
<div className="container">
<div className="row" style={{ margin: '40px 20px 0 20px' }}>
<div className="col-sm">
<p>
This <code>@superset-ui/number-format</code> package
enriches{' '}
<code>d3-format</code>
to handle invalid formats as well as edge case values. Use the
validator below to preview outputs from the specified format
string. See
<a
href="https://github.com/d3/d3-format#locale_format"
target="_blank"
rel="noopener noreferrer"
>
D3 Format Reference
</a>
for how to write a D3 format string.
</p>
</div>
</div>
<div className="row" style={{ margin: '10px 0 30px 0' }}>
<div className="col-sm" />
<div className="col-sm-8">
<div className="form">
<div className="form-group">
<label>
Enter D3 format string:
<input
id="formatString"
className="form-control form-control-lg"
type="text"
value={formatString}
onChange={this.handleFormatChange}
/>
</label>
</div>
</div>
</div>
<div className="col-sm" />
</div>
<div className="row">
<div className="col-sm">
<table className="table table-striped table-sm">
<thead>
<tr>
<th>Input (number)</th>
<th>Formatted output (string)</th>
</tr>
</thead>
<tbody>
{testValues.map((v, index) => (
<tr key={index}>
<td>
<code>{`${v}`}</code>
</td>
<td>
<code>"{formatNumber(formatString,
v)}"</code>
</td>
</tr>
))}
</tbody>
</table>
</div>
</div>
</div>
);
}
}
export default {
title: 'Core Packages/@superset-ui-number-format',
};
export const validator = () => <NumberFormatValidator />;
```
This example demonstrates how to use the `@superset-ui/number-format`
package to validate and preview the number format changes
<sup>[[2]](https://github.com/apache/superset/blob/master/superset-frontend/packages/superset-ui-demo/storybook/stories/superset-ui-number-format/NumberFormat.stories.tsx)</sup>.
<!-- Dosu Comment Footer -->
*To continue talking to [Dosu](https://dosu.dev), mention @dosu.*
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]