Skip to content

Commit 1c26fd0

Browse files
author
pancongcong
committed
fix: local provider not working when confirming modal
1 parent 97ab433 commit 1c26fd0

File tree

4 files changed

+53
-4
lines changed

4 files changed

+53
-4
lines changed

packages/semi-ui/locale/localeProvider.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import React, { Component } from 'react';
22
import PropTypes from 'prop-types';
3+
import { changeConfirmLocale } from '../modal/local';
34
import LocaleContext from './context';
45
import DefaultLocale from './source/zh_CN';
56
import { Locale } from './interface';
@@ -22,6 +23,17 @@ export default class LocaleProvider extends Component<LocaleProviderProps> {
2223
constructor(props: LocaleProviderProps) {
2324
super(props);
2425
this.state = {};
26+
changeConfirmLocale(props.locale?.Modal);
27+
}
28+
29+
componentDidUpdate(prevProps: Readonly<LocaleProviderProps>): void {
30+
if (prevProps.locale?.Modal !== this.props.locale?.Modal) {
31+
changeConfirmLocale(this.props.locale.Modal);
32+
}
33+
}
34+
35+
componentWillUnmount(): void {
36+
changeConfirmLocale();
2537
}
2638

2739
render() {

packages/semi-ui/modal/_story/modal.stories.jsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, { useState } from 'react';
22
import en_GB from '../../locale/source/en_GB';
33

4-
import { Select, Modal, Button, Tooltip, Popover, ConfigProvider, Tag, Space } from '../../index';
4+
import { Select, Modal, Button, Tooltip, Popover, ConfigProvider, Tag, Space, LocaleProvider } from '../../index';
55
import CollapsibleInModal from './CollapsibleInModal';
66
import DynamicContextDemo from './DynamicContext';
77

@@ -100,13 +100,13 @@ function confirm() {
100100
}
101101

102102
export const ConfirmModal = () => (
103-
<div>
103+
<LocaleProvider locale={en_GB}>
104104
<Button onClick={info}>Info</Button>
105105
<Button onClick={success}>Success</Button>
106106
<Button onClick={error}>Error</Button>
107107
<Button onClick={warning}>Warning</Button>
108108
<Button onClick={confirm}>Confirm</Button>
109-
</div>
109+
</LocaleProvider>
110110
);
111111

112112
ConfirmModal.story = {

packages/semi-ui/modal/confirm.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React from 'react';
22
import ReactDOM from 'react-dom';
33
import { destroyFns, ModalReactProps } from './Modal';
44
import ConfirmModal from './ConfirmModal';
5+
import { getConfirmLocale } from './local';
56

67
import '@douyinfe/semi-foundation/modal/modal.scss';
78
import { IconAlertCircle, IconAlertTriangle, IconHelpCircle, IconInfoCircle, IconTickCircle } from '@douyinfe/semi-icons';
@@ -36,7 +37,16 @@ export default function confirm<T>(props: ConfirmProps) {
3637

3738

3839
function render(renderProps: ConfirmProps) {
39-
ReactDOM.render(<ConfirmModal {...renderProps} motion={props.motion}/>, div);
40+
const runtimeLocale = getConfirmLocale();
41+
ReactDOM.render(
42+
<ConfirmModal
43+
okText={runtimeLocale.confirm}
44+
cancelText={runtimeLocale.cancel}
45+
{...renderProps}
46+
motion={props.motion}
47+
/>,
48+
div
49+
);
4050
}
4151

4252
function close() {

packages/semi-ui/modal/local.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import defaultLocale from '../locale/source/zh_CN';
2+
3+
export interface ModalLocale {
4+
confirm: string;
5+
cancel: string
6+
}
7+
8+
let runtimeLocale: ModalLocale = {
9+
...defaultLocale.Modal,
10+
};
11+
12+
export function changeConfirmLocale(newLocale?: ModalLocale) {
13+
if (newLocale) {
14+
runtimeLocale = {
15+
...runtimeLocale,
16+
...newLocale,
17+
};
18+
} else {
19+
runtimeLocale = {
20+
...defaultLocale.Modal,
21+
};
22+
}
23+
}
24+
25+
export function getConfirmLocale() {
26+
return runtimeLocale;
27+
}

0 commit comments

Comments
 (0)