mattermost-mobile-upstream/app/components/block_renderer/mm_blocks_context_provider.tsx
Daniel Espino García 84ea188366
Mattermost Blocks (#9764)
* Mattermost Blocks

* Move block renderer to its own components folder

* Sync translation layer

* UX fixes

* Refactor button to use the button component

* Code review

* Fix CI

* Add animations to collapse blocks

* Add unit tests

* Add e2e tests and related fixes

* Address coderabbit comments

* Address UX comments

* Address feedback

* Address coderabbit comments

* Fix snapshots

* Sync with webapp translation

* Add node limit to button markdown node

* Address feedback

* i18n-extract

* Fix test

* Move image utils to the utils folder

* Remove unneeded style

* Revert build script change

---------

Co-authored-by: Mattermost Build <build@mattermost.com>
2026-06-29 18:42:16 +02:00

57 lines
1.6 KiB
TypeScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import React, {useMemo, type ReactNode} from 'react';
import {
MmBlocksLayoutWidthContext,
MmBlocksRenderContext,
type MmBlocksInlineMarkdownActions,
type MmBlocksRenderContextValue,
} from './context';
import type {AvailableScreens} from '@typings/screens/navigation';
export type MmBlocksContextProviderProps = {
channelId: string;
location: AvailableScreens;
postId: string;
children: ReactNode;
imagesMetadata?: Record<string, PostImage>;
inlineMarkdownActions?: MmBlocksInlineMarkdownActions;
layoutWidth?: number;
};
export const MmBlocksContextProvider = ({
channelId,
location,
postId,
children,
imagesMetadata,
inlineMarkdownActions,
layoutWidth,
}: MmBlocksContextProviderProps) => {
const renderContextValue = useMemo(
(): MmBlocksRenderContextValue => ({
channelId,
location,
postId,
imagesMetadata,
inlineMarkdownActions: inlineMarkdownActions ?? {},
}),
[channelId, imagesMetadata, inlineMarkdownActions, location, postId],
);
return (
<MmBlocksRenderContext.Provider value={renderContextValue}>
<MmBlocksLayoutWidthContext.Provider value={layoutWidth}>
{children}
</MmBlocksLayoutWidthContext.Provider>
</MmBlocksRenderContext.Provider>
);
};
export type MmBlocksExpandedContentPayload = MmBlocksRenderContextValue & {
renderContent: () => ReactNode;
};