Skip to content

Commit b215880

Browse files
committed
chore: example: add message context menu and input bar menu screen
1 parent 67f7e80 commit b215880

File tree

16 files changed

+632
-13
lines changed

16 files changed

+632
-13
lines changed

example/src/demo/App.tsx

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,10 @@ import {
5151
ImageMessagePreviewScreen,
5252
LanguageSettingScreen,
5353
LoginV2Screen,
54+
MessageContextMenuSettingScreen,
5455
MessageForwardSelectorScreen,
5556
MessageHistoryListScreen,
57+
MessageInputBarMenuSettingScreen,
5658
MessageSearchScreen,
5759
MessageThreadListScreen,
5860
MessageThreadMemberListScreen,
@@ -122,6 +124,7 @@ export function App() {
122124
onSystemTip,
123125
getNaviTheme,
124126
messageMenuStyleRef,
127+
messageInputBarExtensionStyleRef,
125128
} = useApp();
126129

127130
const { getEnableDNSConfig, getImPort, getImServer } = useServerConfig();
@@ -332,6 +335,7 @@ export function App() {
332335
onUsersHandler={onUsersHandler}
333336
AvatarStatusRender={AvatarStatusRenderMemo}
334337
messageMenuStyle={messageMenuStyleRef.current}
338+
messageInputBarStyle={messageInputBarExtensionStyleRef.current}
335339
// formatTime={formatTime}
336340
// recallTimeout={1200}
337341
// group={{ createGroupMemberLimit: 2 }}
@@ -687,6 +691,20 @@ export function App() {
687691
}}
688692
component={PrivacySettingScreen}
689693
/>
694+
<Root.Screen
695+
name={'MessageContextMenuSetting'}
696+
options={{
697+
headerShown: false,
698+
}}
699+
component={MessageContextMenuSettingScreen}
700+
/>
701+
<Root.Screen
702+
name={'MessageInputBarMenuSetting'}
703+
options={{
704+
headerShown: false,
705+
}}
706+
component={MessageInputBarMenuSettingScreen}
707+
/>
690708
</Root.Navigator>
691709
</NavigationContainer>
692710

example/src/demo/common/StringSet.cn.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,24 @@ export function createStringSetCn(): StringSet {
8585
'_demo_general_setting_feature': '特性开关',
8686
'_demo_general_setting_language': '系统语言',
8787
'_demo_general_setting_translation_language': '翻译目标语言',
88+
'_demo_general_setting_message_menu': '消息上下文菜单样式',
89+
'_demo_general_setting_message_input_menu': '消息附件扩展菜单样式',
8890

8991
'_demo_language_setting_navi_title': '系统语言',
9092
'_demo_language_setting_navi_confim': '完成',
9193
'_demo_language_setting_language_cn': '中文',
9294
'_demo_language_setting_language_en': 'English',
9395

96+
'_demo_message_context_menu_setting_navi_title': '消息上下文菜单样式',
97+
'_demo_message_context_menu_setting_navi_confim': '完成',
98+
'_demo_message_context_menu_setting_style1': '样式1',
99+
'_demo_message_context_menu_setting_style2': '样式2',
100+
101+
'_demo_message_input_bar_menu_setting_navi_title': '消息附件扩展菜单样式',
102+
'_demo_message_input_bar_menu_setting_navi_confim': '完成',
103+
'_demo_message_input_bar_menu_setting_style1': '样式1',
104+
'_demo_message_input_bar_menu_setting_style2': '样式2',
105+
94106
'_demo_style_setting_navi_title': '主题',
95107
'_demo_about_title': (accountType) =>
96108
accountType === 'agora' ? '声网 IM' : '环信 IM',
@@ -170,5 +182,7 @@ export function createStringSetCn(): StringSet {
170182
'zh-Hans': '中文',
171183
'classic': '经典',
172184
'modern': '现代',
185+
'style1': '样式1',
186+
'style2': '样式2',
173187
};
174188
}

example/src/demo/common/StringSet.en.tsx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,25 @@ export function createStringSetEn(): StringSet {
8888
'_demo_general_setting_feature': 'Advanced Features',
8989
'_demo_general_setting_language': 'System Language',
9090
'_demo_general_setting_translation_language': 'Translation Target Language',
91+
'_demo_general_setting_message_menu': 'Message Context Menu Style',
92+
'_demo_general_setting_message_input_menu': 'Message Input Bar Menu Style',
9193

9294
'_demo_language_setting_navi_title': 'System Language',
9395
'_demo_language_setting_navi_confim': 'Done',
9496
'_demo_language_setting_language_cn': '中文',
9597
'_demo_language_setting_language_en': 'English',
9698

99+
'_demo_message_context_menu_setting_navi_title':
100+
'Message Context Menu Style',
101+
'_demo_message_context_menu_setting_navi_confim': 'Done',
102+
'_demo_message_context_menu_setting_style1': 'Style 1',
103+
'_demo_message_context_menu_setting_style2': 'Style 2',
104+
105+
'_demo_message_input_bar_menu_setting_navi_title': 'Message Input Bar Menu',
106+
'_demo_message_input_bar_menu_setting_navi_confim': 'Done',
107+
'_demo_message_input_bar_menu_setting_style1': 'Style1',
108+
'_demo_message_input_bar_menu_setting_style2': 'Style2',
109+
97110
'_demo_style_setting_navi_title': 'Theme',
98111
'_demo_style_setting_navi_confim': 'Done',
99112
'_demo_style_setting_language_classic': 'Classic',
@@ -179,5 +192,7 @@ export function createStringSetEn(): StringSet {
179192
'zh-Hans': '中文',
180193
'classic': 'Classic',
181194
'modern': 'Modern',
195+
'style1': 'Style1',
196+
'style2': 'Style2',
182197
};
183198
}

example/src/demo/hooks/useApp.tsx

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ import {
4040
getChatService,
4141
getReleaseArea,
4242
LanguageCode,
43-
MessageMenuStyle,
43+
MessageContextMenuStyle,
44+
MessageInputBarExtensionStyle,
4445
StringSet,
4546
ThemeType,
4647
UIGroupListListener,
@@ -109,7 +110,10 @@ export function useApp() {
109110
const enableBlockRef = React.useRef(false);
110111
const naviThemeRef = React.useRef(NaviDefaultTheme);
111112
const pageDeepRef = React.useRef(0);
112-
const messageMenuStyleRef = React.useRef<MessageMenuStyle>('custom'); // todo: need design from 'hanxiao'
113+
const messageMenuStyleRef =
114+
React.useRef<MessageContextMenuStyle>('bottom-sheet');
115+
const messageInputBarExtensionStyleRef =
116+
React.useRef<MessageInputBarExtensionStyle>('bottom-sheet');
113117
const [fontsLoaded] = useFonts({
114118
[twemoji_ttf_name]: twemoji_ttf,
115119
[boloo_da_ttf_name]: boloo_da_ttf,
@@ -850,6 +854,22 @@ export function useApp() {
850854
updater();
851855
}
852856
);
857+
const ret18 = DeviceEventEmitter.addListener(
858+
'_demo_emit_app_message_context_menu_style',
859+
(e) => {
860+
console.log('dev:emit:app:message_menu:', e);
861+
messageMenuStyleRef.current = e;
862+
updater();
863+
}
864+
);
865+
const ret19 = DeviceEventEmitter.addListener(
866+
'_demo_emit_app_message_input_bar_extension_style',
867+
(e) => {
868+
console.log('dev:emit:app:message_input_bar_ext:', e);
869+
messageInputBarExtensionStyleRef.current = e;
870+
updater();
871+
}
872+
);
853873
return () => {
854874
ret.remove();
855875
ret2.remove();
@@ -868,6 +888,8 @@ export function useApp() {
868888
ret15.remove();
869889
ret16.remove();
870890
ret17.remove();
891+
ret18.remove();
892+
ret19.remove();
871893
};
872894
}, [dark, light, updatePush, updater]);
873895

@@ -965,5 +987,6 @@ export function useApp() {
965987
naviThemeRef,
966988
getNaviTheme,
967989
messageMenuStyleRef,
990+
messageInputBarExtensionStyleRef,
968991
};
969992
}

example/src/demo/hooks/useGeneralSetting.tsx

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import { DeviceEventEmitter } from 'react-native';
33

44
import {
55
AsyncStorageBasic,
6+
MessageContextMenuStyle,
7+
MessageInputBarExtensionStyle,
68
presetPaletteColors,
79
SingletonObjects,
810
useForceUpdate,
@@ -85,6 +87,20 @@ export function useGeneralSetting() {
8587
undefined
8688
);
8789

90+
const appMessageContextMenuStyleRef = React.useRef<
91+
MessageContextMenuStyle | undefined
92+
>('bottom-sheet');
93+
const [appMessageContextMenuStyle, setAppMessageContextMenuStyle] =
94+
React.useState<MessageContextMenuStyle>('bottom-sheet');
95+
96+
const appMessageInputBarExtensionStyleRef = React.useRef<
97+
MessageInputBarExtensionStyle | undefined
98+
>('bottom-sheet');
99+
const [
100+
appMessageInputBarExtensionStyle,
101+
setAppMessageInputBarExtensionStyle,
102+
] = React.useState<MessageInputBarExtensionStyle>('bottom-sheet');
103+
88104
const onSetAppTheme = React.useCallback((value: boolean) => {
89105
appThemeRef.current = value;
90106
setAppTheme(value);
@@ -279,6 +295,38 @@ export function useGeneralSetting() {
279295
DeviceEventEmitter.emit('_demo_emit_app_language', value);
280296
}, []);
281297

298+
const onSetAppMessageContextMenuStyle = React.useCallback(
299+
(value: MessageContextMenuStyle) => {
300+
appMessageContextMenuStyleRef.current = value;
301+
setAppMessageContextMenuStyle(value);
302+
const s = SingletonObjects.getInstanceWithParams(AsyncStorageBasic, {
303+
appKey: `${gAppKey}/uikit/demo`,
304+
});
305+
s.setData({ key: 'messageContextMenuStyle', value });
306+
DeviceEventEmitter.emit(
307+
'_demo_emit_app_message_context_menu_style',
308+
value
309+
);
310+
},
311+
[]
312+
);
313+
314+
const onSetAppMessageInputBarExtensionStyle = React.useCallback(
315+
(value: MessageInputBarExtensionStyle) => {
316+
appMessageInputBarExtensionStyleRef.current = value;
317+
setAppMessageInputBarExtensionStyle(value);
318+
const s = SingletonObjects.getInstanceWithParams(AsyncStorageBasic, {
319+
appKey: `${gAppKey}/uikit/demo`,
320+
});
321+
s.setData({ key: 'messageInputBarExtensionStyle', value });
322+
DeviceEventEmitter.emit(
323+
'_demo_emit_app_message_input_bar_extension_style',
324+
value
325+
);
326+
},
327+
[]
328+
);
329+
282330
const initParams = React.useCallback(async () => {
283331
const s = SingletonObjects.getInstanceWithParams(AsyncStorageBasic, {
284332
appKey: `${gAppKey}/uikit/demo`,
@@ -300,6 +348,8 @@ export function useGeneralSetting() {
300348
const res16 = await s.getData({ key: 'translateLanguage' });
301349
const res17 = await s.getData({ key: 'typing' });
302350
const res18 = await s.getData({ key: 'block' });
351+
const res19 = await s.getData({ key: 'messageContextMenuStyle' });
352+
const res20 = await s.getData({ key: 'messageInputBarExtensionStyle' });
303353
return {
304354
appTheme: res.value ? res.value !== 'light' : false,
305355
appTranslate: res10.value ? res10.value === 'enable' : true,
@@ -321,6 +371,10 @@ export function useGeneralSetting() {
321371
appNeutralSColor: res9.value
322372
? +res9.value
323373
: presetPaletteColors.neutralSpecial,
374+
appMessageContextMenuStyle: res19.value ? res19.value : 'bottom-sheet',
375+
appMessageInputBarExtensionStyle: res20.value
376+
? res20.value
377+
: 'bottom-sheet',
324378
};
325379
}, []);
326380

@@ -361,6 +415,16 @@ export function useGeneralSetting() {
361415
appTypingRef.current = res.appTyping;
362416
setAppBlock(res.appBlock);
363417
appBlockRef.current = res.appBlock;
418+
setAppMessageContextMenuStyle(
419+
res.appMessageContextMenuStyle as MessageContextMenuStyle
420+
);
421+
appMessageContextMenuStyleRef.current =
422+
res.appMessageContextMenuStyle as MessageContextMenuStyle;
423+
setAppMessageInputBarExtensionStyle(
424+
res.appMessageInputBarExtensionStyle as MessageInputBarExtensionStyle
425+
);
426+
appMessageInputBarExtensionStyleRef.current =
427+
res.appMessageInputBarExtensionStyle as MessageInputBarExtensionStyle;
364428
// updater();
365429
})
366430
.catch((e) => {
@@ -409,5 +473,9 @@ export function useGeneralSetting() {
409473
onSetAppTyping,
410474
appBlock,
411475
onSetAppBlock,
476+
appMessageContextMenuStyle,
477+
onSetAppMessageContextMenuStyle,
478+
appMessageInputBarExtensionStyle,
479+
onSetAppMessageInputBarExtensionStyle,
412480
};
413481
}

example/src/demo/hooks/useNavigationRoute.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import * as React from 'react';
88
import type { RootParamsName, RootScreenParamsList } from '../routes';
99
import type { NavigationParams } from './types';
1010

11-
function navigateFC<Props extends NavigationParams<any>>(
11+
function navigateFC<Props extends NavigationParams<{}>>(
1212
navigation: NavigationProp<RootScreenParamsList>,
1313
params: {
1414
from?: RootParamsName;
@@ -37,7 +37,7 @@ function navigateFC<Props extends NavigationParams<any>>(
3737
merge: params.merge ?? true,
3838
});
3939
}
40-
function goBackFC<Props extends NavigationParams<any>>(
40+
function goBackFC<Props extends NavigationParams<{}>>(
4141
navigation: NavigationProp<RootScreenParamsList>,
4242
params?: {
4343
from?: RootParamsName;

example/src/demo/routes/list.tsx

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,14 @@ export type RootParamsList = {
211211
option?: {} | undefined;
212212
params?: {} | undefined;
213213
};
214+
MessageContextMenuSetting: {
215+
option?: {} | undefined;
216+
params?: {} | undefined;
217+
};
218+
MessageInputBarMenuSetting: {
219+
option?: {} | undefined;
220+
params?: {} | undefined;
221+
};
214222
};
215223
export type RootParamsName = Extract<keyof RootParamsList, string>;
216224
export type RootParamsNameList = RootParamsName[];
@@ -434,6 +442,14 @@ export const SCREEN_LIST: RootParamsList = {
434442
option: undefined,
435443
params: undefined,
436444
},
445+
MessageContextMenuSetting: {
446+
option: undefined,
447+
params: undefined,
448+
},
449+
MessageInputBarMenuSetting: {
450+
option: undefined,
451+
params: undefined,
452+
},
437453
};
438454
export const SCREEN_NAME_LIST: RootParamsNameList = Object.keys(
439455
SCREEN_LIST

0 commit comments

Comments
 (0)