@developer_tribe/react-native-comnyx 0.1.1 → 0.2.0
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.
- package/lib/commonjs/App.js +59 -0
- package/lib/commonjs/App.js.map +1 -0
- package/lib/commonjs/__dev__.js +29 -0
- package/lib/commonjs/__dev__.js.map +1 -0
- package/lib/commonjs/api/api.js +22 -0
- package/lib/commonjs/api/api.js.map +1 -0
- package/lib/commonjs/api/conversations.js +37 -0
- package/lib/commonjs/api/conversations.js.map +1 -0
- package/lib/commonjs/api/customers.js +15 -0
- package/lib/commonjs/api/customers.js.map +1 -0
- package/lib/commonjs/api/index.js +33 -0
- package/lib/commonjs/api/index.js.map +1 -0
- package/lib/commonjs/api/messages.js +27 -0
- package/lib/commonjs/api/messages.js.map +1 -0
- package/lib/commonjs/assets/clock.png +0 -0
- package/lib/commonjs/assets/double-check.png +0 -0
- package/lib/commonjs/assets/down.png +0 -0
- package/lib/commonjs/assets/send.png +0 -0
- package/lib/commonjs/components/AppText.js +38 -0
- package/lib/commonjs/components/AppText.js.map +1 -0
- package/lib/commonjs/components/ChatList.js +268 -0
- package/lib/commonjs/components/ChatList.js.map +1 -0
- package/lib/commonjs/components/CustomerForm.js +213 -0
- package/lib/commonjs/components/CustomerForm.js.map +1 -0
- package/lib/commonjs/components/EmptyList.js +40 -0
- package/lib/commonjs/components/EmptyList.js.map +1 -0
- package/lib/commonjs/components/InitFailed.js +51 -0
- package/lib/commonjs/components/InitFailed.js.map +1 -0
- package/lib/commonjs/components/MessageInput.js +119 -0
- package/lib/commonjs/components/MessageInput.js.map +1 -0
- package/lib/commonjs/components/MessageItem.js +117 -0
- package/lib/commonjs/components/MessageItem.js.map +1 -0
- package/lib/commonjs/constants/translations.js +219 -0
- package/lib/commonjs/constants/translations.js.map +1 -0
- package/lib/commonjs/data/fake/conversations.js +95 -0
- package/lib/commonjs/data/fake/conversations.js.map +1 -0
- package/lib/commonjs/data/fake/customers.js +24 -0
- package/lib/commonjs/data/fake/customers.js.map +1 -0
- package/lib/commonjs/data/fake/messages.js +67 -0
- package/lib/commonjs/data/fake/messages.js.map +1 -0
- package/lib/commonjs/hooks/useLocalize.js +20 -0
- package/lib/commonjs/hooks/useLocalize.js.map +1 -0
- package/lib/commonjs/hooks/usePolling.js +50 -0
- package/lib/commonjs/hooks/usePolling.js.map +1 -0
- package/lib/commonjs/hooks/useThemeColors.js +17 -0
- package/lib/commonjs/hooks/useThemeColors.js.map +1 -0
- package/lib/commonjs/index.js +15 -6
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/register.js +21 -0
- package/lib/commonjs/register.js.map +1 -0
- package/lib/commonjs/store.js +79 -0
- package/lib/commonjs/store.js.map +1 -0
- package/lib/commonjs/types/ApiOptions.js +2 -0
- package/lib/commonjs/types/ApiOptions.js.map +1 -0
- package/lib/commonjs/types/Conversation.js +2 -0
- package/lib/commonjs/types/Conversation.js.map +1 -0
- package/lib/commonjs/types/Customer.js +2 -0
- package/lib/commonjs/types/Customer.js.map +1 -0
- package/lib/commonjs/types/Language.js +2 -0
- package/lib/commonjs/types/Language.js.map +1 -0
- package/lib/commonjs/types/LocalizationKeys.js +2 -0
- package/lib/commonjs/types/LocalizationKeys.js.map +1 -0
- package/lib/commonjs/types/MessageResponse.js +2 -0
- package/lib/commonjs/types/MessageResponse.js.map +1 -0
- package/lib/commonjs/types/Theme.js +29 -0
- package/lib/commonjs/types/Theme.js.map +1 -0
- package/lib/commonjs/utils/date.js +17 -0
- package/lib/commonjs/utils/date.js.map +1 -0
- package/lib/module/App.js +55 -0
- package/lib/module/App.js.map +1 -0
- package/lib/module/__dev__.js +29 -0
- package/lib/module/__dev__.js.map +1 -0
- package/lib/module/api/api.js +17 -0
- package/lib/module/api/api.js.map +1 -0
- package/lib/module/api/conversations.js +32 -0
- package/lib/module/api/conversations.js.map +1 -0
- package/lib/module/api/customers.js +11 -0
- package/lib/module/api/customers.js.map +1 -0
- package/lib/module/api/index.js +6 -0
- package/lib/module/api/index.js.map +1 -0
- package/lib/module/api/messages.js +23 -0
- package/lib/module/api/messages.js.map +1 -0
- package/lib/module/assets/clock.png +0 -0
- package/lib/module/assets/double-check.png +0 -0
- package/lib/module/assets/down.png +0 -0
- package/lib/module/assets/send.png +0 -0
- package/lib/module/components/AppText.js +34 -0
- package/lib/module/components/AppText.js.map +1 -0
- package/lib/module/components/ChatList.js +265 -0
- package/lib/module/components/ChatList.js.map +1 -0
- package/lib/module/components/CustomerForm.js +209 -0
- package/lib/module/components/CustomerForm.js.map +1 -0
- package/lib/module/components/EmptyList.js +36 -0
- package/lib/module/components/EmptyList.js.map +1 -0
- package/lib/module/components/InitFailed.js +47 -0
- package/lib/module/components/InitFailed.js.map +1 -0
- package/lib/module/components/MessageInput.js +115 -0
- package/lib/module/components/MessageInput.js.map +1 -0
- package/lib/module/components/MessageItem.js +114 -0
- package/lib/module/components/MessageItem.js.map +1 -0
- package/lib/module/constants/translations.js +215 -0
- package/lib/module/constants/translations.js.map +1 -0
- package/lib/module/data/fake/conversations.js +88 -0
- package/lib/module/data/fake/conversations.js.map +1 -0
- package/lib/module/data/fake/customers.js +20 -0
- package/lib/module/data/fake/customers.js.map +1 -0
- package/lib/module/data/fake/messages.js +63 -0
- package/lib/module/data/fake/messages.js.map +1 -0
- package/lib/module/hooks/useLocalize.js +16 -0
- package/lib/module/hooks/useLocalize.js.map +1 -0
- package/lib/module/hooks/usePolling.js +46 -0
- package/lib/module/hooks/usePolling.js.map +1 -0
- package/lib/module/hooks/useThemeColors.js +13 -0
- package/lib/module/hooks/useThemeColors.js.map +1 -0
- package/lib/module/index.js +3 -4
- package/lib/module/index.js.map +1 -1
- package/lib/module/register.js +17 -0
- package/lib/module/register.js.map +1 -0
- package/lib/module/store.js +74 -0
- package/lib/module/store.js.map +1 -0
- package/lib/module/types/ApiOptions.js +2 -0
- package/lib/module/types/ApiOptions.js.map +1 -0
- package/lib/module/types/Conversation.js +2 -0
- package/lib/module/types/Conversation.js.map +1 -0
- package/lib/module/types/Customer.js +2 -0
- package/lib/module/types/Customer.js.map +1 -0
- package/lib/module/types/Language.js +2 -0
- package/lib/module/types/Language.js.map +1 -0
- package/lib/module/types/LocalizationKeys.js +2 -0
- package/lib/module/types/LocalizationKeys.js.map +1 -0
- package/lib/module/types/MessageResponse.js +2 -0
- package/lib/module/types/MessageResponse.js.map +1 -0
- package/lib/module/types/Theme.js +25 -0
- package/lib/module/types/Theme.js.map +1 -0
- package/lib/module/utils/date.js +12 -0
- package/lib/module/utils/date.js.map +1 -0
- package/lib/typescript/commonjs/src/App.d.ts +9 -0
- package/lib/typescript/commonjs/src/App.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/__dev__.d.ts +2 -0
- package/lib/typescript/commonjs/src/__dev__.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/api/api.d.ts +4 -0
- package/lib/typescript/commonjs/src/api/api.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/api/conversations.d.ts +7 -0
- package/lib/typescript/commonjs/src/api/conversations.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/api/customers.d.ts +4 -0
- package/lib/typescript/commonjs/src/api/customers.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/api/index.d.ts +4 -0
- package/lib/typescript/commonjs/src/api/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/api/messages.d.ts +4 -0
- package/lib/typescript/commonjs/src/api/messages.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/components/AppText.d.ts +10 -0
- package/lib/typescript/commonjs/src/components/AppText.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/components/ChatList.d.ts +2 -0
- package/lib/typescript/commonjs/src/components/ChatList.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/components/CustomerForm.d.ts +2 -0
- package/lib/typescript/commonjs/src/components/CustomerForm.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/components/EmptyList.d.ts +2 -0
- package/lib/typescript/commonjs/src/components/EmptyList.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/components/InitFailed.d.ts +6 -0
- package/lib/typescript/commonjs/src/components/InitFailed.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/components/MessageInput.d.ts +4 -0
- package/lib/typescript/commonjs/src/components/MessageInput.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/components/MessageItem.d.ts +5 -0
- package/lib/typescript/commonjs/src/components/MessageItem.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/constants/translations.d.ts +4 -0
- package/lib/typescript/commonjs/src/constants/translations.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/data/fake/conversations.d.ts +5 -0
- package/lib/typescript/commonjs/src/data/fake/conversations.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/data/fake/customers.d.ts +3 -0
- package/lib/typescript/commonjs/src/data/fake/customers.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/data/fake/messages.d.ts +3 -0
- package/lib/typescript/commonjs/src/data/fake/messages.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/hooks/useLocalize.d.ts +3 -0
- package/lib/typescript/commonjs/src/hooks/useLocalize.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/hooks/usePolling.d.ts +2 -0
- package/lib/typescript/commonjs/src/hooks/usePolling.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/hooks/useThemeColors.d.ts +3 -0
- package/lib/typescript/commonjs/src/hooks/useThemeColors.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/index.d.ts +4 -1
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/register.d.ts +5 -0
- package/lib/typescript/commonjs/src/register.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/store.d.ts +35 -0
- package/lib/typescript/commonjs/src/store.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/types/ApiOptions.d.ts +4 -0
- package/lib/typescript/commonjs/src/types/ApiOptions.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/types/Conversation.d.ts +26 -0
- package/lib/typescript/commonjs/src/types/Conversation.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/types/Customer.d.ts +30 -0
- package/lib/typescript/commonjs/src/types/Customer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/types/Language.d.ts +2 -0
- package/lib/typescript/commonjs/src/types/Language.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/types/LocalizationKeys.d.ts +22 -0
- package/lib/typescript/commonjs/src/types/LocalizationKeys.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/types/MessageResponse.d.ts +59 -0
- package/lib/typescript/commonjs/src/types/MessageResponse.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/types/Theme.d.ts +18 -0
- package/lib/typescript/commonjs/src/types/Theme.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/utils/date.d.ts +7 -0
- package/lib/typescript/commonjs/src/utils/date.d.ts.map +1 -0
- package/lib/typescript/module/src/App.d.ts +9 -0
- package/lib/typescript/module/src/App.d.ts.map +1 -0
- package/lib/typescript/module/src/__dev__.d.ts +2 -0
- package/lib/typescript/module/src/__dev__.d.ts.map +1 -0
- package/lib/typescript/module/src/api/api.d.ts +4 -0
- package/lib/typescript/module/src/api/api.d.ts.map +1 -0
- package/lib/typescript/module/src/api/conversations.d.ts +7 -0
- package/lib/typescript/module/src/api/conversations.d.ts.map +1 -0
- package/lib/typescript/module/src/api/customers.d.ts +4 -0
- package/lib/typescript/module/src/api/customers.d.ts.map +1 -0
- package/lib/typescript/module/src/api/index.d.ts +4 -0
- package/lib/typescript/module/src/api/index.d.ts.map +1 -0
- package/lib/typescript/module/src/api/messages.d.ts +4 -0
- package/lib/typescript/module/src/api/messages.d.ts.map +1 -0
- package/lib/typescript/module/src/components/AppText.d.ts +10 -0
- package/lib/typescript/module/src/components/AppText.d.ts.map +1 -0
- package/lib/typescript/module/src/components/ChatList.d.ts +2 -0
- package/lib/typescript/module/src/components/ChatList.d.ts.map +1 -0
- package/lib/typescript/module/src/components/CustomerForm.d.ts +2 -0
- package/lib/typescript/module/src/components/CustomerForm.d.ts.map +1 -0
- package/lib/typescript/module/src/components/EmptyList.d.ts +2 -0
- package/lib/typescript/module/src/components/EmptyList.d.ts.map +1 -0
- package/lib/typescript/module/src/components/InitFailed.d.ts +6 -0
- package/lib/typescript/module/src/components/InitFailed.d.ts.map +1 -0
- package/lib/typescript/module/src/components/MessageInput.d.ts +4 -0
- package/lib/typescript/module/src/components/MessageInput.d.ts.map +1 -0
- package/lib/typescript/module/src/components/MessageItem.d.ts +5 -0
- package/lib/typescript/module/src/components/MessageItem.d.ts.map +1 -0
- package/lib/typescript/module/src/constants/translations.d.ts +4 -0
- package/lib/typescript/module/src/constants/translations.d.ts.map +1 -0
- package/lib/typescript/module/src/data/fake/conversations.d.ts +5 -0
- package/lib/typescript/module/src/data/fake/conversations.d.ts.map +1 -0
- package/lib/typescript/module/src/data/fake/customers.d.ts +3 -0
- package/lib/typescript/module/src/data/fake/customers.d.ts.map +1 -0
- package/lib/typescript/module/src/data/fake/messages.d.ts +3 -0
- package/lib/typescript/module/src/data/fake/messages.d.ts.map +1 -0
- package/lib/typescript/module/src/hooks/useLocalize.d.ts +3 -0
- package/lib/typescript/module/src/hooks/useLocalize.d.ts.map +1 -0
- package/lib/typescript/module/src/hooks/usePolling.d.ts +2 -0
- package/lib/typescript/module/src/hooks/usePolling.d.ts.map +1 -0
- package/lib/typescript/module/src/hooks/useThemeColors.d.ts +3 -0
- package/lib/typescript/module/src/hooks/useThemeColors.d.ts.map +1 -0
- package/lib/typescript/module/src/index.d.ts +4 -1
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/lib/typescript/module/src/register.d.ts +5 -0
- package/lib/typescript/module/src/register.d.ts.map +1 -0
- package/lib/typescript/module/src/store.d.ts +35 -0
- package/lib/typescript/module/src/store.d.ts.map +1 -0
- package/lib/typescript/module/src/types/ApiOptions.d.ts +4 -0
- package/lib/typescript/module/src/types/ApiOptions.d.ts.map +1 -0
- package/lib/typescript/module/src/types/Conversation.d.ts +26 -0
- package/lib/typescript/module/src/types/Conversation.d.ts.map +1 -0
- package/lib/typescript/module/src/types/Customer.d.ts +30 -0
- package/lib/typescript/module/src/types/Customer.d.ts.map +1 -0
- package/lib/typescript/module/src/types/Language.d.ts +2 -0
- package/lib/typescript/module/src/types/Language.d.ts.map +1 -0
- package/lib/typescript/module/src/types/LocalizationKeys.d.ts +22 -0
- package/lib/typescript/module/src/types/LocalizationKeys.d.ts.map +1 -0
- package/lib/typescript/module/src/types/MessageResponse.d.ts +59 -0
- package/lib/typescript/module/src/types/MessageResponse.d.ts.map +1 -0
- package/lib/typescript/module/src/types/Theme.d.ts +18 -0
- package/lib/typescript/module/src/types/Theme.d.ts.map +1 -0
- package/lib/typescript/module/src/utils/date.d.ts +7 -0
- package/lib/typescript/module/src/utils/date.d.ts.map +1 -0
- package/package.json +10 -2
- package/src/App.tsx +59 -0
- package/src/__dev__.ts +22 -0
- package/src/api/api.ts +16 -0
- package/src/api/conversations.ts +53 -0
- package/src/api/customers.ts +16 -0
- package/src/api/index.ts +6 -0
- package/src/api/messages.ts +33 -0
- package/src/assets/clock.png +0 -0
- package/src/assets/double-check.png +0 -0
- package/src/assets/down.png +0 -0
- package/src/assets/send.png +0 -0
- package/src/components/AppText.tsx +43 -0
- package/src/components/ChatList.tsx +305 -0
- package/src/components/CustomerForm.tsx +203 -0
- package/src/components/EmptyList.tsx +32 -0
- package/src/components/InitFailed.tsx +46 -0
- package/src/components/MessageInput.tsx +133 -0
- package/src/components/MessageItem.tsx +141 -0
- package/src/constants/translations.ts +232 -0
- package/src/data/fake/conversations.ts +558 -0
- package/src/data/fake/customers.ts +19 -0
- package/src/data/fake/messages.ts +64 -0
- package/src/hooks/useLocalize.ts +18 -0
- package/src/hooks/usePolling.ts +46 -0
- package/src/hooks/useThemeColors.ts +10 -0
- package/src/index.tsx +4 -5
- package/src/register.ts +17 -0
- package/src/store.ts +85 -0
- package/src/types/ApiOptions.ts +4 -0
- package/src/types/Conversation.ts +29 -0
- package/src/types/Customer.ts +31 -0
- package/src/types/Language.ts +11 -0
- package/src/types/LocalizationKeys.ts +21 -0
- package/src/types/MessageResponse.ts +58 -0
- package/src/types/Theme.ts +40 -0
- package/src/utils/date.ts +11 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
import { useAppStore } from '../store';
|
|
3
|
+
import { getNewCustomerConversation } from '../api';
|
|
4
|
+
|
|
5
|
+
const NEW_MESSAGES_CHECK_INTERVAL = 10000;
|
|
6
|
+
|
|
7
|
+
export function usePolling() {
|
|
8
|
+
const { customer, data, setData } = useAppStore((s) => ({
|
|
9
|
+
customer: s.customer,
|
|
10
|
+
data: s.data,
|
|
11
|
+
setData: s.setData,
|
|
12
|
+
}));
|
|
13
|
+
const lastMessage = data ? data[data.length - 1] : null;
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
const created_at = lastMessage?.created_at;
|
|
16
|
+
let interval: NodeJS.Timeout | null = null;
|
|
17
|
+
if (customer?.external_id && created_at) {
|
|
18
|
+
interval = setInterval(() => {
|
|
19
|
+
getNewCustomerConversation(customer.external_id, created_at, {
|
|
20
|
+
fake: useAppStore.getState().fake,
|
|
21
|
+
}).then((newData) => {
|
|
22
|
+
setData((prevData) => {
|
|
23
|
+
const newMessages = newData.page.data;
|
|
24
|
+
const existingIds = new Set(prevData?.map((msg) => msg.id));
|
|
25
|
+
const uniqueNewMessages = newMessages.filter(
|
|
26
|
+
(msg) => !existingIds.has(msg.id)
|
|
27
|
+
);
|
|
28
|
+
return [
|
|
29
|
+
...uniqueNewMessages.map((u) => ({
|
|
30
|
+
...u,
|
|
31
|
+
created_at: new Date(u.created_at),
|
|
32
|
+
approved: true,
|
|
33
|
+
})),
|
|
34
|
+
...(prevData ?? []),
|
|
35
|
+
];
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
}, NEW_MESSAGES_CHECK_INTERVAL);
|
|
39
|
+
}
|
|
40
|
+
return () => {
|
|
41
|
+
if (interval) {
|
|
42
|
+
clearInterval(interval);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
}, [customer?.external_id, lastMessage?.created_at, setData]);
|
|
46
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { useAppStore } from '../store';
|
|
2
|
+
import { lightTheme, darkTheme, type ThemeColors } from '../types/Theme';
|
|
3
|
+
|
|
4
|
+
export function useThemeColors(): ThemeColors {
|
|
5
|
+
const { theme } = useAppStore((s) => ({
|
|
6
|
+
theme: s.theme,
|
|
7
|
+
}));
|
|
8
|
+
|
|
9
|
+
return theme === 'light' ? lightTheme : darkTheme;
|
|
10
|
+
}
|
package/src/index.tsx
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
export
|
|
4
|
-
|
|
5
|
-
}
|
|
1
|
+
import './__dev__';
|
|
2
|
+
export { registerComnyx } from './register';
|
|
3
|
+
export type { CreateCustomerRequest } from './types/Customer';
|
|
4
|
+
export { Comnyx } from './App';
|
package/src/register.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { initApi } from './api/api';
|
|
2
|
+
import { useAppStore } from './store';
|
|
3
|
+
|
|
4
|
+
export function registerComnyx(registerOptions: {
|
|
5
|
+
externalId: string;
|
|
6
|
+
token: string;
|
|
7
|
+
}) {
|
|
8
|
+
if (!registerOptions.externalId) {
|
|
9
|
+
throw new Error('External ID is required for initialization');
|
|
10
|
+
}
|
|
11
|
+
if (!registerOptions.token) {
|
|
12
|
+
throw new Error('Authentication token is required');
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
initApi(registerOptions.token);
|
|
16
|
+
useAppStore.getState().init({ externalId: registerOptions.externalId });
|
|
17
|
+
}
|
package/src/store.ts
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { createJSONStorage, persist } from 'zustand/middleware';
|
|
2
|
+
import { shallow } from 'zustand/shallow';
|
|
3
|
+
import { createWithEqualityFn } from 'zustand/traditional';
|
|
4
|
+
import type { StateCreator } from 'zustand';
|
|
5
|
+
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
6
|
+
import type { Customer } from './types/Customer';
|
|
7
|
+
import type { AppConversationMessage } from './types/Conversation';
|
|
8
|
+
import type { LanguageCode } from './types/Language';
|
|
9
|
+
|
|
10
|
+
interface AppStoreState {
|
|
11
|
+
initialized: boolean;
|
|
12
|
+
customer: Customer | null;
|
|
13
|
+
data: AppConversationMessage[] | null;
|
|
14
|
+
externalId: string | null;
|
|
15
|
+
language: LanguageCode;
|
|
16
|
+
theme: 'light' | 'dark';
|
|
17
|
+
fake: boolean;
|
|
18
|
+
firstMessage: AppConversationMessage | null;
|
|
19
|
+
setData: (
|
|
20
|
+
cb: (
|
|
21
|
+
prevData: AppConversationMessage[] | null
|
|
22
|
+
) => AppConversationMessage[] | null
|
|
23
|
+
) => void;
|
|
24
|
+
setFirstMessage: (message: AppConversationMessage | null) => void;
|
|
25
|
+
init: ({ externalId }: { externalId: string }) => void;
|
|
26
|
+
initForm: (createCustomerResponse: Customer) => void;
|
|
27
|
+
setLanguage: (language: LanguageCode) => void;
|
|
28
|
+
setTheme: (theme: 'light' | 'dark') => void;
|
|
29
|
+
setFake: (fake: boolean) => void;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const storeCreator: StateCreator<AppStoreState> = (set, get) => ({
|
|
33
|
+
initialized: false,
|
|
34
|
+
customer: null,
|
|
35
|
+
data: null,
|
|
36
|
+
externalId: null,
|
|
37
|
+
language: 'en',
|
|
38
|
+
theme: 'light',
|
|
39
|
+
fake: false,
|
|
40
|
+
firstMessage: null,
|
|
41
|
+
setData: (cb) => {
|
|
42
|
+
const newData = cb(get().data);
|
|
43
|
+
set({ data: newData });
|
|
44
|
+
},
|
|
45
|
+
setFirstMessage: (message) => {
|
|
46
|
+
set({ firstMessage: message });
|
|
47
|
+
},
|
|
48
|
+
init: ({ externalId }: { externalId: string }) => {
|
|
49
|
+
set({ externalId: externalId, initialized: true });
|
|
50
|
+
},
|
|
51
|
+
initForm: (createCustomerResponse: Customer) => {
|
|
52
|
+
set({ customer: createCustomerResponse });
|
|
53
|
+
},
|
|
54
|
+
setLanguage: (language: LanguageCode) => {
|
|
55
|
+
set({ language });
|
|
56
|
+
},
|
|
57
|
+
setTheme: (theme: 'light' | 'dark') => {
|
|
58
|
+
set({ theme });
|
|
59
|
+
},
|
|
60
|
+
setFake: (fake: boolean) => {
|
|
61
|
+
set({ fake });
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
export const useAppStore = createWithEqualityFn<AppStoreState>()(
|
|
66
|
+
persist(storeCreator, {
|
|
67
|
+
name: 'appStore-9',
|
|
68
|
+
storage: createJSONStorage(() => AsyncStorage),
|
|
69
|
+
skipHydration: false,
|
|
70
|
+
partialize: (state) => ({
|
|
71
|
+
customer: state.customer,
|
|
72
|
+
externalId: state.externalId,
|
|
73
|
+
data: [],
|
|
74
|
+
/* data: state.data
|
|
75
|
+
?.filter((message) => message.approved)
|
|
76
|
+
.map((message) => ({
|
|
77
|
+
...message,
|
|
78
|
+
created_at: message.created_at
|
|
79
|
+
? new Date(message.created_at)
|
|
80
|
+
: undefined,
|
|
81
|
+
})),*/
|
|
82
|
+
}),
|
|
83
|
+
}),
|
|
84
|
+
shallow
|
|
85
|
+
);
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface ConversationMessage {
|
|
2
|
+
id: number;
|
|
3
|
+
content: string;
|
|
4
|
+
created_at: string;
|
|
5
|
+
user: any | null;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export interface AppConversationMessage
|
|
9
|
+
extends Omit<ConversationMessage, 'id' | 'created_at'> {
|
|
10
|
+
id: number | null;
|
|
11
|
+
approved?: boolean;
|
|
12
|
+
created_at: Date;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface ConversationPage {
|
|
16
|
+
current_page: number;
|
|
17
|
+
data: ConversationMessage[];
|
|
18
|
+
first_page_url: string;
|
|
19
|
+
from: number;
|
|
20
|
+
next_page_url: string | null;
|
|
21
|
+
path: string;
|
|
22
|
+
per_page: number; //TODO: backend string gönderiyor, number yapılabilir.
|
|
23
|
+
prev_page_url: string | null;
|
|
24
|
+
to: number;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface ConversationResponse {
|
|
28
|
+
page: ConversationPage;
|
|
29
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface CustomParameter {
|
|
2
|
+
name: string;
|
|
3
|
+
value: string;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export interface CreateCustomerRequest {
|
|
7
|
+
name: string;
|
|
8
|
+
country: string;
|
|
9
|
+
language: string;
|
|
10
|
+
externalId: string;
|
|
11
|
+
email: string;
|
|
12
|
+
phone: string;
|
|
13
|
+
ipAddress: string;
|
|
14
|
+
customParameters?: CustomParameter[];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface Customer {
|
|
18
|
+
id: number;
|
|
19
|
+
project_id: number;
|
|
20
|
+
external_id: string;
|
|
21
|
+
name: string;
|
|
22
|
+
country: string;
|
|
23
|
+
language: string;
|
|
24
|
+
email: string;
|
|
25
|
+
phone: string;
|
|
26
|
+
ip_address: string;
|
|
27
|
+
custom_parameters: string;
|
|
28
|
+
user_code: string;
|
|
29
|
+
updated_at: string;
|
|
30
|
+
created_at: string;
|
|
31
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type LocalizationKeys = {
|
|
2
|
+
'customer.form.title': string;
|
|
3
|
+
'customer.form.email': string;
|
|
4
|
+
'customer.form.phone': string;
|
|
5
|
+
'customer.form.country': string;
|
|
6
|
+
'customer.form.submit': string;
|
|
7
|
+
'customer.form.error': string;
|
|
8
|
+
'customer.form.instructions': string;
|
|
9
|
+
'customer.form.error.country': string;
|
|
10
|
+
'customer.form.error.email': string;
|
|
11
|
+
'customer.form.error.phone': string;
|
|
12
|
+
'customer.form.placeholder.name': string;
|
|
13
|
+
'customer.form.placeholder.country': string;
|
|
14
|
+
'customer.form.placeholder.email': string;
|
|
15
|
+
'customer.form.placeholder.phone': string;
|
|
16
|
+
'chat.messageInput.placeholder': string;
|
|
17
|
+
'app.initialization.required': string;
|
|
18
|
+
'chat.load.error': string;
|
|
19
|
+
'chat.init.error': string;
|
|
20
|
+
'chat.empty': string;
|
|
21
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export interface MessageResponse {
|
|
2
|
+
message: {
|
|
3
|
+
conversation_id: number;
|
|
4
|
+
content: string;
|
|
5
|
+
is_note: boolean;
|
|
6
|
+
updated_at: string;
|
|
7
|
+
created_at: string;
|
|
8
|
+
id: number;
|
|
9
|
+
user: null | any;
|
|
10
|
+
conversation: {
|
|
11
|
+
id: number;
|
|
12
|
+
project_id: number;
|
|
13
|
+
customer_id: number;
|
|
14
|
+
created_at: string;
|
|
15
|
+
updated_at: string;
|
|
16
|
+
deleted_at: null | string;
|
|
17
|
+
language: string;
|
|
18
|
+
use_ai_answers: number;
|
|
19
|
+
project: {
|
|
20
|
+
id: number;
|
|
21
|
+
name: string;
|
|
22
|
+
organization_id: number;
|
|
23
|
+
created_at: string;
|
|
24
|
+
updated_at: string;
|
|
25
|
+
deleted_at: null | string;
|
|
26
|
+
uuid: string;
|
|
27
|
+
organization: {
|
|
28
|
+
id: number;
|
|
29
|
+
name: string;
|
|
30
|
+
created_at: string;
|
|
31
|
+
updated_at: string;
|
|
32
|
+
deleted_at: null | string;
|
|
33
|
+
owner: Array<{
|
|
34
|
+
id: number;
|
|
35
|
+
name: string;
|
|
36
|
+
email: string;
|
|
37
|
+
email_verified_at: null | string;
|
|
38
|
+
created_at: string;
|
|
39
|
+
updated_at: string;
|
|
40
|
+
avatar: null | string;
|
|
41
|
+
two_factor_secret: null | string;
|
|
42
|
+
two_factor_recovery_codes: null | string;
|
|
43
|
+
is_bot: boolean;
|
|
44
|
+
profile_photo_url: string;
|
|
45
|
+
pivot: {
|
|
46
|
+
organization_id: number;
|
|
47
|
+
user_id: number;
|
|
48
|
+
role: string;
|
|
49
|
+
created_at: string;
|
|
50
|
+
updated_at: string;
|
|
51
|
+
};
|
|
52
|
+
}>;
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
events: any[];
|
|
57
|
+
};
|
|
58
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export interface ThemeColors {
|
|
2
|
+
primary: string;
|
|
3
|
+
secondary: string;
|
|
4
|
+
background: string;
|
|
5
|
+
text: string;
|
|
6
|
+
error: string;
|
|
7
|
+
success: string;
|
|
8
|
+
warning: string;
|
|
9
|
+
info: string;
|
|
10
|
+
border: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export const lightTheme: ThemeColors = {
|
|
14
|
+
primary: '#4361EE',
|
|
15
|
+
secondary: '#3A0CA3',
|
|
16
|
+
background: '#FFFFFF',
|
|
17
|
+
text: '#212529',
|
|
18
|
+
error: '#FF3B30',
|
|
19
|
+
success: '#34C759',
|
|
20
|
+
warning: '#FF9500',
|
|
21
|
+
info: '#007AFF',
|
|
22
|
+
border: '#E9ECEF',
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export const darkTheme: ThemeColors = {
|
|
26
|
+
primary: '#4361EE',
|
|
27
|
+
secondary: '#3A0CA3',
|
|
28
|
+
background: '#121212',
|
|
29
|
+
text: '#FFFFFF',
|
|
30
|
+
error: '#FF453A',
|
|
31
|
+
success: '#32D74B',
|
|
32
|
+
warning: '#FF9F0A',
|
|
33
|
+
info: '#0A84FF',
|
|
34
|
+
border: '#2C2C2C',
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export interface Theme {
|
|
38
|
+
light: ThemeColors;
|
|
39
|
+
dark: ThemeColors;
|
|
40
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts a Date object to Unix timestamp (seconds)
|
|
3
|
+
* @param date - The Date object to convert
|
|
4
|
+
* @returns Unix timestamp in seconds, or undefined if date is undefined
|
|
5
|
+
*/
|
|
6
|
+
export const dateToUnixTimestamp = (
|
|
7
|
+
date: Date | undefined
|
|
8
|
+
): number | undefined => {
|
|
9
|
+
if (!date) return undefined;
|
|
10
|
+
return Math.floor(date.getTime() / 1000);
|
|
11
|
+
};
|