diff --git a/components/SpacePost/index.jsx b/components/SpacePost/index.jsx index 2811cd2..2d2257e 100644 --- a/components/SpacePost/index.jsx +++ b/components/SpacePost/index.jsx @@ -34,6 +34,55 @@ export default function SpacePost({ data }) { ); const [showVideo, setShowVideo] = useState(false); + //是否查看全文 + const [isFullTextBtnShow, setIsFullTextBtnShow] = useState(false); + const [isTextCollapsed, setIsTextCollapsed] = useState(true); + const [numberOfLines, setNumberOfLines] = useState( + data.text_visible_range ? data.text_visible_range : 0 + ); + const [textInit, setTextInit] = useState(true); + const handleOnTextLayout = (event) => { + if (!textInit) return; + const line = event.nativeEvent.lines.length; + if (line > 5 && data.is_zone_moment_unlocked === 1) { + setNumberOfLines(5); + setIsFullTextBtnShow(true); + } + if (line > 5 && data.is_zone_moment_unlocked === 0) { + if (data.text_visible_range <= 5) + setNumberOfLines(data.text_visible_range); + if (data.text_visible_range > 5) { + setNumberOfLines(5); + setIsFullTextBtnShow(true); + } + } + if (line <= 5 && data.is_zone_moment_unlocked === 1) { + setNumberOfLines(0); + if (line <= 5 && data.is_zone_moment_unlocked === 0) { + if (data.text_visible_range <= 5) + setNumberOfLines(data.text_visible_range); + if (data.text_visible_range > 5) setNumberOfLines(0); + } + } + setTextInit(false); + }; + + const onPressFullTextBtn = () => { + if (isTextCollapsed) { + setIsTextCollapsed(false); + setNumberOfLines( + data.is_zone_moment_unlocked === 0 ? data.text_visible_range : 0 + ); + } else { + setIsTextCollapsed(true); + setNumberOfLines( + data.is_zone_moment_unlocked === 0 && data.text_visible_range <= 5 + ? data.text_visible_range + : 5 + ); + } + }; + //判断是否是发帖人 const [isCreator, setIsCreator] = useState(false); useEffect(() => { @@ -188,13 +237,20 @@ export default function SpacePost({ data }) { renderText: renderLink, }, ]} - numberOfLines={ - data.is_zone_moment_unlocked === 0 ? data.text_visible_range : 0 - } + numberOfLines={numberOfLines} ellipsizeMode="tail" + onTextLayout={handleOnTextLayout} > {data?.text} + {isFullTextBtnShow && ( + + {isTextCollapsed ? "全文" : "收起"} + + )} {/* 媒体展示 */} {data.media_component.video_ids?.length === 0 || @@ -618,7 +674,7 @@ function ImageDisplay({ transition={100} cachePolicy="disk" /> - {isCreator && visibleRange < index + 1 && ( + {isCreator && visibleRange < index + 1 && data.c_type === 1 && ( { + setVisible(false); + navigation.navigate("EditSpacePost", { data: data }); + }; + //删除 const handleDelete = async () => { const apiUrl = process.env.EXPO_PUBLIC_API_URL; @@ -824,6 +886,7 @@ function OperationModal({ visible, setVisible, data }) { //判断是否展示删除、拉黑、举报功能 const [display, setDisPlay] = useState({ delete: false, + edit: false, top: false, block: true, feedback: true, @@ -833,7 +896,7 @@ function OperationModal({ visible, setVisible, data }) { const account = await get("account"); if (account.mid === data.mid || account.role === 1 || account.role === 2) setDisPlay((prev) => { - return { ...prev, delete: true, top: true }; + return { ...prev, delete: true, top: true, edit: true }; }); if (account.mid === data.mid) setDisPlay((prev) => { @@ -918,6 +981,23 @@ function OperationModal({ visible, setVisible, data }) { > )} + {display.edit && ( + + + + 编辑 + + + + + )} {display.delete && ( - 价格: + 价格:¥ { + if (parseFloat(price) === 0) { + Toast.show({ + type: "error", + text1: "不可改为免费动态", + topOffset: 60, + }); + return; + } + if (parseFloat(price) < 0) { + Toast.show({ + type: "error", + text1: "请输入正确区间的价格", + topOffset: 60, + }); + return; + } + if (parseFloat(price) > 0 && parseInt(parseFloat(price) * 100, 10) < 100) { + Toast.show({ + type: "error", + text1: "请输入正确区间的价格", + topOffset: 60, + }); + return; + } + if (parseInt(parseFloat(price) * 100, 10) > 300000) { + Toast.show({ + type: "error", + text1: "请输入正确区间的价格", + topOffset: 60, + }); + return; + } + if (parseInt(textVisibleRange, 10) < 1) { + Toast.show({ + type: "error", + text1: "请输入正确区间的可预览文案行数", + topOffset: 60, + }); + return; + } + if ( + parseInt(imageVisibleRange, 10) < 0 || + parseInt(imageVisibleRange, 10) > 3 + ) { + Toast.show({ + type: "error", + text1: "请输入正确区间的可预览图片张数", + topOffset: 60, + }); + return; + } + setIsModalVisible(false); + }; + //保存新添加的媒体 const [newMeidaAssets, setNewMediaAssets] = useState([]); //展示旧媒体组件 @@ -112,7 +198,7 @@ export default function EditSpacePost({ navigation, route }) { if ( data.c_type === 1 && data.m_type === 1 && - oldMediaAssets.length + newMeidaAssets.length <= data.media_visible_range + oldMediaAssets.length + newMeidaAssets.length <= imageVisibleRange ) { Toast.show({ type: "error", @@ -142,6 +228,14 @@ export default function EditSpacePost({ navigation, route }) { m_type: data.m_type, text: content, media_component: media, + text_visible_range: textVisibleRange + ? parseInt(textVisibleRange, 10) + : 999, + media_visible_range: imageVisibleRange + ? parseInt(imageVisibleRange, 10) + : 1, + is_blurring_cover: blurCover ? 1 : 0, + is_ironfan_visible: isFreeForIronfan ? 1 : 0, }; const signature = await generateSignature(body); const _response = await fetch( @@ -202,33 +296,35 @@ export default function EditSpacePost({ navigation, route }) { }} > - - - 违规详情 - - - {data.text_audit_opinion && ( - - 文案违规原因: - {data.text_audit_opinion} - - )} - {data.image_audit_opinion && ( - - - 图片/视频违规原因: + {data?.status === 3 && ( + + + 违规详情 + + + {data.text_audit_opinion && ( + + 文案违规原因: + {data.text_audit_opinion} - {data.image_audit_opinion} - - )} - {data.manually_review_opinion && ( - - 运营追加: - {data.manually_review_opinion} - - )} + )} + {data.image_audit_opinion && ( + + + 图片/视频违规原因: + + {data.image_audit_opinion} + + )} + {data.manually_review_opinion && ( + + 运营追加: + {data.manually_review_opinion} + + )} + - + )} 动态内容 @@ -254,6 +350,350 @@ export default function EditSpacePost({ navigation, route }) { type={data.m_type === 1 ? "image" : "video"} setAssets={setNewMediaAssets} /> + {data.c_type === 1 && ( + + )} + {data.m_type === 1 && ( + + + + + + + + 价格:¥ + + setPrice(value)} + value={price} + style={tailwind( + "flex-1 bg-[#FFFFFF1A] text-white rounded-2xl px-4 h-8 mx-2" + )} + /> + setPrice("0")} + style={tailwind("text-[#FF669E] text-base font-medium")} + > + 免费 + + + {parseFloat(price) > 0 && ( + <> + + + 可预览文案: + + + 前 + + setTextVisibleRange(value)} + value={textVisibleRange} + style={tailwind( + "bg-[#FFFFFF1A] text-white rounded-2xl px-4 mx-2 h-8" + )} + /> + + 行 + + setTextVisibleRange("999")} + style={tailwind( + "text-[#FF669E] text-base font-medium ml-auto" + )} + > + 全部可见 + + + + + 可预览图片: + + + 前 + + + setImageVisibleRange(value) + } + value={imageVisibleRange} + style={tailwind( + "bg-[#FFFFFF1A] text-white rounded-2xl px-4 mx-2 h-8" + )} + /> + + 张 + + setImageVisibleRange("0")} + style={tailwind( + "text-[#FF669E] text-base font-medium ml-auto" + )} + > + 不可预览 + + + + + 铁粉免费查看: + + + setIsFreeForIronfan(value) + } + thumbColor="#ffffff" + trackColor={{ true: "#FF669E", false: "#FFFFFF1A" }} + /> + + + )} + + + + 保存 + + + + + + + + )} + {data.m_type === 2 && ( + + + + + + + + 价格:¥ + + setPrice(value)} + value={price} + style={tailwind( + "flex-1 bg-[#FFFFFF1A] text-white rounded-2xl px-4 h-8 mx-2" + )} + /> + setPrice("0")} + style={tailwind("text-[#FF669E] text-base font-medium")} + > + 免费 + + + {parseFloat(price) > 0 && ( + <> + + + 可预览文案: + + + 前 + + setTextVisibleRange(value)} + value={textVisibleRange} + style={tailwind( + "bg-[#FFFFFF1A] text-white rounded-2xl px-4 mx-2 h-8" + )} + /> + + 行 + + setTextVisibleRange("999")} + style={tailwind( + "text-[#FF669E] text-base font-medium ml-auto" + )} + > + 全部可见 + + + + + 封面模糊: + + setBlurCover(value)} + thumbColor="#ffffff" + trackColor={{ true: "#FF669E", false: "#FFFFFF1A" }} + /> + + + + 铁粉免费查看: + + + setIsFreeForIronfan(value) + } + thumbColor="#ffffff" + trackColor={{ true: "#FF669E", false: "#FFFFFF1A" }} + /> + + + )} + + + + 保存 + + + + + + + )} );