@webinex/chatify 2.0.0-alpha10 → 2.0.0-alpha13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/{Chatify-DGRV4QKP.js → Chatify-CwAfN1wu.js} +310 -117
  2. package/dist/Chatify-CwAfN1wu.js.map +1 -0
  3. package/dist/Chatify.css +54 -7
  4. package/dist/audit.js +2 -2
  5. package/dist/audit.js.map +1 -1
  6. package/dist/index.js +82 -75
  7. package/dist/types/audit/auditApi.d.ts +5 -1
  8. package/dist/types/core/api/api.d.ts +57 -17206
  9. package/dist/types/core/client.d.ts +4 -1
  10. package/dist/types/ui/ChatGroup/AutoReply/AutoReplyButton.d.ts +1 -0
  11. package/dist/types/ui/ChatGroup/AutoReply/AutoReplyForm.d.ts +12 -0
  12. package/dist/types/ui/ChatGroup/AutoReply/AutoReplyPanel.d.ts +1 -0
  13. package/dist/types/ui/ChatGroup/AutoReply/AutoReplyPeriodInput.d.ts +4 -0
  14. package/dist/types/ui/ChatGroup/AutoReply/AutoReplyTextInput.d.ts +4 -0
  15. package/dist/types/ui/ChatGroup/AutoReply/index.d.ts +17 -0
  16. package/dist/types/ui/ChatGroup/ChatGroupContext.d.ts +2 -1
  17. package/dist/types/ui/ChatGroup/ChatGroupPanel.d.ts +2 -1
  18. package/dist/types/ui/ChatGroup/Layout/ChatGroupActions.d.ts +1 -0
  19. package/dist/types/ui/ChatGroup/Layout/index.d.ts +3 -0
  20. package/dist/types/ui/ChatGroup/index.d.ts +1 -0
  21. package/dist/types/ui/common/Icon.d.ts +1 -0
  22. package/dist/types/ui/localizer.d.ts +15 -0
  23. package/package.json +1 -1
  24. package/src/audit/AuditSearch.tsx +1 -1
  25. package/src/core/api/api.ts +24 -4
  26. package/src/core/client.ts +13 -2
  27. package/src/styles/index.scss +65 -6
  28. package/src/ui/Chat/Members/ChatMembersPanel.tsx +2 -2
  29. package/src/ui/ChatGroup/AutoReply/AutoReplyButton.tsx +21 -0
  30. package/src/ui/ChatGroup/AutoReply/AutoReplyForm.tsx +50 -0
  31. package/src/ui/ChatGroup/AutoReply/AutoReplyPanel.tsx +94 -0
  32. package/src/ui/ChatGroup/AutoReply/AutoReplyPeriodInput.tsx +22 -0
  33. package/src/ui/ChatGroup/AutoReply/AutoReplyTextInput.tsx +22 -0
  34. package/src/ui/ChatGroup/AutoReply/index.ts +19 -0
  35. package/src/ui/ChatGroup/ChatGroupContext.tsx +12 -1
  36. package/src/ui/ChatGroup/ChatGroupPanel.tsx +2 -0
  37. package/src/ui/ChatGroup/Create/CreateChatMemberInput.tsx +1 -1
  38. package/src/ui/ChatGroup/Layout/ChatGroupActions.tsx +15 -0
  39. package/src/ui/ChatGroup/Layout/ChatGroupAside.tsx +2 -2
  40. package/src/ui/ChatGroup/Layout/ChatGroupMain.tsx +2 -0
  41. package/src/ui/ChatGroup/Layout/index.ts +3 -0
  42. package/src/ui/ChatGroup/index.ts +1 -0
  43. package/src/ui/common/Icon.tsx +2 -0
  44. package/src/ui/localizer.tsx +29 -0
  45. package/dist/Chatify-DGRV4QKP.js.map +0 -1
