feat(business): enhance block editor with segment conversion and data persistence
Some checks failed
Frontend CI / ota-android (push) Successful in 1m17s
Frontend CI / ota-ios (push) Successful in 1m32s
Frontend CI / build-and-push-web (push) Successful in 3m5s
Frontend CI / build-android-apk (push) Failing after 3h12m39s

- Implement `segmentsToBlocks` utility to convert message segments into editable blocks.
- Update `BlockEditor` and `useBlockEditor` to support initial block loading and improved image upload handling.
- Add logic to `CreatePostScreen` to automatically switch to long-post mode when image segments are detected and preserve data when toggling modes.
- Update `AboutScreen` to make the ICP filing number clickable.
- Refactor mapper imports to use the updated data model paths.
This commit is contained in:
2026-05-08 13:19:40 +08:00
parent d4c3e1f268
commit 81ee9ba75b
9 changed files with 196 additions and 89 deletions

View File

@@ -3,12 +3,14 @@ import { View, ScrollView, StyleSheet } from 'react-native';
import { useAppColors, spacing } from '../../../theme';
import { MessageSegment } from '../../../types';
import { EditorBlock } from './blockEditorTypes';
import TextBlockInput from './TextBlockInput';
import ImageBlockView from './ImageBlockView';
import { useBlockEditor } from './useBlockEditor';
export interface BlockEditorHandle {
insertImage: () => Promise<void>;
insertCameraPhoto: () => Promise<void>;
insertTextAtCursor: (text: string) => void;
getSegments: () => MessageSegment[];
getContent: () => string;
@@ -22,15 +24,17 @@ interface BlockEditorProps {
style?: any;
textStyle?: any;
onContentChange?: (content: string) => void;
initialBlocks?: EditorBlock[];
}
const BlockEditor = React.forwardRef<BlockEditorHandle, BlockEditorProps>(
({ placeholder = '添加正文', maxLength = 2000, style, textStyle, onContentChange }, ref) => {
({ placeholder = '添加正文', maxLength = 2000, style, textStyle, onContentChange, initialBlocks }, ref) => {
const colors = useAppColors();
const editor = useBlockEditor();
const editor = useBlockEditor(initialBlocks);
useImperativeHandle(ref, () => ({
insertImage: editor.insertImage,
insertCameraPhoto: editor.insertCameraPhoto,
insertTextAtCursor: editor.insertTextAtCursor,
getSegments: editor.getSegments,
getContent: editor.getContent,