Merge branch 'feature/notifier' into feature/rating

This commit is contained in:
Untone 2024-03-04 16:29:30 +03:00
commit dbec93aee1
6 changed files with 13 additions and 30 deletions

View File

@ -25,20 +25,6 @@ generates:
useTypeImports: true useTypeImports: true
outputPath: './src/graphql/types/core.gen.ts' outputPath: './src/graphql/types/core.gen.ts'
# namingConvention: lodash#pascalCase # namingConvention: lodash#pascalCase
# Generate types for notifier
src/graphql/schema/notifier.gen.ts:
schema: 'https://notifier.discours.io'
plugins:
- 'typescript'
- 'typescript-operations'
- 'typescript-urql'
config:
skipTypename: true
useTypeImports: true
outputPath: './src/graphql/types/notifier.gen.ts'
# namingConvention: lodash#pascalCase
hooks: hooks:
afterAllFileWrite: afterAllFileWrite:
- prettier --ignore-path .gitignore --write --plugin-search-dir=. src/graphql/schema/*.gen.ts - prettier --ignore-path .gitignore --write --plugin-search-dir=. src/graphql/schema/*.gen.ts

View File

@ -4,7 +4,7 @@ import { For, Show } from 'solid-js'
import { useLocalize } from '../../../context/localize' import { useLocalize } from '../../../context/localize'
import { useNotifications } from '../../../context/notifications' import { useNotifications } from '../../../context/notifications'
import { NotificationGroup as Group } from '../../../graphql/schema/notifier.gen' import { NotificationGroup as Group } from '../../../graphql/schema/core.gen'
import { router, useRouter } from '../../../stores/router' import { router, useRouter } from '../../../stores/router'
import { ArticlePageSearchParams } from '../../Article/FullArticle' import { ArticlePageSearchParams } from '../../Article/FullArticle'
import { GroupAvatar } from '../../_shared/GroupAvatar' import { GroupAvatar } from '../../_shared/GroupAvatar'
@ -39,8 +39,8 @@ const getTitle = (title: string) => {
return shoutTitle return shoutTitle
} }
const reactionsCaption = (threadId: string) => const threadCaption = (threadId: string) =>
threadId.includes('::') ? 'Some new replies to your comment' : 'Some new comments to your publication' threadId.includes(':') ? 'Some new replies to your comment' : 'Some new comments to your publication'
export const NotificationGroup = (props: NotificationGroupProps) => { export const NotificationGroup = (props: NotificationGroupProps) => {
const { t, formatTime, formatDate } = useLocalize() const { t, formatTime, formatDate } = useLocalize()
@ -63,12 +63,12 @@ export const NotificationGroup = (props: NotificationGroupProps) => {
return ( return (
<> <>
<For each={props.notifications}> <For each={props.notifications}>
{(n: Group) => ( {(n: Group, index) => (
<> <>
{t(reactionsCaption(n.id), { commentsCount: n.reactions.length })}{' '} {t(threadCaption(n.thread), { commentsCount: n.reactions.length })}{' '}
<div <div
class={clsx(styles.NotificationView, props.class, { [styles.seen]: n.seen })} class={clsx(styles.NotificationView, props.class, { [styles.seen]: n.seen })}
onClick={(_) => handleClick(n.id)} onClick={(_) => handleClick(n.thread)}
> >
<div class={styles.userpic}> <div class={styles.userpic}>
<GroupAvatar authors={n.authors} /> <GroupAvatar authors={n.authors} />

View File

@ -2,14 +2,13 @@ import { clsx } from 'clsx'
import { For } from 'solid-js' import { For } from 'solid-js'
import { Author } from '../../../graphql/schema/core.gen' import { Author } from '../../../graphql/schema/core.gen'
import { NotificationAuthor } from '../../../graphql/schema/notifier.gen'
import { Userpic } from '../../Author/Userpic' import { Userpic } from '../../Author/Userpic'
import styles from './GroupAvatar.module.scss' import styles from './GroupAvatar.module.scss'
type Props = { type Props = {
class?: string class?: string
authors: Author[] | NotificationAuthor[] authors: Author[]
} }
export const GroupAvatar = (props: Props) => { export const GroupAvatar = (props: Props) => {

View File

@ -51,7 +51,7 @@ export const NotificationsProvider = (props: { children: JSX.Element }) => {
const unread = notificationsResult?.unread || 0 const unread = notificationsResult?.unread || 0
const newGroupsEntries = groups.reduce((acc, group: NotificationGroup) => { const newGroupsEntries = groups.reduce((acc, group: NotificationGroup) => {
acc[group.id] = group acc[group.thread] = group
return acc return acc
}, {}) }, {})

View File

@ -215,7 +215,6 @@ export const SessionProvider = (props: {
if (token) { if (token) {
if (!inboxClient.private) { if (!inboxClient.private) {
apiClient.connect(token) apiClient.connect(token)
notifierClient.connect(token)
inboxClient.connect(token) inboxClient.connect(token)
} }
if (!author()) loadAuthor() if (!author()) loadAuthor()

View File

@ -4,15 +4,14 @@ import markSeenAfterMutation from '../mutation/notifier/mark-seen-after'
import markThreadSeenMutation from '../mutation/notifier/mark-seen-thread' import markThreadSeenMutation from '../mutation/notifier/mark-seen-thread'
import loadNotifications from '../query/notifier/notifications-load' import loadNotifications from '../query/notifier/notifications-load'
import { import {
MutationMark_Seen_AfterArgs, MutationNotifications_Seen_AfterArgs,
NotificationsResult, NotificationsResult,
QueryLoad_NotificationsArgs, QueryLoad_NotificationsArgs,
} from '../schema/notifier.gen' } from '../schema/core.gen'
import { apiClient } from './core'
export const notifierClient = { export const notifierClient = {
private: null, private: apiClient.private,
connect: (token: string) => (notifierClient.private = createGraphQLClient('notifier', token)),
getNotifications: async (params: QueryLoad_NotificationsArgs): Promise<NotificationsResult> => { getNotifications: async (params: QueryLoad_NotificationsArgs): Promise<NotificationsResult> => {
const resp = await notifierClient.private.query(loadNotifications, params).toPromise() const resp = await notifierClient.private.query(loadNotifications, params).toPromise()
return resp.data?.load_notifications return resp.data?.load_notifications
@ -23,7 +22,7 @@ export const notifierClient = {
await notifierClient.private.mutation(markSeenMutation, { notification_id }).toPromise() await notifierClient.private.mutation(markSeenMutation, { notification_id }).toPromise()
}, },
markSeenAfter: async (options: MutationMark_Seen_AfterArgs): Promise<void> => { markSeenAfter: async (options: MutationNotifications_Seen_AfterArgs): Promise<void> => {
// call when 'mark all as seen' cliecked // call when 'mark all as seen' cliecked
await notifierClient.private.mutation(markSeenAfterMutation, options).toPromise() await notifierClient.private.mutation(markSeenAfterMutation, options).toPromise()
}, },