@@ -298,6 +298,22 @@ export const CalendarColumn: FC<{
298298 } ) ;
299299 } , [ posts , display , getDate ] ) ;
300300
301+ const [ showAll , setShowAll ] = useState ( false ) ;
302+ const showAllFunc = useCallback ( ( ) => {
303+ setShowAll ( true ) ;
304+ } , [ ] ) ;
305+
306+ const showLessFunc = useCallback ( ( ) => {
307+ setShowAll ( false ) ;
308+ } , [ ] ) ;
309+
310+ const list = useMemo ( ( ) => {
311+ if ( showAll ) {
312+ return postList ;
313+ }
314+ return postList . slice ( 0 , 3 ) ;
315+ } , [ postList , showAll ] ) ;
316+
301317 const canBeTrending = useMemo ( ( ) => {
302318 return ! ! trendings . find ( ( trend ) => {
303319 return dayjs
@@ -404,42 +420,56 @@ export const CalendarColumn: FC<{
404420 ) ;
405421
406422 const editPost = useCallback (
407- ( post : Post & { integration : Integration } , isDuplicate ?: boolean ) => async ( ) => {
408- if ( user ?. orgId === post . submittedForOrganizationId ) {
409- return previewPublication ( post ) ;
410- }
411- const data = await ( await fetch ( `/posts/${ post . id } ` ) ) . json ( ) ;
412- const date = ! isDuplicate ? null : ( await ( await fetch ( '/posts/find-slot' ) ) . json ( ) ) . date ;
413- const publishDate = dayjs . utc ( date || data . posts [ 0 ] . publishDate ) . local ( ) ;
414-
415- const ExistingData = ! isDuplicate ? ExistingDataContextProvider : Fragment ;
416-
417- modal . openModal ( {
418- closeOnClickOutside : false ,
419- closeOnEscape : false ,
420- withCloseButton : false ,
421- classNames : {
422- modal : 'w-[100%] max-w-[1400px] bg-transparent text-textColor' ,
423- } ,
424- children : (
425- < ExistingData value = { data } >
426- < AddEditModal
427- { ...isDuplicate ? { onlyValues : data . posts } : { } }
428- allIntegrations = { integrations . map ( ( p ) => ( { ...p } ) ) }
429- reopenModal = { editPost ( post ) }
430- mutate = { reloadCalendarView }
431- integrations = { isDuplicate ? integrations : integrations
432- . slice ( 0 )
433- . filter ( ( f ) => f . id === data . integration )
434- . map ( ( p ) => ( { ...p , picture : data . integrationPicture } ) ) }
435- date = { publishDate }
436- />
437- </ ExistingData >
438- ) ,
439- size : '80%' ,
440- title : `` ,
441- } ) ;
442- } ,
423+ ( post : Post & { integration : Integration } , isDuplicate ?: boolean ) =>
424+ async ( ) => {
425+ if ( user ?. orgId === post . submittedForOrganizationId ) {
426+ return previewPublication ( post ) ;
427+ }
428+ const data = await ( await fetch ( `/posts/${ post . id } ` ) ) . json ( ) ;
429+ const date = ! isDuplicate
430+ ? null
431+ : ( await ( await fetch ( '/posts/find-slot' ) ) . json ( ) ) . date ;
432+ const publishDate = dayjs
433+ . utc ( date || data . posts [ 0 ] . publishDate )
434+ . local ( ) ;
435+
436+ const ExistingData = ! isDuplicate
437+ ? ExistingDataContextProvider
438+ : Fragment ;
439+
440+ modal . openModal ( {
441+ closeOnClickOutside : false ,
442+ closeOnEscape : false ,
443+ withCloseButton : false ,
444+ classNames : {
445+ modal : 'w-[100%] max-w-[1400px] bg-transparent text-textColor' ,
446+ } ,
447+ children : (
448+ < ExistingData value = { data } >
449+ < AddEditModal
450+ { ...( isDuplicate ? { onlyValues : data . posts } : { } ) }
451+ allIntegrations = { integrations . map ( ( p ) => ( { ...p } ) ) }
452+ reopenModal = { editPost ( post ) }
453+ mutate = { reloadCalendarView }
454+ integrations = {
455+ isDuplicate
456+ ? integrations
457+ : integrations
458+ . slice ( 0 )
459+ . filter ( ( f ) => f . id === data . integration )
460+ . map ( ( p ) => ( {
461+ ...p ,
462+ picture : data . integrationPicture ,
463+ } ) )
464+ }
465+ date = { publishDate }
466+ />
467+ </ ExistingData >
468+ ) ,
469+ size : '80%' ,
470+ title : `` ,
471+ } ) ;
472+ } ,
443473 [ integrations ]
444474 ) ;
445475
@@ -497,7 +527,7 @@ export const CalendarColumn: FC<{
497527 canBeTrending && 'bg-customColor24'
498528 ) }
499529 >
500- { postList . map ( ( post ) => (
530+ { list . map ( ( post ) => (
501531 < div
502532 key = { post . id }
503533 className = { clsx (
@@ -518,6 +548,22 @@ export const CalendarColumn: FC<{
518548 </ div >
519549 </ div >
520550 ) ) }
551+ { ! showAll && postList . length > 3 && (
552+ < div
553+ className = "text-center hover:underline py-[5px]"
554+ onClick = { showAllFunc }
555+ >
556+ + Show more ({ postList . length - 3 } )
557+ </ div >
558+ ) }
559+ { showAll && postList . length > 3 && (
560+ < div
561+ className = "text-center hover:underline py-[5px]"
562+ onClick = { showLessFunc }
563+ >
564+ - Show less
565+ </ div >
566+ ) }
521567 </ div >
522568 { ( display === 'day'
523569 ? ! isBeforeNow && postList . length === 0
@@ -602,7 +648,8 @@ const CalendarItem: FC<{
602648 display : 'day' | 'week' | 'month' ;
603649 post : Post & { integration : Integration } ;
604650} > = ( props ) => {
605- const { editPost, duplicatePost, post, date, isBeforeNow, state, display } = props ;
651+ const { editPost, duplicatePost, post, date, isBeforeNow, state, display } =
652+ props ;
606653
607654 const preview = useCallback ( ( ) => {
608655 window . open ( `/p/` + post . id + '?share=true' , '_blank' ) ;
@@ -626,15 +673,25 @@ const CalendarItem: FC<{
626673 style = { { opacity } }
627674 >
628675 < div className = "bg-forth text-[11px] h-[15px] w-full rounded-tr-[10px] rounded-tl-[10px] flex justify-center gap-[10px] px-[5px]" >
629- < div className = "hidden group-hover:block hover:underline cursor-pointer" onClick = { duplicatePost } > Duplicate</ div >
630- < div className = "hidden group-hover:block hover:underline cursor-pointer" onClick = { preview } > Preview</ div >
676+ < div
677+ className = "hidden group-hover:block hover:underline cursor-pointer"
678+ onClick = { duplicatePost }
679+ >
680+ Duplicate
681+ </ div >
682+ < div
683+ className = "hidden group-hover:block hover:underline cursor-pointer"
684+ onClick = { preview }
685+ >
686+ Preview
687+ </ div >
631688 </ div >
632689 < div
633690 onClick = { editPost }
634691 className = { clsx (
635692 'gap-[5px] w-full flex h-full flex-1 rounded-br-[10px] rounded-bl-[10px] border border-seventh px-[5px] p-[2.5px]' ,
636693 'relative' ,
637- ( isBeforeNow ) && '!grayscale'
694+ isBeforeNow && '!grayscale'
638695 ) }
639696 >
640697 < div
0 commit comments