/
githubmirror
/
client
Обзор
Документация
Войти
/
githubmirror
/
client
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
shared/chat/make-chat-screen.tsx
65 строк
2 KB
chrisnojima-zoom
Version 670 - clean2 (#29122)
08 июн 2026, 19:31
Не верифицирован
08 июн 2026, 19:31
1943197
Код
Авторство
О чём код?
import type {GetOptionsRet, RouteDef} from '@/constants/types/router' import type * as T from '@/constants/types' import type {StaticScreenProps} from '@react-navigation/core' import type {ComponentProps, LazyExoticComponent, ReactElement} from 'react' // See constants/router.tsx IsExactlyRecord for explanation type IsExactlyRecord<T> = string extends keyof T ? true : false type NavigatorParamsFromProps<P> = P extends Record<string, unknown> ? IsExactlyRecord<P> extends true ? undefined : keyof P extends never ? undefined : P : undefined type AddConversationIDKey<P> = P extends Record<string, unknown> ? Omit<P, 'conversationIDKey'> & {conversationIDKey?: T.Chat.ConversationIDKey} : {conversationIDKey?: T.Chat.ConversationIDKey} type LazyInnerComponent<COM extends LazyExoticComponent<any>> = COM extends LazyExoticComponent<infer Inner> ? Inner : never type ChatScreenParams<COM extends LazyExoticComponent<any>> = NavigatorParamsFromProps< AddConversationIDKey<ComponentProps<LazyInnerComponent<COM>>> > type ChatScreenProps<COM extends LazyExoticComponent<any>> = StaticScreenProps<ChatScreenParams<COM>> type ChatScreenComponent<COM extends LazyExoticComponent<any>> = ( p: ChatScreenProps<COM> ) => ReactElement export function makeChatScreen<COM extends LazyExoticComponent<any>>( Component: COM, options?: { getOptions?: GetOptionsRet | ((props: ChatScreenProps<COM>) => GetOptionsRet) skipProvider?: boolean canBeNullConvoID?: boolean } ): RouteDef<ChatScreenComponent<COM>, ChatScreenParams<COM>> { const getOptionsOption = options?.getOptions const getOptions = typeof getOptionsOption === 'function' ? (p: ChatScreenProps<COM>) => // getOptions can run before params are materialized on the route object. getOptionsOption({ ...p, route: { ...p.route, params: ((p.route as {params?: ChatScreenParams<COM>}).params ?? {}) as ChatScreenParams<COM>, }, }) : getOptionsOption return { ...options, getOptions, screen: function Screen(p: ChatScreenProps<COM>) { const Comp = Component as any const params = ((p.route as {params?: ChatScreenParams<COM>}).params ?? {}) as ChatScreenParams<COM> return <Comp {...params} /> }, } }