feat(notes): cluster images
All checks were successful
Release to Staging / build_and_release (push) Successful in 1m5s

Fix #237
This commit is contained in:
en 2025-03-11 17:50:56 +00:00
parent 2a0d727eb8
commit bc8252e271

View File

@ -1,7 +1,7 @@
import { NDKKind } from '@nostr-dev-kit/ndk'
import { ProfileLink } from 'components/ProfileSection'
import { nip19 } from 'nostr-tools'
import { useCallback, useContext, useMemo, useState } from 'react'
import React, { useCallback, useContext, useMemo, useState } from 'react'
import { Fragment } from 'react/jsx-runtime'
import { BlogPreview } from './internal/BlogPreview'
import { ModPreview } from './internal/ModPreview'
@ -220,7 +220,66 @@ export const NoteRender = ({ content }: NoteRenderProps) => {
return <Fragment key={key}>{part}</Fragment>
}
})
return _parts
const groupedParts = []
let imgGroup: JSX.Element[] = []
_parts.forEach((part, index) => {
const nextPart = _parts[index + 1]
const isNextPartImage =
nextPart && React.isValidElement(nextPart) && nextPart.type === 'img'
// Skip empty spaces only if previous one is image and the next one is image
if (
React.isValidElement(part) &&
part.props &&
typeof part.props === 'object' &&
'children' in part.props &&
typeof part.props.children === 'string' &&
part.props.children.trim() === '' &&
imgGroup.length > 0 &&
isNextPartImage
) {
return
}
if (React.isValidElement(part) && part.type === 'img') {
imgGroup.push(part)
} else {
if (imgGroup.length > 0) {
groupedParts.push(
<div
key={`group-${index}-${groupedParts.length}`}
className='IBMSMSMBSSCL_CBImgGroup'
style={{
gridTemplateColumns: `repeat(${Math.min(
imgGroup.length,
3
)}, 1fr)`
}}
>
{imgGroup}
</div>
)
imgGroup = []
}
groupedParts.push(part)
}
})
if (imgGroup.length > 0) {
groupedParts.push(
<div
key={`group-last-${groupedParts.length}`}
className='IBMSMSMBSSCL_CBImgGroup'
style={{
gridTemplateColumns: `repeat(${imgGroup.length}, 1fr)`
}}
>
{imgGroup}
</div>
)
}
return groupedParts
}, [content, depth, openLightBoxOnSlide])
return (