package/dist/audit.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"audit.js","sources":["../src/audit/AuditSearchValue.tsx","../src/audit/AuditSearch.tsx","../src/audit/auditApi.tsx","../src/audit/AuditChatList.tsx","../src/audit/AuditConversationPanel.tsx","../src/audit/AuditPanel.tsx","../src/audit/index.tsx"],"sourcesContent":["import { GetAuditChatListQueryArgs } from './auditApi';\n\nexport interface AuditSearchOption {\n label: JSX.Element;\n value: string;\n}\n\nconst MEMBER_PREFIX = 'member://';\nconst TEXT_PREFIX = 'text://';\n\nfunction queryOf(\n values: string[],\n): Pick<GetAuditChatListQueryArgs, 'containsOneOfMembers' | 'searchString'> | null {\n let containsOneOfMembers: string[] | null = values\n .filter(AuditSearchUtil.isSearchByMember)\n .map((v) => v.slice(MEMBER_PREFIX.length));\n\n containsOneOfMembers = containsOneOfMembers.length > 0 ? containsOneOfMembers : null;\n\n const searchStringValues = values\n .filter(AuditSearchUtil.isSearchByText)\n .map((v) => v.slice(TEXT_PREFIX.length));\n\n const searchString = searchStringValues.length > 0 ? searchStringValues.join(' ') : null;\n\n if (!containsOneOfMembers && !searchString) {\n return null;\n }\n\n return {\n containsOneOfMembers,\n searchString,\n };\n}\n\nexport const AuditSearchUtil = Object.freeze({\n MEMBER_PREFIX,\n TEXT_PREFIX,\n isSearchByMember: (value: string) => value.startsWith(MEMBER_PREFIX),\n isSearchByText: (value: string) => value.startsWith(TEXT_PREFIX),\n queryOf,\n});\n","import { Account, chatifyApi, customize, Localizer, useLocalizer } from '@webinex/chatify';\nimport { Select } from 'antd';\nimport classNames from 'classnames';\nimport { useEffect, useMemo, useState } from 'react';\nimport { AuditSearchUtil } from './AuditSearchValue';\n\nexport interface AuditSearchProps {\n className?: string;\n onSearch?: (values: string[]) => void;\n}\n\ntype Value = { label: JSX.Element; value: string };\n\nfunction* mapOptions(localizer: Localizer, accounts: Account[] | undefined, searchValue: string) {\n if (searchValue.length === 0) return;\n\n if (searchValue.length > 0)\n yield {\n label: localizer.audit.textSearchOption(searchValue),\n value: AuditSearchUtil.TEXT_PREFIX + searchValue,\n };\n\n for (const account of accounts?.filter((x) =>\n x.name.toLocaleLowerCase().includes(searchValue.toLocaleLowerCase()),\n ) ?? []) {\n yield {\n label: localizer.audit.memberSearchOption(account),\n value: AuditSearchUtil.MEMBER_PREFIX + account.id,\n };\n }\n}\n\nfunction useOptions(accounts: Account[] | undefined, searchValue: string) {\n const localizer = useLocalizer();\n return useMemo(\n () => Array.from(mapOptions(localizer, accounts, searchValue)),\n [localizer, accounts, searchValue],\n );\n}\n\nexport const AuditSearch = customize('AuditSearch', (props: AuditSearchProps) => {\n const { className, onSearch } = props;\n const [searchValue, setSearchValue] = useState('');\n const [values, setValues] = useState<Value[]>([]);\n const { data: accounts, isLoading } = chatifyApi.useGetAccountListQuery();\n const options = useOptions(accounts, searchValue);\n const localizer = useLocalizer();\n\n useEffect(() => {\n onSearch?.(values.map((x) => x.value));\n }, [onSearch, values]);\n\n return (\n <div className={classNames('wxchtf-search', className)}>\n <Select<string[], Value>\n allowClear\n className=\"wxchtf-search-select\"\n mode=\"multiple\"\n value={values.map((x) => x.value)}\n options={options.length > 0 ? options : values}\n searchValue={searchValue}\n onSearch={setSearchValue}\n onSelect={(_, option) => {\n setValues((prev) => {\n if (AuditSearchUtil.isSearchByText(option.value)) {\n prev = prev.filter((x) => !AuditSearchUtil.isSearchByText(x.value));\n }\n\n return [...prev, option];\n });\n setSearchValue('');\n }}\n onDeselect={(_, option) => {\n setValues((prev) => prev.filter((x) => x.value !== option.value));\n setSearchValue('');\n }}\n filterOption={false}\n onDropdownVisibleChange={() => setSearchValue('')}\n disabled={isLoading}\n loading={isLoading}\n placeholder={localizer.audit.searchPlaceholder}\n notFoundContent={\n searchValue.length === 0 ? localizer.audit.noInputBlurb : localizer.audit.noChatFound\n }\n size=\"large\"\n />\n </div>\n );\n});\n","import { PagingRule } from '@webinex/asky';\nimport { Account, chatifyApi, File, ListSegment, Optional } from '@webinex/chatify';\n\nexport interface GetAuditChatListQueryArgs {\n containsOneOfMembers: string[] | null;\n searchString: string | null;\n pagingRule: PagingRule | null;\n includeTotal: boolean | null;\n}\n\nexport interface AuditChatResponse {\n id: string;\n workspaceId: string;\n name: string;\n createdAt: string;\n createdById: string;\n lastMessage: Optional<AuditChatMessage>;\n}\n\nexport interface AuditChatMessage {\n id: string;\n authorId: string;\n sentAt: string;\n text: string | null;\n files: File[];\n sentBy: Account;\n}\n\nexport interface AuditChatListItem {\n id: string;\n workspaceId: string;\n name: string;\n createdAt: string;\n createdById: string;\n lastMessage: AuditChatMessage;\n}\n\nexport interface AuditChat {\n id: string;\n workspaceId: string;\n name: string;\n createdAt: string;\n createdById: string;\n}\n\nfunction qs(params: Record<string, any>): string {\n const query = new URLSearchParams();\n Object.entries(params).forEach(([key, value]) => {\n if (value !== null && value !== undefined) {\n query.append(key, typeof value === 'string' ? value : JSON.stringify(value));\n }\n });\n\n return query.toString();\n}\n\nexport const auditApi = chatifyApi.injectEndpoints({\n endpoints: (build) => ({\n getAuditChatList: build.query<ListSegment<AuditChatListItem>, GetAuditChatListQueryArgs>({\n queryFn: async (args) =>\n chatifyApi.settings.client.axios\n .get<ListSegment<AuditChatResponse>>(`audit/chats?${qs({ query: args })}`)\n .then(({ data }) => ({\n data: {\n total: data.total,\n items: data.items.map(\n ({ lastMessage, ...x }): AuditChatListItem => ({ ...x, lastMessage: lastMessage.value! }),\n ),\n },\n }))\n .catch((error) => ({ error })),\n providesTags: ['chat', 'message'],\n }),\n\n getAuditChat: build.query<AuditChat, { id: string }>({\n queryFn: async (args) =>\n chatifyApi.settings.client.axios\n .get(`audit/chats/${encodeURIComponent(args.id)}`)\n .then(({ data }) => ({ data }))\n .catch((error) => ({ error })),\n providesTags: ['chat'],\n }),\n\n getAuditChatMessagesInfinite: build.infiniteQuery<\n ListSegment<AuditChatMessage>,\n { id: string },\n { skip: number; take: number }\n >({\n queryFn: async (args) => {\n const {\n pageParam,\n queryArg: { id },\n } = args;\n\n return chatifyApi.settings.client.axios\n .get(`audit/messages?${qs({ query: { chatId: id, pagingRule: pageParam, includeTotal: true } })}`)\n .then(({ data }) => ({ data }))\n .catch((error) => ({ error }));\n },\n infiniteQueryOptions: {\n initialPageParam: { skip: 0, take: 20 },\n getNextPageParam: (lastPage, _, lastPageParam) =>\n lastPage.total > lastPageParam.skip + lastPageParam.take\n ? {\n skip: lastPageParam.skip + lastPageParam.take,\n take: lastPageParam.take,\n }\n : undefined,\n },\n providesTags: ['message', 'chat'],\n }),\n }),\n});\n","import { ChatList, customize } from '@webinex/chatify';\nimport { Empty, Skeleton } from 'antd';\nimport { AuditChatListItem } from './auditApi';\n\nexport interface AuditChatListProps {\n items: AuditChatListItem[];\n loading: boolean;\n selected: string | null;\n onSelect: (id: string) => void;\n top?: number;\n}\n\nexport const AuditChatList = customize('AuditChatList', (props: AuditChatListProps) => {\n const { items, selected, onSelect, loading, top } = props;\n\n if (loading) {\n return <Skeleton />;\n }\n\n if (items.length === 0) {\n return <Empty />;\n }\n\n return <ChatList items={items} selected={selected} onSelect={onSelect} noRead top={top} />;\n});\n","import { Conversation, customize } from '@webinex/chatify';\nimport { auditApi } from './auditApi';\nimport { useMemo } from 'react';\n\nexport interface AuditConversationPanelProps {\n id: string;\n onClose?: () => void;\n\n /**\n * Number of messages to load per page.\n * @default 20\n */\n pageSize?: number;\n}\n\nexport const AuditConversationPanel = customize(\n 'AuditConversationPanel',\n (props: AuditConversationPanelProps) => {\n const { id, onClose, pageSize = 20 } = props;\n const { data: chat } = auditApi.useGetAuditChatQuery({ id });\n\n const {\n data: messageSegments,\n isFetchingNextPage,\n fetchNextPage,\n hasNextPage,\n } = auditApi.useGetAuditChatMessagesInfiniteInfiniteQuery(\n { id },\n { initialPageParam: { skip: 0, take: pageSize } },\n );\n\n const messages = useMemo(() => messageSegments?.pages.flatMap((x) => x.items) ?? [], [messageSegments]);\n\n if (!chat) return null;\n\n return (\n <Conversation\n value={{ active: false, id, lastReadMessageId: null, name: chat.name }}\n nextLoading={isFetchingNextPage}\n onNext={fetchNextPage}\n hasMore={!isFetchingNextPage && hasNextPage}\n messages={messages}\n noReadTracking\n onClose={onClose}\n />\n );\n },\n);\n","import classNames from 'classnames';\nimport { AuditSearch } from './AuditSearch';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { AuditSearchUtil } from './AuditSearchValue';\nimport { auditApi } from './auditApi';\nimport { AuditChatList } from './AuditChatList';\nimport { CustomizeContext, defaultLocalizer, Localizer, LocalizerContext } from '@webinex/chatify';\nimport { AuditConversationPanel } from './AuditConversationPanel';\nimport { AuditPanelCustomizeValue } from './AuditPanelCustomizeValue';\n\nexport interface AuditPanelProps {\n className?: string;\n style?: React.CSSProperties;\n localizer?: Localizer;\n customize?: AuditPanelCustomizeValue;\n\n /**\n * Maximum number of chats to load.\n * @default 100\n */\n max?: number;\n}\n\nfunction useData(props: AuditPanelProps, values: string[]) {\n const { max } = props;\n const query = useMemo(() => AuditSearchUtil.queryOf(values), [values]);\n\n const { currentData: chats, isLoading } = auditApi.useGetAuditChatListQuery(\n {\n ...query!,\n pagingRule: { skip: 0, take: max! },\n includeTotal: true,\n },\n { skip: !query },\n );\n\n return useMemo(() => ({ chats: chats?.items ?? [], isLoading }), [chats, isLoading]);\n}\n\nconst EMPTY = Object.freeze({} as AuditPanelCustomizeValue);\n\nexport function AuditPanel(props: AuditPanelProps) {\n props = { max: 100, customize: EMPTY, ...props };\n const { className, style, localizer = defaultLocalizer, customize = EMPTY, max } = props;\n const [values, setValues] = useState<string[]>([]);\n const { chats, isLoading } = useData(props, values);\n\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const resetSelected = useCallback(() => setSelectedId(null), []);\n\n useEffect(() => {\n if (chats.every((x) => x.id !== selectedId)) {\n setSelectedId(null);\n }\n }, [chats, selectedId]);\n\n return (\n <CustomizeContext.Provider value={customize}>\n <LocalizerContext.Provider value={localizer}>\n <div className={classNames(className, 'wxchtf-audit-panel')} style={style}>\n <AuditSearch onSearch={setValues} />\n <div className={classNames('wxchtf-audit-body', { '--conversation-opened': !!selectedId })}>\n <AuditChatList\n items={chats}\n loading={isLoading}\n selected={selectedId}\n onSelect={setSelectedId}\n top={Math.min(chats.length, max!)}\n />\n {selectedId && <AuditConversationPanel id={selectedId} onClose={resetSelected} />}\n </div>\n </div>\n </LocalizerContext.Provider>\n </CustomizeContext.Provider>\n );\n}\n","import { Space } from 'antd';\nimport { AuditPanel } from './AuditPanel';\nimport './index.d';\nimport './styles.scss';\nimport { Avatar, Chatify, defaultLocalizer } from '@webinex/chatify';\n\nexport * from './AuditPanel';\nexport * from './AuditPanelCustomizeValue';\nexport * from './AuditChatList';\nexport * from './AuditSearchValue';\nexport * from './AuditSearch';\nexport * from './auditApi';\nexport * from './AuditConversationPanel';\n\nChatify.Audit = AuditPanel;\n\ndefaultLocalizer.audit = {\n searchPlaceholder: 'Search chats by chat name or member name',\n noChatFound: 'No chats found',\n noInputBlurb: 'Start typing to search',\n textSearchOption: (text) => <span>{`Chat name includes \"${text}\"`}</span>,\n memberSearchOption: (account) => (\n <Space>\n <Avatar account={account} />\n {`Chat includes \"${account.name}\"`}\n </Space>\n ),\n};\n"],"names":["customize"],"mappings":"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"}
1
+ {"version":3,"file":"audit.js","sources":["../src/audit/AuditSearchValue.tsx","../src/audit/AuditSearch.tsx","../src/audit/auditApi.tsx","../src/audit/AuditChatList.tsx","../src/audit/AuditConversationPanel.tsx","../src/audit/AuditPanel.tsx","../src/audit/index.tsx"],"sourcesContent":["import { GetAuditChatListQueryArgs } from './auditApi';\n\nexport interface AuditSearchOption {\n label: JSX.Element;\n value: string;\n}\n\nconst MEMBER_PREFIX = 'member://';\nconst TEXT_PREFIX = 'text://';\n\nfunction queryOf(\n values: string[],\n): Pick<GetAuditChatListQueryArgs, 'containsOneOfMembers' | 'searchString'> | null {\n let containsOneOfMembers: string[] | null = values\n .filter(AuditSearchUtil.isSearchByMember)\n .map((v) => v.slice(MEMBER_PREFIX.length));\n\n containsOneOfMembers = containsOneOfMembers.length > 0 ? containsOneOfMembers : null;\n\n const searchStringValues = values\n .filter(AuditSearchUtil.isSearchByText)\n .map((v) => v.slice(TEXT_PREFIX.length));\n\n const searchString = searchStringValues.length > 0 ? searchStringValues.join(' ') : null;\n\n if (!containsOneOfMembers && !searchString) {\n return null;\n }\n\n return {\n containsOneOfMembers,\n searchString,\n };\n}\n\nexport const AuditSearchUtil = Object.freeze({\n MEMBER_PREFIX,\n TEXT_PREFIX,\n isSearchByMember: (value: string) => value.startsWith(MEMBER_PREFIX),\n isSearchByText: (value: string) => value.startsWith(TEXT_PREFIX),\n queryOf,\n});\n","import { Account, chatifyApi, customize, Localizer, useLocalizer } from '@webinex/chatify';\nimport { Select } from 'antd';\nimport classNames from 'classnames';\nimport { useEffect, useMemo, useState } from 'react';\nimport { AuditSearchUtil } from './AuditSearchValue';\n\nexport interface AuditSearchProps {\n className?: string;\n onSearch?: (values: string[]) => void;\n}\n\ntype Value = { label: JSX.Element; value: string };\n\nfunction* mapOptions(localizer: Localizer, accounts: Account[] | undefined, searchValue: string) {\n if (searchValue.length === 0) return;\n\n if (searchValue.length > 0)\n yield {\n label: localizer.audit.textSearchOption(searchValue),\n value: AuditSearchUtil.TEXT_PREFIX + searchValue,\n };\n\n for (const account of accounts?.filter((x) =>\n x.name.toLocaleLowerCase().includes(searchValue.toLocaleLowerCase()),\n ) ?? []) {\n yield {\n label: localizer.audit.memberSearchOption(account),\n value: AuditSearchUtil.MEMBER_PREFIX + account.id,\n };\n }\n}\n\nfunction useOptions(accounts: Account[] | undefined, searchValue: string) {\n const localizer = useLocalizer();\n return useMemo(\n () => Array.from(mapOptions(localizer, accounts, searchValue)),\n [localizer, accounts, searchValue],\n );\n}\n\nexport const AuditSearch = customize('AuditSearch', (props: AuditSearchProps) => {\n const { className, onSearch } = props;\n const [searchValue, setSearchValue] = useState('');\n const [values, setValues] = useState<Value[]>([]);\n const { data: accounts, isLoading } = chatifyApi.useGetAccountListQuery({});\n const options = useOptions(accounts, searchValue);\n const localizer = useLocalizer();\n\n useEffect(() => {\n onSearch?.(values.map((x) => x.value));\n }, [onSearch, values]);\n\n return (\n <div className={classNames('wxchtf-search', className)}>\n <Select<string[], Value>\n allowClear\n className=\"wxchtf-search-select\"\n mode=\"multiple\"\n value={values.map((x) => x.value)}\n options={options.length > 0 ? options : values}\n searchValue={searchValue}\n onSearch={setSearchValue}\n onSelect={(_, option) => {\n setValues((prev) => {\n if (AuditSearchUtil.isSearchByText(option.value)) {\n prev = prev.filter((x) => !AuditSearchUtil.isSearchByText(x.value));\n }\n\n return [...prev, option];\n });\n setSearchValue('');\n }}\n onDeselect={(_, option) => {\n setValues((prev) => prev.filter((x) => x.value !== option.value));\n setSearchValue('');\n }}\n filterOption={false}\n onDropdownVisibleChange={() => setSearchValue('')}\n disabled={isLoading}\n loading={isLoading}\n placeholder={localizer.audit.searchPlaceholder}\n notFoundContent={\n searchValue.length === 0 ? localizer.audit.noInputBlurb : localizer.audit.noChatFound\n }\n size=\"large\"\n />\n </div>\n );\n});\n","import { PagingRule } from '@webinex/asky';\nimport { Account, chatifyApi, File, ListSegment, Optional } from '@webinex/chatify';\n\nexport interface GetAuditChatListQueryArgs {\n containsOneOfMembers: string[] | null;\n searchString: string | null;\n pagingRule: PagingRule | null;\n includeTotal: boolean | null;\n}\n\nexport interface AuditChatResponse {\n id: string;\n workspaceId: string;\n name: string;\n createdAt: string;\n createdById: string;\n lastMessage: Optional<AuditChatMessage>;\n}\n\nexport interface AuditChatMessage {\n id: string;\n authorId: string;\n sentAt: string;\n text: string | null;\n files: File[];\n sentBy: Account;\n}\n\nexport interface AuditChatListItem {\n id: string;\n workspaceId: string;\n name: string;\n createdAt: string;\n createdById: string;\n lastMessage: AuditChatMessage;\n}\n\nexport interface AuditChat {\n id: string;\n workspaceId: string;\n name: string;\n createdAt: string;\n createdById: string;\n}\n\nfunction qs(params: Record<string, any>): string {\n const query = new URLSearchParams();\n Object.entries(params).forEach(([key, value]) => {\n if (value !== null && value !== undefined) {\n query.append(key, typeof value === 'string' ? value : JSON.stringify(value));\n }\n });\n\n return query.toString();\n}\n\nexport const auditApi = chatifyApi.injectEndpoints({\n endpoints: (build) => ({\n getAuditChatList: build.query<ListSegment<AuditChatListItem>, GetAuditChatListQueryArgs>({\n queryFn: async (args) =>\n chatifyApi.settings.client.axios\n .get<ListSegment<AuditChatResponse>>(`audit/chats?${qs({ query: args })}`)\n .then(({ data }) => ({\n data: {\n total: data.total,\n items: data.items.map(\n ({ lastMessage, ...x }): AuditChatListItem => ({ ...x, lastMessage: lastMessage.value! }),\n ),\n },\n }))\n .catch((error) => ({ error })),\n providesTags: ['chat', 'message'],\n }),\n\n getAuditChat: build.query<AuditChat, { id: string }>({\n queryFn: async (args) =>\n chatifyApi.settings.client.axios\n .get(`audit/chats/${encodeURIComponent(args.id)}`)\n .then(({ data }) => ({ data }))\n .catch((error) => ({ error })),\n providesTags: ['chat'],\n }),\n\n getAuditChatMessagesInfinite: build.infiniteQuery<\n ListSegment<AuditChatMessage>,\n { id: string },\n { skip: number; take: number }\n >({\n queryFn: async (args) => {\n const {\n pageParam,\n queryArg: { id },\n } = args;\n\n return chatifyApi.settings.client.axios\n .get(`audit/messages?${qs({ query: { chatId: id, pagingRule: pageParam, includeTotal: true } })}`)\n .then(({ data }) => ({ data }))\n .catch((error) => ({ error }));\n },\n infiniteQueryOptions: {\n initialPageParam: { skip: 0, take: 20 },\n getNextPageParam: (lastPage, _, lastPageParam) =>\n lastPage.total > lastPageParam.skip + lastPageParam.take\n ? {\n skip: lastPageParam.skip + lastPageParam.take,\n take: lastPageParam.take,\n }\n : undefined,\n },\n providesTags: ['message', 'chat'],\n }),\n }),\n});\n","import { ChatList, customize } from '@webinex/chatify';\nimport { Empty, Skeleton } from 'antd';\nimport { AuditChatListItem } from './auditApi';\n\nexport interface AuditChatListProps {\n items: AuditChatListItem[];\n loading: boolean;\n selected: string | null;\n onSelect: (id: string) => void;\n top?: number;\n}\n\nexport const AuditChatList = customize('AuditChatList', (props: AuditChatListProps) => {\n const { items, selected, onSelect, loading, top } = props;\n\n if (loading) {\n return <Skeleton />;\n }\n\n if (items.length === 0) {\n return <Empty />;\n }\n\n return <ChatList items={items} selected={selected} onSelect={onSelect} noRead top={top} />;\n});\n","import { Conversation, customize } from '@webinex/chatify';\nimport { auditApi } from './auditApi';\nimport { useMemo } from 'react';\n\nexport interface AuditConversationPanelProps {\n id: string;\n onClose?: () => void;\n\n /**\n * Number of messages to load per page.\n * @default 20\n */\n pageSize?: number;\n}\n\nexport const AuditConversationPanel = customize(\n 'AuditConversationPanel',\n (props: AuditConversationPanelProps) => {\n const { id, onClose, pageSize = 20 } = props;\n const { data: chat } = auditApi.useGetAuditChatQuery({ id });\n\n const {\n data: messageSegments,\n isFetchingNextPage,\n fetchNextPage,\n hasNextPage,\n } = auditApi.useGetAuditChatMessagesInfiniteInfiniteQuery(\n { id },\n { initialPageParam: { skip: 0, take: pageSize } },\n );\n\n const messages = useMemo(() => messageSegments?.pages.flatMap((x) => x.items) ?? [], [messageSegments]);\n\n if (!chat) return null;\n\n return (\n <Conversation\n value={{ active: false, id, lastReadMessageId: null, name: chat.name }}\n nextLoading={isFetchingNextPage}\n onNext={fetchNextPage}\n hasMore={!isFetchingNextPage && hasNextPage}\n messages={messages}\n noReadTracking\n onClose={onClose}\n />\n );\n },\n);\n","import classNames from 'classnames';\nimport { AuditSearch } from './AuditSearch';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { AuditSearchUtil } from './AuditSearchValue';\nimport { auditApi } from './auditApi';\nimport { AuditChatList } from './AuditChatList';\nimport { CustomizeContext, defaultLocalizer, Localizer, LocalizerContext } from '@webinex/chatify';\nimport { AuditConversationPanel } from './AuditConversationPanel';\nimport { AuditPanelCustomizeValue } from './AuditPanelCustomizeValue';\n\nexport interface AuditPanelProps {\n className?: string;\n style?: React.CSSProperties;\n localizer?: Localizer;\n customize?: AuditPanelCustomizeValue;\n\n /**\n * Maximum number of chats to load.\n * @default 100\n */\n max?: number;\n}\n\nfunction useData(props: AuditPanelProps, values: string[]) {\n const { max } = props;\n const query = useMemo(() => AuditSearchUtil.queryOf(values), [values]);\n\n const { currentData: chats, isLoading } = auditApi.useGetAuditChatListQuery(\n {\n ...query!,\n pagingRule: { skip: 0, take: max! },\n includeTotal: true,\n },\n { skip: !query },\n );\n\n return useMemo(() => ({ chats: chats?.items ?? [], isLoading }), [chats, isLoading]);\n}\n\nconst EMPTY = Object.freeze({} as AuditPanelCustomizeValue);\n\nexport function AuditPanel(props: AuditPanelProps) {\n props = { max: 100, customize: EMPTY, ...props };\n const { className, style, localizer = defaultLocalizer, customize = EMPTY, max } = props;\n const [values, setValues] = useState<string[]>([]);\n const { chats, isLoading } = useData(props, values);\n\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const resetSelected = useCallback(() => setSelectedId(null), []);\n\n useEffect(() => {\n if (chats.every((x) => x.id !== selectedId)) {\n setSelectedId(null);\n }\n }, [chats, selectedId]);\n\n return (\n <CustomizeContext.Provider value={customize}>\n <LocalizerContext.Provider value={localizer}>\n <div className={classNames(className, 'wxchtf-audit-panel')} style={style}>\n <AuditSearch onSearch={setValues} />\n <div className={classNames('wxchtf-audit-body', { '--conversation-opened': !!selectedId })}>\n <AuditChatList\n items={chats}\n loading={isLoading}\n selected={selectedId}\n onSelect={setSelectedId}\n top={Math.min(chats.length, max!)}\n />\n {selectedId && <AuditConversationPanel id={selectedId} onClose={resetSelected} />}\n </div>\n </div>\n </LocalizerContext.Provider>\n </CustomizeContext.Provider>\n );\n}\n","import { Space } from 'antd';\nimport { AuditPanel } from './AuditPanel';\nimport './index.d';\nimport './styles.scss';\nimport { Avatar, Chatify, defaultLocalizer } from '@webinex/chatify';\n\nexport * from './AuditPanel';\nexport * from './AuditPanelCustomizeValue';\nexport * from './AuditChatList';\nexport * from './AuditSearchValue';\nexport * from './AuditSearch';\nexport * from './auditApi';\nexport * from './AuditConversationPanel';\n\nChatify.Audit = AuditPanel;\n\ndefaultLocalizer.audit = {\n searchPlaceholder: 'Search chats by chat name or member name',\n noChatFound: 'No chats found',\n noInputBlurb: 'Start typing to search',\n textSearchOption: (text) => <span>{`Chat name includes \"${text}\"`}</span>,\n memberSearchOption: (account) => (\n <Space>\n <Avatar account={account} />\n {`Chat includes \"${account.name}\"`}\n </Space>\n ),\n};\n"],"names":["customize"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,97 +1,104 @@
1
- import { ae, aA, l, m, v, z, E, x, w, y, F, n, ai, aj, ak, al, am, an, ao, ap, aq, A, g, h, i, o, j, d, aB, a9, a3, a4, a7, a5, a6, t, p, q, r, s, C, D, af, ag, I, N, M, G, H, J, K, L, O, P, Q, V, U, R, X, S, ah, T, W, ar, Y, Z, _, $, a0, a2, aa, ac, ab, aw, av, as, az, c, b, f, a1, at, au, aC, k, B, ax, a8, a, u, e, ad, ay } from "./Chatify-DGRV4QKP.js";
1
+ import { p, A, q, r, s, t, al, aH, l, m, B, E, I, M, G, F, H, N, n, ap, aq, ar, as, at, au, av, aw, ax, J, g, h, i, o, j, d, aI, ag, aa, ab, ae, ac, ad, z, v, w, x, y, C, D, am, an, O, U, T, P, Q, R, S, L, V, W, X, a0, $, Y, a2, Z, ao, _, a1, ay, a3, a4, a5, a6, a7, a9, ah, aj, ai, aD, aC, az, aG, c, b, f, a8, aA, aB, aJ, k, K, aE, af, a, u, e, ak, aF } from "./Chatify-CwAfN1wu.js";
2
2
  export {
3
- ae as Avatar,
4
- aA as CHATIFY_SIGNALR_METHODS,
3
+ p as AUTO_REPLY_FORM_INITIAL_VALUE,
4
+ A as AutoReplyButton,
5
+ q as AutoReplyForm,
6
+ r as AutoReplyPanel,
7
+ s as AutoReplyPeriodInput,
8
+ t as AutoReplyTextInput,
9
+ al as Avatar,
10
+ aH as CHATIFY_SIGNALR_METHODS,
5
11
  l as ChatContext,
6
12
  m as ChatEditableHeaderName,
7
- v as ChatGroupAside,
8
- z as ChatGroupBody,
9
- E as ChatGroupContext,
10
- x as ChatGroupFooter,
11
- w as ChatGroupHeader,
12
- y as ChatGroupMain,
13
- F as ChatGroupPanel,
13
+ B as ChatGroupActions,
14
+ E as ChatGroupAside,
15
+ I as ChatGroupBody,
16
+ M as ChatGroupContext,
17
+ G as ChatGroupFooter,
18
+ F as ChatGroupHeader,
19
+ H as ChatGroupMain,
20
+ N as ChatGroupPanel,
14
21
  n as ChatHeaderActions,
15
- ai as ChatList,
16
- aj as ChatListItemAvatar,
17
- ak as ChatListItemBox,
18
- al as ChatListItemLastMessage,
19
- am as ChatListItemLastMessageAuthor,
20
- an as ChatListItemLastMessageContent,
21
- ao as ChatListItemLastMessageSentAt,
22
- ap as ChatListItemName,
23
- aq as ChatListItemUnreadCount,
24
- A as ChatListPanel,
22
+ ap as ChatList,
23
+ aq as ChatListItemAvatar,
24
+ ar as ChatListItemBox,
25
+ as as ChatListItemLastMessage,
26
+ at as ChatListItemLastMessageAuthor,
27
+ au as ChatListItemLastMessageContent,
28
+ av as ChatListItemLastMessageSentAt,
29
+ aw as ChatListItemName,
30
+ ax as ChatListItemUnreadCount,
31
+ J as ChatListPanel,
25
32
  g as ChatMembersButton,
26
33
  h as ChatMembersPanel,
27
34
  i as ChatMembersPreview,
28
35
  o as ChatPanel,
29
36
  j as ChatView,
30
37
  d as Chatify,
31
- aB as ChatifyClient,
32
- a9 as Conversation,
33
- a3 as ConversationActions,
34
- a4 as ConversationBody,
35
- a7 as ConversationContext,
36
- a5 as ConversationHeader,
37
- a6 as ConversationName,
38
- t as CreateChatButton,
39
- p as CreateChatForm,
40
- q as CreateChatMemberInput,
41
- r as CreateChatNameInput,
42
- s as CreateChatPanel,
38
+ aI as ChatifyClient,
39
+ ag as Conversation,
40
+ aa as ConversationActions,
41
+ ab as ConversationBody,
42
+ ae as ConversationContext,
43
+ ac as ConversationHeader,
44
+ ad as ConversationName,
45
+ z as CreateChatButton,
46
+ v as CreateChatForm,
47
+ w as CreateChatMemberInput,
48
+ x as CreateChatNameInput,
49
+ y as CreateChatPanel,
43
50
  C as CustomizeContext,
44
51
  D as DEFAULT_CHAT_VIEW_CUSTOMIZE_VALUE,
45
- af as ICONS,
46
- ag as Icon,
47
- I as InputBox,
48
- N as InputBoxFile,
49
- M as InputBoxFileList,
50
- G as InputFileButton,
51
- H as InputFilesBox,
52
- J as InputSubmitButtonBox,
53
- K as InputTextBox,
52
+ am as ICONS,
53
+ an as Icon,
54
+ O as InputBox,
55
+ U as InputBoxFile,
56
+ T as InputBoxFileList,
57
+ P as InputFileButton,
58
+ Q as InputFilesBox,
59
+ R as InputSubmitButtonBox,
60
+ S as InputTextBox,
54
61
  L as LocalizerContext,
55
- O as MessageAuthor,
56
- P as MessageBox,
57
- Q as MessageContent,
58
- V as MessageFile,
59
- U as MessageFileList,
60
- R as MessageInfoBox,
61
- X as MessageReadObserver,
62
- S as MessageRow,
63
- ah as MessageSkeleton,
64
- T as MessageText,
65
- W as NextMessagesObserver,
66
- ar as SYSTEM_ID,
67
- Y as SendingMessageBox,
68
- Z as SendingMessageContent,
69
- _ as SendingMessageInfoBox,
70
- $ as SendingMessageText,
71
- a0 as SystemMessageBox,
72
- a2 as SystemMessageRow,
73
- aa as ThreadActions,
74
- ac as ThreadContext,
75
- ab as ThreadPanel,
76
- aw as calcThreadListUnreadCount,
77
- av as calcThreadUnreadCount,
78
- as as chatId,
79
- az as chatifyApi,
62
+ V as MessageAuthor,
63
+ W as MessageBox,
64
+ X as MessageContent,
65
+ a0 as MessageFile,
66
+ $ as MessageFileList,
67
+ Y as MessageInfoBox,
68
+ a2 as MessageReadObserver,
69
+ Z as MessageRow,
70
+ ao as MessageSkeleton,
71
+ _ as MessageText,
72
+ a1 as NextMessagesObserver,
73
+ ay as SYSTEM_ID,
74
+ a3 as SendingMessageBox,
75
+ a4 as SendingMessageContent,
76
+ a5 as SendingMessageInfoBox,
77
+ a6 as SendingMessageText,
78
+ a7 as SystemMessageBox,
79
+ a9 as SystemMessageRow,
80
+ ah as ThreadActions,
81
+ aj as ThreadContext,
82
+ ai as ThreadPanel,
83
+ aD as calcThreadListUnreadCount,
84
+ aC as calcThreadUnreadCount,
85
+ az as chatId,
86
+ aG as chatifyApi,
80
87
  c as color,
81
88
  b as customize,
82
89
  f as defaultLocalizer,
83
- a1 as formatSystemMessage,
84
- at as messageSequencePart,
85
- au as parseThreadMessageId,
86
- aC as unsubscribe,
90
+ a8 as formatSystemMessage,
91
+ aA as messageSequencePart,
92
+ aB as parseThreadMessageId,
93
+ aJ as unsubscribe,
87
94
  k as useChatContext,
88
- B as useChatGroupContext,
89
- ax as useChatListItem,
90
- a8 as useConversation,
95
+ K as useChatGroupContext,
96
+ aE as useChatListItem,
97
+ af as useConversation,
91
98
  a as useCustomize,
92
99
  u as useCustomizeContext,
93
100
  e as useLocalizer,
94
- ad as useThreadContext,
95
- ay as useUnreadThreadMessageCount
101
+ ak as useThreadContext,
102
+ aF as useUnreadThreadMessageCount
96
103
  };
97
104
  //# sourceMappingURL=index.js.map
@@ -38,7 +38,11 @@ export interface AuditChat {
38
38
  createdById: string;
39
39
  }
40
40
  export declare const auditApi: import('@reduxjs/toolkit/query').Api<import('@reduxjs/toolkit/query').BaseQueryFn, {
41
- getAccountList: import('@reduxjs/toolkit/query').QueryDefinition<void, import('@reduxjs/toolkit/query').BaseQueryFn, "chat" | "account" | "message" | "thread" | "thread-message", Account[], "chatify", unknown>;
41
+ getAccountList: import('@reduxjs/toolkit/query').QueryDefinition<{
42
+ ids?: string[];
43
+ }, import('@reduxjs/toolkit/query').BaseQueryFn, "chat" | "account" | "message" | "thread" | "thread-message", Account[], "chatify", unknown>;
44
+ geCurrentUserAccount: import('@reduxjs/toolkit/query').QueryDefinition<void, import('@reduxjs/toolkit/query').BaseQueryFn, "chat" | "account" | "message" | "thread" | "thread-message", Account | null, "chatify", unknown>;
45
+ updateAccount: import('@reduxjs/toolkit/query').MutationDefinition<import('../index.ts').UpdateAccountRequest, import('@reduxjs/toolkit/query').BaseQueryFn, "chat" | "account" | "message" | "thread" | "thread-message", void, "chatify", unknown>;
42
46
  getChat: import('@reduxjs/toolkit/query').QueryDefinition<{
43
47
  id: string;
44
48
  }, import('@reduxjs/toolkit/query').BaseQueryFn, "chat" | "account" | "message" | "thread" | "thread-message", import('../index.ts').Chat, "chatify", unknown>;