Hello world book

  • New Year Contest
  • page 2
  • পৃষ্ঠা ৩
  • পৃষ্ঠা ৩?
  • পৃষ্ঠা ৪ + আরো আছে
  • কেন? তুমি

    content :


    import { useEffect, useMemo } from 'react';
    import { useRouter } from 'next/router';
    import { Box, Container, Grid, useMediaQuery } from '@mui/material';
    import {
      ExtendBook,
      Module,
      Page,
    } from '@/components/pages/ph-books/interfaces';
    import BookSidebar from '@/components/pages/ph-books/BookSidebar';
    import BookNavigateButtons from '@/components/pages/ph-books/BookNavigateButtons';
    import BookBreadCrumbs from '@/components/pages/ph-books/BookBreadCrumbs';
    import dynamic from 'next/dynamic';
    import ModulePageList from '@/components/pages/ph-books/ModulePageList';
    
    
    const BookContent = dynamic(
      () => import('@/components/pages/ph-books/BookContent'),
      { ssr: false }
    );
    const CONTENTPADDING = 12;
    const NAVBARSIZE = 80;
    
    
    export default function Book({
      isModulePage,
      book,
      pageContent,
      bookParam,
      moduleData,
    }: {
      isModulePage?: boolean;
      book: ExtendBook;
      pageContent?: any;
      bookParam: string;
      moduleData?: any;
    }) {
      const router = useRouter();
      const { bookSlug, moduleSlug, pageSlug } = router.query as {
        bookSlug: string;
        moduleSlug: string;
        pageSlug: string;
      };
      const isSmDevice = useMediaQuery('(max-width: 899px)');
    
    
      const currentModule = useMemo(
        () =>
          moduleSlug
            ? book?.modules?.find((module: Module) => module.slug === moduleSlug) ||
              null
            : null,
        [book?.modules, moduleSlug]
      );
    
    
      const nextPrePageOrModule = useMemo(() => {
        const pages: {
          previous?: Page | Module | null;
          next?: Page | Module | null;
        } = {};
        if (!currentModule?._id || !book?.modules?.length || !moduleSlug) {
          return pages;
        }
        if (pageSlug && currentModule.pages?.length) {
          const currentPageIndex = currentModule.pages.findIndex(
            (it: Page) => it.slug === pageSlug
          );
          if (currentPageIndex !== undefined && currentPageIndex !== -1) {
            if (currentPageIndex === currentModule.pages.length - 1) {
              pages.previous = currentModule.pages[currentPageIndex - 1] || null;
            } else if (currentPageIndex === 0) {
              pages.next = currentModule.pages[currentPageIndex + 1] || null;
              pages.previous = currentModule || null;
              return pages;
            } else {
              pages.previous = currentModule.pages[currentPageIndex - 1] || null;
              pages.next = currentModule.pages[currentPageIndex + 1] || null;
              return pages;
            }
          }
        } else if (!pageSlug && currentModule.pages?.length) {
          const currentModuleIndex = book?.modules.findIndex(
            (module: Module) => module.slug === moduleSlug
          );
    
    
          if (currentModuleIndex !== 0) {
            const preModule = book?.modules[currentModuleIndex - 1];
            const prePages = preModule?.pages;
            pages.previous = prePages?.[prePages?.length - 1] || null;
            if (pages.previous) {
              if (pages.previous) {
                //@ts-ignore
                pages.previous.moduleSlug = preModule.slug;
              }
            }
          } else {
            pages.previous = null;
          }
          pages.next = currentModule.pages[0] || null;
          return pages;
        }
        if (pages.previous === undefined || pages.next === undefined) {
          const currentModuleIndex = book?.modules.findIndex(
            (module: Module) => module.slug === moduleSlug
          );
          if (currentModuleIndex !== undefined && currentModuleIndex !== -1) {
            if (pages.next === undefined) {
              const nextModule = book?.modules[currentModuleIndex + 1];
              pages.next = nextModule || null;
            }
            if (pages.previous === undefined) {
              const preModule = book?.modules[currentModuleIndex - 1];
              if (pageSlug) {
                pages.previous = preModule || null;
              } else {
                const prePages = preModule?.pages;
                pages.previous = prePages?.[prePages?.length - 1] || null;
    
    
                if (pages.previous) {
                  //@ts-ignore
                  pages.previous.moduleSlug = preModule.slug;
                }
              }
            }
          }
        }
        return pages;
      }, [currentModule, pageSlug, book?.modules, moduleSlug]);
    
    
      // Scroll to content on mobile when pageSlug changes
      useEffect(() => {
        if (isSmDevice && (pageSlug || moduleSlug)) {
          const contentSection = document.getElementById('book__content');
          if (contentSection) {
            contentSection.scrollIntoView({ behavior: 'instant' });
          }
        }
      }, [pageSlug, moduleSlug, isSmDevice]);
    
    
      return (
        <>
          <Box
            sx={{
              background: '#010313',
              paddingTop: `${NAVBARSIZE + CONTENTPADDING}px`,
            }}
          >
            <Container maxWidth={false} sx={{ maxWidth: 1400 }}>
              <div>
                <Grid container spacing={3} columns={24}>
                  <Grid item md={7} xs={24}>
                    <Box
                      sx={{
                        background: '#0D0E1F',
                        p: 1.75,
                        pr: 0.5,
                        border: '1px solid #19192B',
                        borderRadius: '8px',
                        height: {
                          md: `calc(100dvh - ${NAVBARSIZE + CONTENTPADDING * 2}px)`,
                          xs: '60vh',
                        },
                      }}
                    >
                      <BookSidebar
                        bookParam={bookParam}
                        book={book}
                        currentModuleSlug={moduleSlug}
                        currentPageSlug={pageSlug}
                      />
                    </Box>
                  </Grid>
                  <Grid item md={17} xs={24}>
                    <Box
                      sx={{
                        height: `calc(100dvh - ${NAVBARSIZE + CONTENTPADDING}px)`,
                        display: 'flex',
                        flexDirection: 'column',
                      }}
                    >
                      <BookBreadCrumbs book={book} bookParam={bookParam} />
    
    
                      <Box sx={{ flex: 1 }}>
                        {isModulePage ? (
                          <ModulePageList
                            bookParam={bookParam}
                            module={currentModule}
                          />
                        ) : (
                          <BookContent bookContent={pageContent} />
                        )}
                      </Box>
    
    
                      <BookNavigateButtons
                        bookParam={bookParam}
                        nextPrePageOrModule={nextPrePageOrModule}
                      />
                    </Box>
                  </Grid>
                </Grid>
              </div>
            </Container>
          </Box>
        </>
      );
    }

    hello this is test one

    Previous ChapterNext Page