From 7c2d97053bde8c5ce77c4523341198d6241e8fb8 Mon Sep 17 00:00:00 2001 From: Untone Date: Fri, 5 Jul 2024 17:08:12 +0300 Subject: [PATCH] utils-refactored --- src/components/Article/AudioPlayer/PlayerPlaylist.tsx | 4 ++-- src/components/Article/CommentsTree.tsx | 2 +- src/components/Article/FullArticle.tsx | 10 +++++----- src/components/Author/AuthorBadge/AuthorBadge.tsx | 4 ++-- src/components/Author/AuthorCard/AuthorCard.tsx | 11 +++++------ src/components/Author/AuthorLink/AuthorLink.tsx | 4 ++-- src/components/Editor/BubbleMenu/FigureBubbleMenu.tsx | 2 +- src/components/Editor/Editor.tsx | 2 +- .../Editor/EditorFloatingMenu/EditorFloatingMenu.tsx | 2 +- .../Editor/UploadModalContent/UploadModalContent.tsx | 2 +- .../Editor}/renderUploadedImage.ts | 0 src/components/Feed/ArticleCard/ArticleCard.tsx | 4 ++-- src/components/Inbox/DialogAvatar.tsx | 2 +- src/components/Nav/Header/Header.tsx | 6 +++--- src/components/Nav/SearchModal/SearchModal.tsx | 2 +- src/components/ProfileSettings/ProfileSettings.tsx | 6 +++--- src/components/Topic/TopicBadge/TopicBadge.tsx | 2 +- src/components/Views/AllAuthors/AllAuthors.tsx | 10 +++++----- src/components/Views/AllTopics/AllTopics.tsx | 8 ++++---- src/components/Views/Author/Author.tsx | 8 ++++---- src/components/Views/EditView/EditView.tsx | 4 ++-- src/components/Views/Feed/Feed.tsx | 8 ++++---- src/components/Views/Home.tsx | 4 ++-- .../ProfileSubscriptions/ProfileSubscriptions.tsx | 9 ++++----- src/components/Views/Topic.tsx | 10 +++++----- src/components/_shared/DropArea/DropArea.tsx | 4 ++-- src/components/_shared/Image/Image.tsx | 2 +- src/components/_shared/Lightbox/Lightbox.tsx | 2 +- src/components/_shared/SolidSwiper/EditorSwiper.tsx | 4 ++-- src/components/_shared/SolidSwiper/ImageSwiper.tsx | 2 +- src/{config => }/config.ts | 0 src/context/connect.tsx | 2 +- src/context/editor.tsx | 5 ++--- src/context/feed.tsx | 2 +- src/context/graphql.tsx | 2 +- src/context/inbox.tsx | 2 +- src/context/localize.tsx | 4 ++-- src/context/session.tsx | 2 +- src/context/topics.tsx | 4 ++-- src/{config/translit.json => intl/abc-translit.json} | 0 src/{utils => intl}/i18next.ts | 4 ++-- src/{config => intl}/locales/en/keywords.json | 0 src/{config => intl}/locales/en/translation.json | 0 src/{config => intl}/locales/ru/keywords.json | 0 src/{config => intl}/locales/ru/translation.json | 0 src/{utils => intl}/translate.ts | 4 ++-- src/{utils/ru2en.ts => intl/translit.ts} | 8 +++++++- src/{utils => lib}/dummyFilter.ts | 6 ++---- src/{utils => lib}/getImageUrl.ts | 2 +- src/{utils => lib}/getRandomTopicsFromArray.ts | 0 src/{utils => lib}/groupby.ts | 0 src/{utils => lib}/handleFileUpload.ts | 2 +- src/{utils => lib}/handleImageUpload.ts | 2 +- src/{utils => lib}/profileSocialLinks.ts | 0 src/{utils => lib}/sortby.ts | 0 src/routes/(home).tsx | 2 +- src/routes/(static)/guide/(guide).tsx | 6 +++--- src/routes/(static)/guide/debate.tsx | 2 +- src/routes/(static)/guide/principles.tsx | 6 +++--- src/routes/(static)/manifest.tsx | 2 +- src/routes/(static)/partners.tsx | 2 +- src/routes/(static)/support/(support).tsx | 2 +- src/routes/(static)/support/thanks.tsx | 2 +- src/routes/(static)/terms.tsx | 2 +- src/routes/[slug].tsx | 2 +- src/routes/edit/new.tsx | 6 +++--- src/utils/composeMediaItems.ts | 4 ++-- src/utils/getServerRoute.ts | 4 ---- src/utils/isAuthor.ts | 5 ----- src/utils/meta.ts | 4 ++-- src/utils/slugify.ts | 7 ------- 71 files changed, 117 insertions(+), 132 deletions(-) rename src/{utils => components/Editor}/renderUploadedImage.ts (100%) rename src/{config => }/config.ts (100%) rename src/{config/translit.json => intl/abc-translit.json} (100%) rename src/{utils => intl}/i18next.ts (91%) rename src/{config => intl}/locales/en/keywords.json (100%) rename src/{config => intl}/locales/en/translation.json (100%) rename src/{config => intl}/locales/ru/keywords.json (100%) rename src/{config => intl}/locales/ru/translation.json (100%) rename src/{utils => intl}/translate.ts (93%) rename src/{utils/ru2en.ts => intl/translit.ts} (58%) rename src/{utils => lib}/dummyFilter.ts (92%) rename src/{utils => lib}/getImageUrl.ts (97%) rename src/{utils => lib}/getRandomTopicsFromArray.ts (100%) rename src/{utils => lib}/groupby.ts (100%) rename src/{utils => lib}/handleFileUpload.ts (90%) rename src/{utils => lib}/handleImageUpload.ts (96%) rename src/{utils => lib}/profileSocialLinks.ts (100%) rename src/{utils => lib}/sortby.ts (100%) delete mode 100644 src/utils/getServerRoute.ts delete mode 100644 src/utils/isAuthor.ts delete mode 100644 src/utils/slugify.ts diff --git a/src/components/Article/AudioPlayer/PlayerPlaylist.tsx b/src/components/Article/AudioPlayer/PlayerPlaylist.tsx index b278c3d4..6a011431 100644 --- a/src/components/Article/AudioPlayer/PlayerPlaylist.tsx +++ b/src/components/Article/AudioPlayer/PlayerPlaylist.tsx @@ -4,7 +4,7 @@ import { Icon } from '~/components/_shared/Icon' import { Popover } from '~/components/_shared/Popover' import { useLocalize } from '~/context/localize' import { MediaItem } from '~/types/mediaitem' -import { getDescription } from '~/utils/meta' +import { getArticleDescription } from '~/utils/meta' import { SharePopup, getShareUrl } from '../SharePopup' import styles from './AudioPlayer.module.scss' @@ -137,7 +137,7 @@ export const PlayerPlaylist = (props: Props) => { > { width: 1200 }) - const description = getDescription(props.article.description || body() || media()[0]?.body) + const description = getArticleDescription(props.article.description || body() || media()[0]?.body) const ogTitle = props.article.title - const keywords = getKeywords(props.article) + const keywords = getArticleKeywords(props.article) const shareUrl = getShareUrl({ pathname: `/${props.article.slug}` }) const getAuthorName = (a: Author) => { return lang() === 'en' && isCyrillic(a.name || '') ? capitalize(a.slug.replace(/-/, ' ')) : a.name diff --git a/src/components/Author/AuthorBadge/AuthorBadge.tsx b/src/components/Author/AuthorBadge/AuthorBadge.tsx index 4029d8ff..4388e992 100644 --- a/src/components/Author/AuthorBadge/AuthorBadge.tsx +++ b/src/components/Author/AuthorBadge/AuthorBadge.tsx @@ -11,9 +11,9 @@ import { useFollowing } from '~/context/following' import { useLocalize } from '~/context/localize' import { useSession } from '~/context/session' import { Author, FollowingEntity } from '~/graphql/schema/core.gen' +import { isCyrillic } from '~/intl/translate' +import { translit } from '~/intl/translit' import { mediaMatches } from '~/utils/media-query' -import { translit } from '~/utils/ru2en' -import { isCyrillic } from '~/utils/translate' import { Userpic } from '../Userpic' import styles from './AuthorBadge.module.scss' diff --git a/src/components/Author/AuthorCard/AuthorCard.tsx b/src/components/Author/AuthorCard/AuthorCard.tsx index 2d05107d..0f679cde 100644 --- a/src/components/Author/AuthorCard/AuthorCard.tsx +++ b/src/components/Author/AuthorCard/AuthorCard.tsx @@ -9,9 +9,8 @@ import { FollowsFilter, useFollowing } from '~/context/following' import { useLocalize } from '~/context/localize' import { useSession } from '~/context/session' import { FollowingEntity, Topic } from '~/graphql/schema/core.gen' -import { isAuthor } from '~/utils/isAuthor' -import { translit } from '~/utils/ru2en' -import { isCyrillic } from '~/utils/translate' +import { isCyrillic } from '~/intl/translate' +import { translit } from '~/intl/translit' import { SharePopup, getShareUrl } from '../../Article/SharePopup' import { Modal } from '../../Nav/Modal' import { TopicBadge } from '../../Topic/TopicBadge' @@ -164,10 +163,10 @@ export const AuthorCard = (props: Props) => {
{(subscription) => - isAuthor(subscription) ? ( - + 'name' in subscription ? ( + ) : ( - + ) } diff --git a/src/components/Author/AuthorLink/AuthorLink.tsx b/src/components/Author/AuthorLink/AuthorLink.tsx index cfac518e..aba32ffb 100644 --- a/src/components/Author/AuthorLink/AuthorLink.tsx +++ b/src/components/Author/AuthorLink/AuthorLink.tsx @@ -3,9 +3,9 @@ import { createMemo } from 'solid-js' import { useLocalize } from '~/context/localize' import { Author } from '~/graphql/schema/core.gen' +import { isCyrillic } from '~/intl/translate' +import { translit } from '~/intl/translit' import { capitalize } from '~/utils/capitalize' -import { translit } from '~/utils/ru2en' -import { isCyrillic } from '~/utils/translate' import { Userpic } from '../Userpic' import styles from './AhtorLink.module.scss' diff --git a/src/components/Editor/BubbleMenu/FigureBubbleMenu.tsx b/src/components/Editor/BubbleMenu/FigureBubbleMenu.tsx index 5654b874..ad100d98 100644 --- a/src/components/Editor/BubbleMenu/FigureBubbleMenu.tsx +++ b/src/components/Editor/BubbleMenu/FigureBubbleMenu.tsx @@ -1,10 +1,10 @@ import type { Editor } from '@tiptap/core' +import { renderUploadedImage } from '~/components/Editor/renderUploadedImage' import { Icon } from '~/components/_shared/Icon' import { Popover } from '~/components/_shared/Popover' import { useLocalize } from '~/context/localize' import { UploadedFile } from '~/types/upload' -import { renderUploadedImage } from '~/utils/renderUploadedImage' import { Modal } from '../../Nav/Modal' import { UploadModalContent } from '../UploadModalContent' diff --git a/src/components/Editor/Editor.tsx b/src/components/Editor/Editor.tsx index b223c3f1..7415bcf3 100644 --- a/src/components/Editor/Editor.tsx +++ b/src/components/Editor/Editor.tsx @@ -34,7 +34,7 @@ import { useEditorContext } from '~/context/editor' import { useLocalize } from '~/context/localize' import { useSession } from '~/context/session' import { useSnackbar } from '~/context/ui' -import { handleImageUpload } from '~/utils/handleImageUpload' +import { handleImageUpload } from '~/lib/handleImageUpload' import { BlockquoteBubbleMenu, FigureBubbleMenu, IncutBubbleMenu } from './BubbleMenu' import { EditorFloatingMenu } from './EditorFloatingMenu' diff --git a/src/components/Editor/EditorFloatingMenu/EditorFloatingMenu.tsx b/src/components/Editor/EditorFloatingMenu/EditorFloatingMenu.tsx index fe1907bf..72dd43e5 100644 --- a/src/components/Editor/EditorFloatingMenu/EditorFloatingMenu.tsx +++ b/src/components/Editor/EditorFloatingMenu/EditorFloatingMenu.tsx @@ -1,11 +1,11 @@ import type { Editor } from '@tiptap/core' import { Show, createEffect, createSignal } from 'solid-js' +import { renderUploadedImage } from '~/components/Editor/renderUploadedImage' import { Icon } from '~/components/_shared/Icon' import { useLocalize } from '~/context/localize' import { useUI } from '~/context/ui' import { UploadedFile } from '~/types/upload' -import { renderUploadedImage } from '~/utils/renderUploadedImage' import { useOutsideClickHandler } from '~/utils/useOutsideClickHandler' import { Modal } from '../../Nav/Modal' import { InlineForm } from '../InlineForm' diff --git a/src/components/Editor/UploadModalContent/UploadModalContent.tsx b/src/components/Editor/UploadModalContent/UploadModalContent.tsx index ad09765e..e6ff8f01 100644 --- a/src/components/Editor/UploadModalContent/UploadModalContent.tsx +++ b/src/components/Editor/UploadModalContent/UploadModalContent.tsx @@ -8,8 +8,8 @@ import { Loading } from '~/components/_shared/Loading' import { useLocalize } from '~/context/localize' import { useSession } from '~/context/session' import { useUI } from '~/context/ui' +import { handleImageUpload } from '~/lib/handleImageUpload' import { UploadedFile } from '~/types/upload' -import { handleImageUpload } from '~/utils/handleImageUpload' import { verifyImg } from '~/utils/verifyImg' import { InlineForm } from '../InlineForm' diff --git a/src/utils/renderUploadedImage.ts b/src/components/Editor/renderUploadedImage.ts similarity index 100% rename from src/utils/renderUploadedImage.ts rename to src/components/Editor/renderUploadedImage.ts diff --git a/src/components/Feed/ArticleCard/ArticleCard.tsx b/src/components/Feed/ArticleCard/ArticleCard.tsx index a7e66adc..d4eb7ce2 100644 --- a/src/components/Feed/ArticleCard/ArticleCard.tsx +++ b/src/components/Feed/ArticleCard/ArticleCard.tsx @@ -8,7 +8,7 @@ import { useLocalize } from '~/context/localize' import { useSession } from '~/context/session' import type { Author, Maybe, Shout, Topic } from '~/graphql/schema/core.gen' import { capitalize } from '~/utils/capitalize' -import { getDescription } from '~/utils/meta' +import { getArticleDescription } from '~/utils/meta' import { CoverImage } from '../../Article/CoverImage' import { SharePopup, getShareUrl } from '../../Article/SharePopup' import { ShoutRatingControl } from '../../Article/ShoutRatingControl' @@ -109,7 +109,7 @@ export const ArticleCard = (props: ArticleCardProps) => { const [isActionPopupActive, setIsActionPopupActive] = createSignal(false) const [isCoverImageLoadError, setIsCoverImageLoadError] = createSignal(false) const [isCoverImageLoading, setIsCoverImageLoading] = createSignal(true) - const description = getDescription(props.article?.body) + const description = getArticleDescription(props.article?.body) const aspectRatio: Accessor = () => LAYOUT_ASPECT[props.article?.layout as string] const [mainTopicTitle, mainTopicSlug] = getMainTopicTitle(props.article, lang()) const { title, subtitle } = getTitleAndSubtitle(props.article) diff --git a/src/components/Inbox/DialogAvatar.tsx b/src/components/Inbox/DialogAvatar.tsx index 094ccd7d..c3e255a2 100644 --- a/src/components/Inbox/DialogAvatar.tsx +++ b/src/components/Inbox/DialogAvatar.tsx @@ -1,7 +1,7 @@ import { clsx } from 'clsx' import { Show, createMemo } from 'solid-js' -import { getImageUrl } from '~/utils/getImageUrl' +import { getImageUrl } from '~/lib/getImageUrl' import './DialogCard.module.scss' import styles from './DialogAvatar.module.scss' diff --git a/src/components/Nav/Header/Header.tsx b/src/components/Nav/Header/Header.tsx index c372f424..2bb79163 100644 --- a/src/components/Nav/Header/Header.tsx +++ b/src/components/Nav/Header/Header.tsx @@ -6,8 +6,8 @@ import { useSession } from '~/context/session' import { useTopics } from '~/context/topics' import { useUI } from '~/context/ui' import type { Topic } from '../../../graphql/schema/core.gen' -import { getRandomTopicsFromArray } from '../../../utils/getRandomTopicsFromArray' -import { getDescription } from '../../../utils/meta' +import { getRandomTopicsFromArray } from '../../../lib/getRandomTopicsFromArray' +import { getArticleDescription } from '../../../utils/meta' import { SharePopup, getShareUrl } from '../../Article/SharePopup' import { Icon } from '../../_shared/Icon' import { Newsletter } from '../../_shared/Newsletter' @@ -340,7 +340,7 @@ export const Header = (props: Props) => { title={props.title || ''} imageUrl={props.cover || ''} shareUrl={getShareUrl()} - description={getDescription(props.articleBody || '')} + description={getArticleDescription(props.articleBody?.slice(0, 100) || '')} onVisibilityChange={(isVisible) => { setIsSharePopupVisible(isVisible) }} diff --git a/src/components/Nav/SearchModal/SearchModal.tsx b/src/components/Nav/SearchModal/SearchModal.tsx index 0b2c6500..40a30726 100644 --- a/src/components/Nav/SearchModal/SearchModal.tsx +++ b/src/components/Nav/SearchModal/SearchModal.tsx @@ -7,8 +7,8 @@ import { Button } from '~/components/_shared/Button' import { Icon } from '~/components/_shared/Icon' import { useFeed } from '~/context/feed' import { useLocalize } from '~/context/localize' +import { byScore } from '~/lib/sortby' import { restoreScrollPosition, saveScrollPosition } from '~/utils/scroll' -import { byScore } from '~/utils/sortby' import { FEED_PAGE_SIZE } from '../../Views/Feed/Feed' import { SearchResultItem } from './SearchResultItem' diff --git a/src/components/ProfileSettings/ProfileSettings.tsx b/src/components/ProfileSettings/ProfileSettings.tsx index 3d3ef64a..2681ccba 100644 --- a/src/components/ProfileSettings/ProfileSettings.tsx +++ b/src/components/ProfileSettings/ProfileSettings.tsx @@ -19,10 +19,10 @@ import { useProfile } from '~/context/profile' import { useSession } from '~/context/session' import { useSnackbar, useUI } from '~/context/ui' import { InputMaybe, ProfileInput } from '~/graphql/schema/core.gen' +import { getImageUrl } from '~/lib/getImageUrl' +import { handleImageUpload } from '~/lib/handleImageUpload' +import { profileSocialLinks } from '~/lib/profileSocialLinks' import { clone } from '~/utils/clone' -import { getImageUrl } from '~/utils/getImageUrl' -import { handleImageUpload } from '~/utils/handleImageUpload' -import { profileSocialLinks } from '~/utils/profileSocialLinks' import { validateUrl } from '~/utils/validateUrl' import { Modal } from '../Nav/Modal' import { ProfileSettingsNavigation } from '../Nav/ProfileSettingsNavigation' diff --git a/src/components/Topic/TopicBadge/TopicBadge.tsx b/src/components/Topic/TopicBadge/TopicBadge.tsx index d9f57ec4..3811d284 100644 --- a/src/components/Topic/TopicBadge/TopicBadge.tsx +++ b/src/components/Topic/TopicBadge/TopicBadge.tsx @@ -6,8 +6,8 @@ import { useFollowing } from '~/context/following' import { useLocalize } from '~/context/localize' import { useSession } from '~/context/session' import { FollowingEntity, Topic } from '~/graphql/schema/core.gen' +import { getImageUrl } from '~/lib/getImageUrl' import { capitalize } from '~/utils/capitalize' -import { getImageUrl } from '~/utils/getImageUrl' import { mediaMatches } from '~/utils/media-query' import styles from './TopicBadge.module.scss' diff --git a/src/components/Views/AllAuthors/AllAuthors.tsx b/src/components/Views/AllAuthors/AllAuthors.tsx index 870eca04..bf668d71 100644 --- a/src/components/Views/AllAuthors/AllAuthors.tsx +++ b/src/components/Views/AllAuthors/AllAuthors.tsx @@ -4,15 +4,15 @@ import { clsx } from 'clsx' import { For, Show, createMemo, createSignal, onMount } from 'solid-js' import { Loading } from '~/components/_shared/Loading' import { SearchField } from '~/components/_shared/SearchField' -import enKeywords from '~/config/locales/en/keywords.json' -import ruKeywords from '~/config/locales/ru/keywords.json' import { type SortFunction, useAuthors } from '~/context/authors' import { useLocalize } from '~/context/localize' import type { Author } from '~/graphql/schema/core.gen' -import { getImageUrl } from '~/utils/getImageUrl' +import enKeywords from '~/intl/locales/en/keywords.json' +import ruKeywords from '~/intl/locales/ru/keywords.json' +import { authorLetterReduce, translateAuthor } from '~/intl/translate' +import { getImageUrl } from '~/lib/getImageUrl' +import { byFirstChar, byStat } from '~/lib/sortby' import { scrollHandler } from '~/utils/scroll' -import { byFirstChar, byStat } from '~/utils/sortby' -import { authorLetterReduce, translateAuthor } from '~/utils/translate' import { AuthorsList } from '../../AuthorsList' import styles from './AllAuthors.module.scss' diff --git a/src/components/Views/AllTopics/AllTopics.tsx b/src/components/Views/AllTopics/AllTopics.tsx index 30c81a45..5b68fef4 100644 --- a/src/components/Views/AllTopics/AllTopics.tsx +++ b/src/components/Views/AllTopics/AllTopics.tsx @@ -4,14 +4,14 @@ import { clsx } from 'clsx' import { For, Show, createEffect, createMemo, createSignal, on, onMount } from 'solid-js' import { Loading } from '~/components/_shared/Loading' import { SearchField } from '~/components/_shared/SearchField' -import enKeywords from '~/config/locales/en/keywords.json' -import ruKeywords from '~/config/locales/ru/keywords.json' import { useLocalize } from '~/context/localize' import { useTopics } from '~/context/topics' import type { Topic } from '~/graphql/schema/core.gen' +import enKeywords from '~/intl/locales/en/keywords.json' +import ruKeywords from '~/intl/locales/ru/keywords.json' +import { dummyFilter } from '~/lib/dummyFilter' +import { getImageUrl } from '~/lib/getImageUrl' import { capitalize } from '~/utils/capitalize' -import { dummyFilter } from '~/utils/dummyFilter' -import { getImageUrl } from '~/utils/getImageUrl' import { scrollHandler } from '~/utils/scroll' import { TopicBadge } from '../../Topic/TopicBadge' import styles from './AllTopics.module.scss' diff --git a/src/components/Views/Author/Author.tsx b/src/components/Views/Author/Author.tsx index 8c26aa49..0e34df0a 100644 --- a/src/components/Views/Author/Author.tsx +++ b/src/components/Views/Author/Author.tsx @@ -15,10 +15,10 @@ import getAuthorFollowersQuery from '~/graphql/query/core/author-followers' import getAuthorFollowsQuery from '~/graphql/query/core/author-follows' import loadReactionsBy from '~/graphql/query/core/reactions-load-by' import type { Author, Reaction, Shout, Topic } from '~/graphql/schema/core.gen' -import { getImageUrl } from '~/utils/getImageUrl' -import { getDescription } from '~/utils/meta' +import { getImageUrl } from '~/lib/getImageUrl' +import { byCreated } from '~/lib/sortby' +import { getArticleDescription } from '~/utils/meta' import { restoreScrollPosition, saveScrollPosition } from '~/utils/scroll' -import { byCreated } from '~/utils/sortby' import { splitToPages } from '~/utils/splitToPages' import stylesArticle from '../../Article/Article.module.scss' import { Comment } from '../../Article/Comment' @@ -156,7 +156,7 @@ export const AuthorView = (props: Props) => { ? getImageUrl(author()?.pic || '', { width: 1200 }) : getImageUrl('production/image/logo_image.png') ) - const description = createMemo(() => getDescription(author()?.bio || '')) + const description = createMemo(() => getArticleDescription(author()?.bio || '')) const handleDeleteComment = (id: number) => { setCommented((prev) => (prev || []).filter((comment) => comment.id !== id)) } diff --git a/src/components/Views/EditView/EditView.tsx b/src/components/Views/EditView/EditView.tsx index 00de2bc6..8a70be74 100644 --- a/src/components/Views/EditView/EditView.tsx +++ b/src/components/Views/EditView/EditView.tsx @@ -24,12 +24,12 @@ import { useGraphQL } from '~/context/graphql' import { useLocalize } from '~/context/localize' import getMyShoutQuery from '~/graphql/query/core/article-my' import type { Shout, Topic } from '~/graphql/schema/core.gen' +import { slugify } from '~/intl/translit' +import { getImageUrl } from '~/lib/getImageUrl' import { LayoutType } from '~/types/common' import { MediaItem } from '~/types/mediaitem' import { clone } from '~/utils/clone' -import { getImageUrl } from '~/utils/getImageUrl' import { isDesktop } from '~/utils/media-query' -import { slugify } from '~/utils/slugify' import { Editor, Panel } from '../../Editor' import { AudioUploader } from '../../Editor/AudioUploader' import { AutoSaveNotice } from '../../Editor/AutoSaveNotice' diff --git a/src/components/Views/Feed/Feed.tsx b/src/components/Views/Feed/Feed.tsx index e6d45d5a..4d5852a1 100644 --- a/src/components/Views/Feed/Feed.tsx +++ b/src/components/Views/Feed/Feed.tsx @@ -8,8 +8,6 @@ import { Icon } from '~/components/_shared/Icon' import { InviteMembers } from '~/components/_shared/InviteMembers' import { Loading } from '~/components/_shared/Loading' import { ShareModal } from '~/components/_shared/ShareModal' -import ruKeywords from '~/config/locales/ru/keywords.json' -import enKeywords from '~/config/locales/ru/keywords.json' import { useAuthors } from '~/context/authors' import { useGraphQL } from '~/context/graphql' import { useLocalize } from '~/context/localize' @@ -19,9 +17,11 @@ import { useTopics } from '~/context/topics' import { useUI } from '~/context/ui' import { loadUnratedShouts } from '~/graphql/api/private' import type { Author, Reaction, Shout } from '~/graphql/schema/core.gen' +import ruKeywords from '~/intl/locales/ru/keywords.json' +import enKeywords from '~/intl/locales/ru/keywords.json' +import { getImageUrl } from '~/lib/getImageUrl' +import { byCreated } from '~/lib/sortby' import { FeedSearchParams } from '~/routes/feed/[...feed]' -import { getImageUrl } from '~/utils/getImageUrl' -import { byCreated } from '~/utils/sortby' import { CommentDate } from '../../Article/CommentDate' import { getShareUrl } from '../../Article/SharePopup' import { AuthorBadge } from '../../Author/AuthorBadge' diff --git a/src/components/Views/Home.tsx b/src/components/Views/Home.tsx index 86135646..4fc34cb2 100644 --- a/src/components/Views/Home.tsx +++ b/src/components/Views/Home.tsx @@ -1,13 +1,13 @@ import { For, Show, createEffect, createMemo, createSignal, on } from 'solid-js' import { Meta } from '@solidjs/meta' -import enKeywords from '~/config/locales/en/keywords.json' -import ruKeywords from '~/config/locales/ru/keywords.json' import { useAuthors } from '~/context/authors' import { useLocalize } from '~/context/localize' import { useTopics } from '~/context/topics' import { loadShouts } from '~/graphql/api/public' import { Author, Shout, Topic } from '~/graphql/schema/core.gen' +import enKeywords from '~/intl/locales/en/keywords.json' +import ruKeywords from '~/intl/locales/ru/keywords.json' import { SHOUTS_PER_PAGE } from '~/routes/(home)' import { capitalize } from '~/utils/capitalize' import { splitToPages } from '~/utils/splitToPages' diff --git a/src/components/Views/ProfileSubscriptions/ProfileSubscriptions.tsx b/src/components/Views/ProfileSubscriptions/ProfileSubscriptions.tsx index 29960e1a..671b7a65 100644 --- a/src/components/Views/ProfileSubscriptions/ProfileSubscriptions.tsx +++ b/src/components/Views/ProfileSubscriptions/ProfileSubscriptions.tsx @@ -6,8 +6,7 @@ import { SearchField } from '~/components/_shared/SearchField' import { FollowsFilter, useFollowing } from '~/context/following' import { useLocalize } from '~/context/localize' import { Author, Topic } from '~/graphql/schema/core.gen' -import { dummyFilter } from '~/utils/dummyFilter' -import { isAuthor } from '~/utils/isAuthor' +import { dummyFilter } from '~/lib/dummyFilter' import { AuthorBadge } from '../../Author/AuthorBadge' import { ProfileSettingsNavigation } from '../../Nav/ProfileSettingsNavigation' import { TopicBadge } from '../../Topic/TopicBadge' @@ -100,10 +99,10 @@ export const ProfileSubscriptions = () => { {(followingItem) => (
- {isAuthor(followingItem) ? ( - + {'name' in followingItem ? ( + ) : ( - + )}
)} diff --git a/src/components/Views/Topic.tsx b/src/components/Views/Topic.tsx index 08f8642c..8945c5ed 100644 --- a/src/components/Views/Topic.tsx +++ b/src/components/Views/Topic.tsx @@ -5,8 +5,6 @@ import { clsx } from 'clsx' import { For, Show, createEffect, createMemo, createSignal, on, onMount } from 'solid-js' import { useSearchParams } from '@solidjs/router' -import enKeywords from '~/config/locales/en/keywords.json' -import ruKeywords from '~/config/locales/ru/keywords.json' import { useAuthors } from '~/context/authors' import { useFeed } from '~/context/feed' import { useGraphQL } from '~/context/graphql' @@ -16,10 +14,12 @@ import getRandomTopShoutsQuery from '~/graphql/query/core/articles-load-random-t import loadShoutsRandomQuery from '~/graphql/query/core/articles-load-random-topic' import loadAuthorsByQuery from '~/graphql/query/core/authors-load-by' import getTopicFollowersQuery from '~/graphql/query/core/topic-followers' +import enKeywords from '~/intl/locales/en/keywords.json' +import ruKeywords from '~/intl/locales/ru/keywords.json' +import { getImageUrl } from '~/lib/getImageUrl' import { capitalize } from '~/utils/capitalize' -import { getImageUrl } from '~/utils/getImageUrl' import { getUnixtime } from '~/utils/getServerDate' -import { getDescription } from '~/utils/meta' +import { getArticleDescription } from '~/utils/meta' import { restoreScrollPosition, saveScrollPosition } from '~/utils/scroll' import { splitToPages } from '~/utils/splitToPages' import styles from '../../styles/Topic.module.scss' @@ -161,7 +161,7 @@ export const TopicView = (props: Props) => { : getImageUrl('production/image/logo_image.png') const description = () => topic()?.body - ? getDescription(topic()?.body || '') + ? getArticleDescription(topic()?.body || '') : t('The most interesting publications on the topic', { topicName: title() }) return ( diff --git a/src/components/_shared/DropArea/DropArea.tsx b/src/components/_shared/DropArea/DropArea.tsx index 30a5a1e1..33f4114a 100644 --- a/src/components/_shared/DropArea/DropArea.tsx +++ b/src/components/_shared/DropArea/DropArea.tsx @@ -4,8 +4,8 @@ import { JSX, Show, createSignal } from 'solid-js' import { useLocalize } from '~/context/localize' import { useSession } from '~/context/session' -import { handleFileUpload } from '~/utils/handleFileUpload' -import { handleImageUpload } from '~/utils/handleImageUpload' +import { handleFileUpload } from '~/lib/handleFileUpload' +import { handleImageUpload } from '~/lib/handleImageUpload' import { validateFiles } from '~/utils/validateFile' import styles from './DropArea.module.scss' diff --git a/src/components/_shared/Image/Image.tsx b/src/components/_shared/Image/Image.tsx index 0bbbb096..54275906 100644 --- a/src/components/_shared/Image/Image.tsx +++ b/src/components/_shared/Image/Image.tsx @@ -3,7 +3,7 @@ import type { JSX } from 'solid-js' import { Link } from '@solidjs/meta' import { splitProps } from 'solid-js' -import { getImageUrl } from '~/utils/getImageUrl' +import { getImageUrl } from '~/lib/getImageUrl' type Props = JSX.ImgHTMLAttributes & { width: number diff --git a/src/components/_shared/Lightbox/Lightbox.tsx b/src/components/_shared/Lightbox/Lightbox.tsx index 7a8ccc3f..f1c0532e 100644 --- a/src/components/_shared/Lightbox/Lightbox.tsx +++ b/src/components/_shared/Lightbox/Lightbox.tsx @@ -1,7 +1,7 @@ import { clsx } from 'clsx' import { Show, createEffect, createMemo, createSignal, on, onCleanup } from 'solid-js' -import { getImageUrl } from '~/utils/getImageUrl' +import { getImageUrl } from '~/lib/getImageUrl' import { useEscKeyDownHandler } from '~/utils/useEscKeyDownHandler' import { Icon } from '../Icon' diff --git a/src/components/_shared/SolidSwiper/EditorSwiper.tsx b/src/components/_shared/SolidSwiper/EditorSwiper.tsx index 2013ac10..fec1edbc 100644 --- a/src/components/_shared/SolidSwiper/EditorSwiper.tsx +++ b/src/components/_shared/SolidSwiper/EditorSwiper.tsx @@ -6,9 +6,9 @@ import { Manipulation, Navigation, Pagination } from 'swiper/modules' import { useLocalize } from '~/context/localize' import { useSnackbar } from '~/context/ui' +import { getImageUrl } from '~/lib/getImageUrl' +import { handleImageUpload } from '~/lib/handleImageUpload' import { composeMediaItems } from '~/utils/composeMediaItems' -import { getImageUrl } from '~/utils/getImageUrl' -import { handleImageUpload } from '~/utils/handleImageUpload' import { validateFiles } from '~/utils/validateFile' import { DropArea } from '../DropArea' import { Icon } from '../Icon' diff --git a/src/components/_shared/SolidSwiper/ImageSwiper.tsx b/src/components/_shared/SolidSwiper/ImageSwiper.tsx index e96745bd..6e6318b3 100644 --- a/src/components/_shared/SolidSwiper/ImageSwiper.tsx +++ b/src/components/_shared/SolidSwiper/ImageSwiper.tsx @@ -4,8 +4,8 @@ import SwiperCore from 'swiper' import { HashNavigation, Manipulation, Navigation, Pagination } from 'swiper/modules' import { throttle } from 'throttle-debounce' +import { getImageUrl } from '~/lib/getImageUrl' import { MediaItem } from '~/types/mediaitem' -import { getImageUrl } from '~/utils/getImageUrl' import { Icon } from '../Icon' import { Image } from '../Image' import { SwiperRef } from './swiper' diff --git a/src/config/config.ts b/src/config.ts similarity index 100% rename from src/config/config.ts rename to src/config.ts diff --git a/src/context/connect.tsx b/src/context/connect.tsx index 3910828f..5ec3acfa 100644 --- a/src/context/connect.tsx +++ b/src/context/connect.tsx @@ -5,7 +5,7 @@ import { EventSource } from 'extended-eventsource' import { createContext, createEffect, createSignal, on, useContext } from 'solid-js' import { Chat, Message } from '~/graphql/schema/chat.gen' -import { sseUrl } from '../config/config' +import { sseUrl } from '../config' import { useSession } from './session' const RECONNECT_TIMES = 2 diff --git a/src/context/editor.tsx b/src/context/editor.tsx index e7542744..8f93af77 100644 --- a/src/context/editor.tsx +++ b/src/context/editor.tsx @@ -1,15 +1,14 @@ -import type { JSX } from 'solid-js' - import { useMatch, useNavigate } from '@solidjs/router' import { Editor } from '@tiptap/core' +import type { JSX } from 'solid-js' import { Accessor, createContext, createSignal, useContext } from 'solid-js' import { SetStoreFunction, createStore } from 'solid-js/store' import { useSnackbar } from '~/context/ui' import deleteShoutQuery from '~/graphql/mutation/core/article-delete' import updateShoutQuery from '~/graphql/mutation/core/article-update' import { Topic, TopicInput } from '~/graphql/schema/core.gen' +import { slugify } from '~/intl/translit' import { useFeed } from '../context/feed' -import { slugify } from '../utils/slugify' import { useGraphQL } from './graphql' import { useLocalize } from './localize' diff --git a/src/context/feed.tsx b/src/context/feed.tsx index 74b7c4f0..829917a0 100644 --- a/src/context/feed.tsx +++ b/src/context/feed.tsx @@ -12,7 +12,7 @@ import { Shout, Topic } from '~/graphql/schema/core.gen' -import { byStat } from '../utils/sortby' +import { byStat } from '../lib/sortby' import { useGraphQL } from './graphql' export const PRERENDERED_ARTICLES_COUNT = 5 diff --git a/src/context/graphql.tsx b/src/context/graphql.tsx index b5dc458b..d40f83dc 100644 --- a/src/context/graphql.tsx +++ b/src/context/graphql.tsx @@ -1,7 +1,7 @@ import { Client, ClientOptions, cacheExchange, createClient, fetchExchange } from '@urql/core' import { createContext, createEffect, createSignal, on, useContext } from 'solid-js' import { JSX } from 'solid-js/jsx-runtime' -import { chatApiUrl, coreApiUrl } from '../config/config' +import { chatApiUrl, coreApiUrl } from '../config' import { useSession } from './session' type GraphQLClientContextType = Record diff --git a/src/context/inbox.tsx b/src/context/inbox.tsx index c79f60da..b05817ee 100644 --- a/src/context/inbox.tsx +++ b/src/context/inbox.tsx @@ -1,6 +1,6 @@ import type { Accessor, JSX } from 'solid-js' import { createContext, createSignal, useContext } from 'solid-js' -import { chatApiUrl } from '~/config/config' +import { chatApiUrl } from '~/config' import { useGraphQL } from '~/context/graphql' import createChatMutation from '~/graphql/mutation/chat/chat-create' import createMessageMutation from '~/graphql/mutation/chat/chat-message-create' diff --git a/src/context/localize.tsx b/src/context/localize.tsx index a95f4196..b2f4232e 100644 --- a/src/context/localize.tsx +++ b/src/context/localize.tsx @@ -10,7 +10,7 @@ import { onMount, useContext } from 'solid-js' -import { TimeAgo, type i18n, i18next, i18nextInit } from '~/utils/i18next' +import { TimeAgo, type i18n, i18next, i18nextInit } from '~/intl/i18next' i18nextInit() @@ -87,7 +87,7 @@ export const LocalizeProvider = (props: { children: JSX.Element }) => { try { return i18next.t(...args) } catch (_) { - return args?.length > 0 ? args[0] as string : '' + return args?.length > 0 ? (args[0] as string) : '' } }) as i18n['t'], lang, diff --git a/src/context/session.tsx b/src/context/session.tsx index 276dc499..12332a4c 100644 --- a/src/context/session.tsx +++ b/src/context/session.tsx @@ -25,7 +25,7 @@ import { useContext } from 'solid-js' import { type AuthModalSource, useSnackbar, useUI } from '~/context/ui' -import { authApiUrl } from '../config/config' +import { authApiUrl } from '../config' import { useLocalize } from './localize' const defaultConfig: ConfigType = { diff --git a/src/context/topics.tsx b/src/context/topics.tsx index 22fcff9e..3fa077a1 100644 --- a/src/context/topics.tsx +++ b/src/context/topics.tsx @@ -12,8 +12,8 @@ import { } from 'solid-js' import { loadTopics } from '~/graphql/api/public' import { Topic } from '~/graphql/schema/core.gen' -import { getRandomTopicsFromArray } from '~/utils/getRandomTopicsFromArray' -import { byTopicStatDesc } from '../utils/sortby' +import { getRandomTopicsFromArray } from '~/lib/getRandomTopicsFromArray' +import { byTopicStatDesc } from '../lib/sortby' type TopicsContextType = { topicEntities: Accessor<{ [topicSlug: string]: Topic }> diff --git a/src/config/translit.json b/src/intl/abc-translit.json similarity index 100% rename from src/config/translit.json rename to src/intl/abc-translit.json diff --git a/src/utils/i18next.ts b/src/intl/i18next.ts similarity index 91% rename from src/utils/i18next.ts rename to src/intl/i18next.ts index a4ae4e80..64080a7e 100644 --- a/src/utils/i18next.ts +++ b/src/intl/i18next.ts @@ -4,8 +4,8 @@ import ICU from 'i18next-icu' import TimeAgo from 'javascript-time-ago' import enTime from 'javascript-time-ago/locale/en' import ruTime from 'javascript-time-ago/locale/ru' -import en from '~/config/locales/en/translation.json' -import ru from '~/config/locales/ru/translation.json' +import en from '~/intl/locales/en/translation.json' +import ru from '~/intl/locales/ru/translation.json' TimeAgo.addLocale(enTime) TimeAgo.addLocale(ruTime) diff --git a/src/config/locales/en/keywords.json b/src/intl/locales/en/keywords.json similarity index 100% rename from src/config/locales/en/keywords.json rename to src/intl/locales/en/keywords.json diff --git a/src/config/locales/en/translation.json b/src/intl/locales/en/translation.json similarity index 100% rename from src/config/locales/en/translation.json rename to src/intl/locales/en/translation.json diff --git a/src/config/locales/ru/keywords.json b/src/intl/locales/ru/keywords.json similarity index 100% rename from src/config/locales/ru/keywords.json rename to src/intl/locales/ru/keywords.json diff --git a/src/config/locales/ru/translation.json b/src/intl/locales/ru/translation.json similarity index 100% rename from src/config/locales/ru/translation.json rename to src/intl/locales/ru/translation.json diff --git a/src/utils/translate.ts b/src/intl/translate.ts similarity index 93% rename from src/utils/translate.ts rename to src/intl/translate.ts index f2a60398..5501af9d 100644 --- a/src/utils/translate.ts +++ b/src/intl/translate.ts @@ -1,6 +1,6 @@ import { Author } from '~/graphql/schema/core.gen' -import { capitalize } from './capitalize' -import { translit } from './ru2en' +import { capitalize } from '~/utils/capitalize' +import { translit } from './translit' export const isCyrillic = (s: string): boolean => { const cyrillicRegex = /[\u0400-\u04FF]/ // Range for Cyrillic characters diff --git a/src/utils/ru2en.ts b/src/intl/translit.ts similarity index 58% rename from src/utils/ru2en.ts rename to src/intl/translit.ts index 41b7afe4..ef34487b 100644 --- a/src/utils/ru2en.ts +++ b/src/intl/translit.ts @@ -1,4 +1,4 @@ -import translitConfig from '../config/translit.json' +import translitConfig from './abc-translit.json' const ru2en: { [key: string]: string } = translitConfig @@ -15,3 +15,9 @@ export const translit = (str: string) => { return [...str].map((c) => ru2en[c] || c).join('') } + +export const slugify = (text: string) => { + return translit(text.toLowerCase()) + .replaceAll(' ', '-') + .replaceAll(/[^\da-z]/g, '') +} diff --git a/src/utils/dummyFilter.ts b/src/lib/dummyFilter.ts similarity index 92% rename from src/utils/dummyFilter.ts rename to src/lib/dummyFilter.ts index 844a136e..e54c5a43 100644 --- a/src/utils/dummyFilter.ts +++ b/src/lib/dummyFilter.ts @@ -1,7 +1,5 @@ import type { Author, Topic } from '~/graphql/schema/core.gen' - -import { isAuthor } from './isAuthor' -import { translit } from './ru2en' +import { translit } from '../intl/translit' const prepareQuery = (searchQuery: string, lang: string) => { const q = searchQuery.toLowerCase() @@ -33,7 +31,7 @@ export const dummyFilter = ( return stringMatches(item?.title || '', q, lang) } - if (isAuthor(item)) { + if ('name' in item) { return stringMatches(item?.name || '', q, lang) || (item.bio && stringMatches(item.bio, q, lang)) } diff --git a/src/utils/getImageUrl.ts b/src/lib/getImageUrl.ts similarity index 97% rename from src/utils/getImageUrl.ts rename to src/lib/getImageUrl.ts index 252b9732..2a350bd3 100644 --- a/src/utils/getImageUrl.ts +++ b/src/lib/getImageUrl.ts @@ -1,4 +1,4 @@ -import { cdnUrl, thumborUrl } from '../config/config' +import { cdnUrl, thumborUrl } from '../config' const URL_CONFIG = { cdnUrl: cdnUrl, diff --git a/src/utils/getRandomTopicsFromArray.ts b/src/lib/getRandomTopicsFromArray.ts similarity index 100% rename from src/utils/getRandomTopicsFromArray.ts rename to src/lib/getRandomTopicsFromArray.ts diff --git a/src/utils/groupby.ts b/src/lib/groupby.ts similarity index 100% rename from src/utils/groupby.ts rename to src/lib/groupby.ts diff --git a/src/utils/handleFileUpload.ts b/src/lib/handleFileUpload.ts similarity index 90% rename from src/utils/handleFileUpload.ts rename to src/lib/handleFileUpload.ts index b7297aef..81622fa7 100644 --- a/src/utils/handleFileUpload.ts +++ b/src/lib/handleFileUpload.ts @@ -1,5 +1,5 @@ import { UploadFile } from '@solid-primitives/upload' -import { coreApiUrl } from '../config/config' +import { coreApiUrl } from '../config' const apiUrl = `${coreApiUrl}/upload` diff --git a/src/utils/handleImageUpload.ts b/src/lib/handleImageUpload.ts similarity index 96% rename from src/utils/handleImageUpload.ts rename to src/lib/handleImageUpload.ts index 1791fc05..5eef3717 100644 --- a/src/utils/handleImageUpload.ts +++ b/src/lib/handleImageUpload.ts @@ -1,5 +1,5 @@ import { UploadFile } from '@solid-primitives/upload' -import { thumborUrl } from '../config/config' +import { thumborUrl } from '../config' export const handleImageUpload = async (uploadFile: UploadFile, token: string) => { const formData = new FormData() diff --git a/src/utils/profileSocialLinks.ts b/src/lib/profileSocialLinks.ts similarity index 100% rename from src/utils/profileSocialLinks.ts rename to src/lib/profileSocialLinks.ts diff --git a/src/utils/sortby.ts b/src/lib/sortby.ts similarity index 100% rename from src/utils/sortby.ts rename to src/lib/sortby.ts diff --git a/src/routes/(home).tsx b/src/routes/(home).tsx index 3b58922f..a0a37bfb 100644 --- a/src/routes/(home).tsx +++ b/src/routes/(home).tsx @@ -2,8 +2,8 @@ import { type RouteDefinition, type RouteSectionProps, createAsync } from '@soli import { Show, Suspense, createSignal, onMount } from 'solid-js' import { loadShouts } from '~/graphql/api/public' import { LoadShoutsOptions } from '~/graphql/schema/core.gen' +import { byStat } from '~/lib/sortby' import { restoreScrollPosition, saveScrollPosition } from '~/utils/scroll' -import { byStat } from '~/utils/sortby' import { HomeView, HomeViewProps } from '../components/Views/Home' import { Loading } from '../components/_shared/Loading' import { PageLayout } from '../components/_shared/PageLayout' diff --git a/src/routes/(static)/guide/(guide).tsx b/src/routes/(static)/guide/(guide).tsx index faa351c9..73a62a04 100644 --- a/src/routes/(static)/guide/(guide).tsx +++ b/src/routes/(static)/guide/(guide).tsx @@ -1,10 +1,10 @@ import { Meta } from '@solidjs/meta' import { createMemo } from 'solid-js' import { StaticPage } from '~/components/Views/StaticPage' -import enKeywords from '~/config/locales/en/keywords.json' -import ruKeywords from '~/config/locales/ru/keywords.json' import { useLocalize } from '~/context/localize' -import { getImageUrl } from '~/utils/getImageUrl' +import enKeywords from '~/intl/locales/en/keywords.json' +import ruKeywords from '~/intl/locales/ru/keywords.json' +import { getImageUrl } from '~/lib/getImageUrl' export default () => { const { t, lang } = useLocalize() diff --git a/src/routes/(static)/guide/debate.tsx b/src/routes/(static)/guide/debate.tsx index e553c859..03c15c14 100644 --- a/src/routes/(static)/guide/debate.tsx +++ b/src/routes/(static)/guide/debate.tsx @@ -1,7 +1,7 @@ import { Meta } from '@solidjs/meta' import { StaticPage } from '~/components/Views/StaticPage' import { useLocalize } from '~/context/localize' -import { getImageUrl } from '~/utils/getImageUrl' +import { getImageUrl } from '~/lib/getImageUrl' export const DiscussionRulesPage = () => { const { t } = useLocalize() diff --git a/src/routes/(static)/guide/principles.tsx b/src/routes/(static)/guide/principles.tsx index 1ed77893..b2ef230f 100644 --- a/src/routes/(static)/guide/principles.tsx +++ b/src/routes/(static)/guide/principles.tsx @@ -1,10 +1,10 @@ import { Meta } from '@solidjs/meta' import { createMemo } from 'solid-js' import { StaticPage } from '~/components/Views/StaticPage' -import enKeywords from '~/config/locales/en/keywords.json' -import ruKeywords from '~/config/locales/ru/keywords.json' import { useLocalize } from '~/context/localize' -import { getImageUrl } from '~/utils/getImageUrl' +import enKeywords from '~/intl/locales/en/keywords.json' +import ruKeywords from '~/intl/locales/ru/keywords.json' +import { getImageUrl } from '~/lib/getImageUrl' export const PrinciplesPage = () => { const { t, lang } = useLocalize() diff --git a/src/routes/(static)/manifest.tsx b/src/routes/(static)/manifest.tsx index 7f2bc85f..2ccafec0 100644 --- a/src/routes/(static)/manifest.tsx +++ b/src/routes/(static)/manifest.tsx @@ -5,7 +5,7 @@ import Opener from '~/components/Nav/Modal/Opener' import { StaticPage } from '~/components/Views/StaticPage' import { Newsletter } from '~/components/_shared/Newsletter' import { useLocalize } from '~/context/localize' -import { getImageUrl } from '~/utils/getImageUrl' +import { getImageUrl } from '~/lib/getImageUrl' export const ManifestPage = () => { const { t } = useLocalize() diff --git a/src/routes/(static)/partners.tsx b/src/routes/(static)/partners.tsx index 5d7d6586..5cd92d32 100644 --- a/src/routes/(static)/partners.tsx +++ b/src/routes/(static)/partners.tsx @@ -1,7 +1,7 @@ import { Meta } from '@solidjs/meta' import { StaticPage } from '~/components/Views/StaticPage' import { useLocalize } from '~/context/localize' -import { getImageUrl } from '~/utils/getImageUrl' +import { getImageUrl } from '~/lib/getImageUrl' export const PartnersPage = () => { const { t } = useLocalize() diff --git a/src/routes/(static)/support/(support).tsx b/src/routes/(static)/support/(support).tsx index d5032866..9d92fc94 100644 --- a/src/routes/(static)/support/(support).tsx +++ b/src/routes/(static)/support/(support).tsx @@ -2,7 +2,7 @@ import { Meta } from '@solidjs/meta' import { Donate } from '~/components/Discours/Donate' import { StaticPage } from '~/components/Views/StaticPage' import { useLocalize } from '~/context/localize' -import { getImageUrl } from '~/utils/getImageUrl' +import { getImageUrl } from '~/lib/getImageUrl' export const SupportPage = () => { const { t } = useLocalize() diff --git a/src/routes/(static)/support/thanks.tsx b/src/routes/(static)/support/thanks.tsx index db526ccf..de884b1c 100644 --- a/src/routes/(static)/support/thanks.tsx +++ b/src/routes/(static)/support/thanks.tsx @@ -1,7 +1,7 @@ import { Meta } from '@solidjs/meta' import { StaticPage } from '~/components/Views/StaticPage' import { useLocalize } from '~/context/localize' -import { getImageUrl } from '~/utils/getImageUrl' +import { getImageUrl } from '~/lib/getImageUrl' export const ThanksPage = () => { const { t } = useLocalize() diff --git a/src/routes/(static)/terms.tsx b/src/routes/(static)/terms.tsx index 8f6c0759..477a72ee 100644 --- a/src/routes/(static)/terms.tsx +++ b/src/routes/(static)/terms.tsx @@ -1,7 +1,7 @@ import { Meta } from '@solidjs/meta' import { StaticPage } from '~/components/Views/StaticPage' import { useLocalize } from '~/context/localize' -import { getImageUrl } from '~/utils/getImageUrl' +import { getImageUrl } from '~/lib/getImageUrl' export const TermsOfUsePage = () => { const { t } = useLocalize() diff --git a/src/routes/[slug].tsx b/src/routes/[slug].tsx index 57f8e5af..c4769332 100644 --- a/src/routes/[slug].tsx +++ b/src/routes/[slug].tsx @@ -2,7 +2,7 @@ import { RouteSectionProps, createAsync, useLocation, useParams } from '@solidjs import { ErrorBoundary, Suspense, createMemo, createReaction, createSignal, onMount } from 'solid-js' import { FourOuFourView } from '~/components/Views/FourOuFour' import { Loading } from '~/components/_shared/Loading' -import { gaIdentity } from '~/config/config' +import { gaIdentity } from '~/config' import { useLocalize } from '~/context/localize' import { getShout } from '~/graphql/api/public' import type { Shout } from '~/graphql/schema/core.gen' diff --git a/src/routes/edit/new.tsx b/src/routes/edit/new.tsx index b43fb408..eeb68755 100644 --- a/src/routes/edit/new.tsx +++ b/src/routes/edit/new.tsx @@ -6,14 +6,14 @@ import { AuthGuard } from '~/components/AuthGuard' import { Button } from '~/components/_shared/Button' import { Icon } from '~/components/_shared/Icon' import { PageLayout } from '~/components/_shared/PageLayout' -import enKeywords from '~/config/locales/en/keywords.json' -import ruKeywords from '~/config/locales/ru/keywords.json' import { useGraphQL } from '~/context/graphql' import { useLocalize } from '~/context/localize' import createShoutMutation from '~/graphql/mutation/core/article-create' +import enKeywords from '~/intl/locales/en/keywords.json' +import ruKeywords from '~/intl/locales/ru/keywords.json' +import { getImageUrl } from '~/lib/getImageUrl' import styles from '~/styles/Create.module.scss' import { LayoutType } from '~/types/common' -import { getImageUrl } from '~/utils/getImageUrl' export default () => { const { t, lang } = useLocalize() diff --git a/src/utils/composeMediaItems.ts b/src/utils/composeMediaItems.ts index 44865cd1..cf49c51e 100644 --- a/src/utils/composeMediaItems.ts +++ b/src/utils/composeMediaItems.ts @@ -1,4 +1,4 @@ -const removeFileExtension = (fileName: string) => { +const removeMediaFileExtension = (fileName: string) => { return fileName.replace(/\.(wav|flac|mp3|aac|jpg|jpeg|png|gif)$/i, '') } @@ -10,7 +10,7 @@ export const composeMediaItems = ( return { url: fileData.url, source: '', - title: fileData.originalFilename ? removeFileExtension(fileData.originalFilename) : '', + title: fileData.originalFilename ? removeMediaFileExtension(fileData.originalFilename) : '', body: '', ...optionalParams } diff --git a/src/utils/getServerRoute.ts b/src/utils/getServerRoute.ts deleted file mode 100644 index dc666b5c..00000000 --- a/src/utils/getServerRoute.ts +++ /dev/null @@ -1,4 +0,0 @@ -// /:slug -> /@slug -// https://vite-plugin-ssr.com/routing -// https://www.npmjs.com/package/@nanostores/router -export const getServerRoute = (clientRoute: string) => clientRoute.replaceAll(':', '@') diff --git a/src/utils/isAuthor.ts b/src/utils/isAuthor.ts deleted file mode 100644 index 301ec7a8..00000000 --- a/src/utils/isAuthor.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Author, Topic } from '~/graphql/schema/core.gen' - -export const isAuthor = (value: Author | Topic): value is Author => { - return 'name' in value -} diff --git a/src/utils/meta.ts b/src/utils/meta.ts index b444912d..46a807fa 100644 --- a/src/utils/meta.ts +++ b/src/utils/meta.ts @@ -2,7 +2,7 @@ import { Shout } from '~/graphql/schema/core.gen' const MAX_DESCRIPTION_LENGTH = 150 -export const getDescription = (body: string): string => { +export const getArticleDescription = (body: string): string => { if (!body) { return '' } @@ -20,6 +20,6 @@ export const getDescription = (body: string): string => { return description.trim() } -export const getKeywords = (shout: Shout): string => { +export const getArticleKeywords = (shout: Shout): string => { return (shout.topics || [])?.map((topic) => topic?.title).join(', ') } diff --git a/src/utils/slugify.ts b/src/utils/slugify.ts deleted file mode 100644 index 36e29e54..00000000 --- a/src/utils/slugify.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { translit } from './ru2en' - -export const slugify = (text: string) => { - return translit(text.toLowerCase()) - .replaceAll(' ', '-') - .replaceAll(/[^\da-z]/g, '') -}