think/packages/client/src/data/message.ts

84 lines
1.6 KiB
TypeScript
Raw Normal View History

2022-03-12 02:31:03 +00:00
import type { IMessage } from '@think/domains';
2022-05-02 07:30:22 +00:00
import React, { useState, useCallback } from 'react';
2022-03-12 02:31:03 +00:00
import useSWR from 'swr';
2022-04-01 04:13:23 +00:00
import { HttpClient } from 'services/http-client';
2022-02-20 11:51:55 +00:00
/**
*
* @returns
*/
export const useAllMessages = () => {
const [page, setPage] = useState(1);
const { data, error, mutate } = useSWR<{
data: Array<IMessage>;
total: number;
}>(`/message/all?page=${page}`, (url) => HttpClient.get(url), {
2022-03-11 06:24:54 +00:00
refreshInterval: 200,
2022-02-20 11:51:55 +00:00
});
const loading = !data && !error;
return {
data,
loading,
error,
page,
setPage,
};
};
/**
*
* @returns
*/
export const useReadMessages = () => {
const [page, setPage] = useState(1);
const { data, error, mutate } = useSWR<{
data: Array<IMessage>;
total: number;
}>(`/message/read?page=${page}`, (url) => HttpClient.get(url), {
2022-03-11 06:24:54 +00:00
refreshInterval: 200,
2022-02-20 11:51:55 +00:00
});
const loading = !data && !error;
return {
data,
loading,
error,
page,
setPage,
};
};
/**
*
* @returns
*/
export const useUnreadMessages = () => {
const [page, setPage] = useState(1);
const { data, error, mutate } = useSWR<{
data: Array<IMessage>;
total: number;
}>(`/message/unread?page=${page}`, (url) => HttpClient.get(url), {
2022-03-11 06:24:54 +00:00
refreshInterval: 200,
2022-02-20 11:51:55 +00:00
});
const loading = !data && !error;
2022-05-02 07:30:22 +00:00
const readMessage = useCallback(
async (messageId) => {
const ret = await HttpClient.post(`/message/read/${messageId}`);
mutate();
return ret;
},
[mutate]
);
2022-02-20 11:51:55 +00:00
return {
data,
loading,
error,
page,
setPage,
readMessage,
};
};