diff --git a/.dockerignore b/.dockerignore index b0542ba..36d88eb 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,5 @@ /dist +/dist-package /widget Makefile README.md diff --git a/.gitignore b/.gitignore index a302ba2..5d68f75 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ lerna-debug.log* node_modules dist +dist-package dist-ssr widget *.local @@ -22,4 +23,4 @@ widget *.ntvs* *.njsproj *.sln -*.sw? \ No newline at end of file +*.sw? diff --git a/README.md b/README.md new file mode 100644 index 0000000..f6f7e1b --- /dev/null +++ b/README.md @@ -0,0 +1,52 @@ +## Виджет +### Сборка +```bash +yarn build:widget +``` +### Использование +```html + +``` +## Npm-пакет +### Перед использованием и публикацией +```bash +npm config set //penahub.gitlab.yandexcloud.net/api/v4/packages/npm/:_authToken=INSTANCE_TOKEN +npm config set //penahub.gitlab.yandexcloud.net/api/v4/projects/43/packages/npm/:_authToken=PROJECT_TOKEN +``` +### Публикация +1. Инкрементировать версию в package.json +2. +```bash +yarn publish +``` +3. Нажать enter при запросе версии +### Установка +Добавить в корень проекта файл .yarnrc с содержимым +``` +"@frontend:registry" "https://penahub.gitlab.yandexcloud.net/api/v4/packages/npm/" +``` +```bash +yarn add @frontend/squzanswerer +``` +Peer dependencies: +```bash +yarn add @emoji-mart/data @emoji-mart/react @emotion/react @emotion/styled @mui/icons-material @mui/material @mui/x-date-pickers axios emoji-mart immer moment nanoid notistack react-dom react-error-boundary react-router-dom react swr use-debounce zustand +``` +### Использование +```ts +import { QuizView } from "@frontend/squzanswerer"; + +export default function Component() { + // ... + return ( + + } +} +``` diff --git a/src/api/quizRelase.ts b/lib/api/quizRelase.ts similarity index 100% rename from src/api/quizRelase.ts rename to lib/api/quizRelase.ts diff --git a/src/assets/icons/ArrowDownIcon.tsx b/lib/assets/icons/ArrowDownIcon.tsx old mode 100755 new mode 100644 similarity index 100% rename from src/assets/icons/ArrowDownIcon.tsx rename to lib/assets/icons/ArrowDownIcon.tsx diff --git a/src/assets/icons/BlankImage.tsx b/lib/assets/icons/BlankImage.tsx similarity index 100% rename from src/assets/icons/BlankImage.tsx rename to lib/assets/icons/BlankImage.tsx diff --git a/src/assets/icons/CalendarIcon.tsx b/lib/assets/icons/CalendarIcon.tsx similarity index 100% rename from src/assets/icons/CalendarIcon.tsx rename to lib/assets/icons/CalendarIcon.tsx diff --git a/src/assets/icons/Checkbox.tsx b/lib/assets/icons/Checkbox.tsx similarity index 100% rename from src/assets/icons/Checkbox.tsx rename to lib/assets/icons/Checkbox.tsx diff --git a/src/assets/icons/CloseBold.tsx b/lib/assets/icons/CloseBold.tsx similarity index 100% rename from src/assets/icons/CloseBold.tsx rename to lib/assets/icons/CloseBold.tsx diff --git a/src/assets/icons/ContactFormIcon/AddressIcon.tsx b/lib/assets/icons/ContactFormIcon/AddressIcon.tsx similarity index 100% rename from src/assets/icons/ContactFormIcon/AddressIcon.tsx rename to lib/assets/icons/ContactFormIcon/AddressIcon.tsx diff --git a/src/assets/icons/ContactFormIcon/EmailIcon.tsx b/lib/assets/icons/ContactFormIcon/EmailIcon.tsx similarity index 100% rename from src/assets/icons/ContactFormIcon/EmailIcon.tsx rename to lib/assets/icons/ContactFormIcon/EmailIcon.tsx diff --git a/src/assets/icons/ContactFormIcon/NameIcon.tsx b/lib/assets/icons/ContactFormIcon/NameIcon.tsx similarity index 100% rename from src/assets/icons/ContactFormIcon/NameIcon.tsx rename to lib/assets/icons/ContactFormIcon/NameIcon.tsx diff --git a/src/assets/icons/ContactFormIcon/PhoneIcon.tsx b/lib/assets/icons/ContactFormIcon/PhoneIcon.tsx similarity index 100% rename from src/assets/icons/ContactFormIcon/PhoneIcon.tsx rename to lib/assets/icons/ContactFormIcon/PhoneIcon.tsx diff --git a/src/assets/icons/ContactFormIcon/TextIcon.tsx b/lib/assets/icons/ContactFormIcon/TextIcon.tsx similarity index 100% rename from src/assets/icons/ContactFormIcon/TextIcon.tsx rename to lib/assets/icons/ContactFormIcon/TextIcon.tsx diff --git a/src/assets/icons/Info.tsx b/lib/assets/icons/Info.tsx similarity index 100% rename from src/assets/icons/Info.tsx rename to lib/assets/icons/Info.tsx diff --git a/src/assets/icons/NameplateLogo.tsx b/lib/assets/icons/NameplateLogo.tsx similarity index 100% rename from src/assets/icons/NameplateLogo.tsx rename to lib/assets/icons/NameplateLogo.tsx diff --git a/src/assets/icons/NameplateLogoFQ.tsx b/lib/assets/icons/NameplateLogoFQ.tsx similarity index 100% rename from src/assets/icons/NameplateLogoFQ.tsx rename to lib/assets/icons/NameplateLogoFQ.tsx diff --git a/src/assets/icons/NameplateLogoFQDark.tsx b/lib/assets/icons/NameplateLogoFQDark.tsx similarity index 100% rename from src/assets/icons/NameplateLogoFQDark.tsx rename to lib/assets/icons/NameplateLogoFQDark.tsx diff --git a/src/assets/icons/UploadIcon.tsx b/lib/assets/icons/UploadIcon.tsx old mode 100755 new mode 100644 similarity index 100% rename from src/assets/icons/UploadIcon.tsx rename to lib/assets/icons/UploadIcon.tsx diff --git a/src/assets/icons/questionsPage/FlagIcon.tsx b/lib/assets/icons/questionsPage/FlagIcon.tsx similarity index 100% rename from src/assets/icons/questionsPage/FlagIcon.tsx rename to lib/assets/icons/questionsPage/FlagIcon.tsx diff --git a/src/assets/icons/questionsPage/StarIconMini.tsx b/lib/assets/icons/questionsPage/StarIconMini.tsx similarity index 100% rename from src/assets/icons/questionsPage/StarIconMini.tsx rename to lib/assets/icons/questionsPage/StarIconMini.tsx diff --git a/src/assets/icons/questionsPage/hashtagIcon.tsx b/lib/assets/icons/questionsPage/hashtagIcon.tsx similarity index 100% rename from src/assets/icons/questionsPage/hashtagIcon.tsx rename to lib/assets/icons/questionsPage/hashtagIcon.tsx diff --git a/src/assets/icons/questionsPage/heartIcon.tsx b/lib/assets/icons/questionsPage/heartIcon.tsx similarity index 100% rename from src/assets/icons/questionsPage/heartIcon.tsx rename to lib/assets/icons/questionsPage/heartIcon.tsx diff --git a/src/assets/icons/questionsPage/lightbulbIcon.tsx b/lib/assets/icons/questionsPage/lightbulbIcon.tsx similarity index 100% rename from src/assets/icons/questionsPage/lightbulbIcon.tsx rename to lib/assets/icons/questionsPage/lightbulbIcon.tsx diff --git a/src/assets/icons/questionsPage/likeIcon.tsx b/lib/assets/icons/questionsPage/likeIcon.tsx similarity index 100% rename from src/assets/icons/questionsPage/likeIcon.tsx rename to lib/assets/icons/questionsPage/likeIcon.tsx diff --git a/src/assets/icons/questionsPage/tropfyIcon.tsx b/lib/assets/icons/questionsPage/tropfyIcon.tsx similarity index 100% rename from src/assets/icons/questionsPage/tropfyIcon.tsx rename to lib/assets/icons/questionsPage/tropfyIcon.tsx diff --git a/src/QuizAnswerer.tsx b/lib/components/QuizAnswerer.tsx similarity index 93% rename from src/QuizAnswerer.tsx rename to lib/components/QuizAnswerer.tsx index d39e206..50fa0cd 100644 --- a/src/QuizAnswerer.tsx +++ b/lib/components/QuizAnswerer.tsx @@ -10,8 +10,8 @@ import { SnackbarProvider } from 'notistack'; import { Suspense } from "react"; import { ErrorBoundary } from "react-error-boundary"; import { SWRConfig } from "swr"; -import ViewPublicationPage from "./pages/ViewPublicationPage/ViewPublicationPage"; -import lightTheme from "./utils/themes/light"; +import ViewPublicationPage from "./ViewPublicationPage/ViewPublicationPage"; +import lightTheme from "@utils/themes/light"; moment.locale("ru"); diff --git a/src/WidgetApp.tsx b/lib/components/QuizView.tsx similarity index 74% rename from src/WidgetApp.tsx rename to lib/components/QuizView.tsx index f04d727..bddf360 100644 --- a/src/WidgetApp.tsx +++ b/lib/components/QuizView.tsx @@ -1,18 +1,22 @@ import { Box } from "@mui/material"; -import { startTransition, useEffect, useRef, useState } from "react"; +import { startTransition, useEffect, useLayoutEffect, useRef, useState } from "react"; +import { QuizIdContext } from "@contexts/QuizIdContext"; +import { RootContainerWidthContext } from "@contexts/RootContainerWidthContext"; import QuizAnswerer from "./QuizAnswerer"; -import { QuizIdContext } from "./contexts/QuizIdContext"; -import { RootContainerWidthContext } from "./contexts/RootContainerWidthContext"; interface Props { quizId: string; } -export default function WidgetApp({ quizId }: Props) { +export default function QuizView({ quizId }: Props) { const [rootContainerSize, setRootContainerSize] = useState(() => window.innerWidth); const rootContainerRef = useRef(null); + useLayoutEffect(() => { + if (rootContainerRef.current) setRootContainerSize(rootContainerRef.current.clientWidth); + }, []); + useEffect(() => { const handleWindowResize = () => { startTransition(() => { diff --git a/src/pages/ViewPublicationPage/ApologyPage.tsx b/lib/components/ViewPublicationPage/ApologyPage.tsx similarity index 100% rename from src/pages/ViewPublicationPage/ApologyPage.tsx rename to lib/components/ViewPublicationPage/ApologyPage.tsx diff --git a/src/pages/ViewPublicationPage/ContactForm.tsx b/lib/components/ViewPublicationPage/ContactForm.tsx similarity index 100% rename from src/pages/ViewPublicationPage/ContactForm.tsx rename to lib/components/ViewPublicationPage/ContactForm.tsx diff --git a/src/pages/ViewPublicationPage/Footer.tsx b/lib/components/ViewPublicationPage/Footer.tsx similarity index 100% rename from src/pages/ViewPublicationPage/Footer.tsx rename to lib/components/ViewPublicationPage/Footer.tsx diff --git a/src/pages/ViewPublicationPage/Question.tsx b/lib/components/ViewPublicationPage/Question.tsx similarity index 100% rename from src/pages/ViewPublicationPage/Question.tsx rename to lib/components/ViewPublicationPage/Question.tsx diff --git a/src/pages/ViewPublicationPage/ResultForm.tsx b/lib/components/ViewPublicationPage/ResultForm.tsx similarity index 94% rename from src/pages/ViewPublicationPage/ResultForm.tsx rename to lib/components/ViewPublicationPage/ResultForm.tsx index 1f4b153..267130a 100644 --- a/src/pages/ViewPublicationPage/ResultForm.tsx +++ b/lib/components/ViewPublicationPage/ResultForm.tsx @@ -8,11 +8,11 @@ import { import { NameplateLogo } from "@icons/NameplateLogo"; import YoutubeEmbedIframe from "./tools/YoutubeEmbedIframe"; -import { setCurrentQuizStep } from "@stores/quizView/store"; import { useQuizData } from "@utils/hooks/useQuizData"; import { quizThemes } from "@utils/themes/Publication/themePublication"; import { useRootContainerSize } from "../../contexts/RootContainerWidthContext"; import type { QuizQuestionResult } from "../../model/questionTypes/result"; +import { setCurrentQuizStep } from "@stores/quizView"; type ResultFormProps = { @@ -132,6 +132,7 @@ export const ResultForm = ({ resultQuestion }: ResultFormProps) => { mt: "15px", gap: "10px", textDecoration: "none", + mb: "5px" }} > { display: "flex", justifyContent: "center", alignItems: "center", - p: settings.cfg.resultInfo.showResultForm === "before" || + p: + ( + settings.cfg.resultInfo.showResultForm === "before" && + !Boolean(settings.cfg.score) + ) || ( settings.cfg.resultInfo.showResultForm === "after" && resultQuestion.content.redirect - ) ? "20px" : "0", + ) + ? "20px" : "0", }} > - {settings.cfg.resultInfo.showResultForm === "before" && ( + {settings.cfg.resultInfo.showResultForm === "before" && !Boolean(settings.cfg.score) && (