init commit,

This commit is contained in:
louiscklaw
2025-05-28 09:55:51 +08:00
commit efe70ceb69
8042 changed files with 951668 additions and 0 deletions

View File

@@ -0,0 +1,396 @@
import { Store } from "pullstate";
const ChatStore = new Store({
chats: [
{
id: 1,
contact_id: 1,
chats: [
{
id: 1,
preview:
"This is a test whatsapp message inside the whatsapp clone app",
received: true,
sent: false,
date: "20:05",
read: false,
starred: false,
},
{
id: 2,
preview:
"This is a test whatsapp message inside the whatsapp clone app",
received: false,
sent: true,
date: "20:05",
read: false,
starred: false,
},
{
id: 3,
preview:
"This is a test whatsapp message inside the whatsapp clone app",
received: true,
sent: false,
date: "20:05",
read: false,
starred: false,
},
{
id: 4,
preview:
"This is a test whatsapp message inside the whatsapp clone app",
received: false,
sent: true,
date: "20:05",
read: false,
starred: false,
},
{
id: 5,
preview:
"This is a test whatsapp message inside the whatsapp clone app",
received: true,
sent: false,
date: "20:05",
read: false,
starred: false,
},
{
id: 6,
preview:
"This is a test whatsapp message inside the whatsapp clone app",
received: false,
sent: true,
date: "20:05",
read: false,
starred: false,
},
{
id: 7,
preview:
"This is a test whatsapp message inside the whatsapp clone app",
received: true,
sent: false,
date: "20:05",
read: false,
starred: false,
},
{
id: 8,
preview:
"This is a test whatsapp message inside the whatsapp clone app",
received: false,
sent: true,
date: "20:05",
read: false,
starred: false,
},
{
id: 9,
preview:
"This is a test whatsapp message inside the whatsapp clone app",
received: true,
sent: false,
date: "20:05",
read: false,
starred: false,
},
{
id: 10,
preview:
"This is a test whatsapp message inside the whatsapp clone app",
received: false,
sent: true,
date: "20:05",
read: false,
starred: false,
},
{
id: 11,
preview:
"This is a test whatsapp message inside the whatsapp clone app",
received: true,
sent: false,
date: "20:05",
read: false,
starred: false,
},
{
id: 12,
preview:
"This is a test whatsapp message inside the whatsapp clone app",
received: false,
sent: true,
date: "20:05",
read: false,
starred: false,
},
{
id: 13,
preview:
"This is a test whatsapp message inside the whatsapp clone app",
received: true,
sent: false,
date: "20:05",
read: false,
starred: false,
},
{
id: 14,
preview:
"This is a test whatsapp message inside the whatsapp clone app",
received: false,
sent: true,
date: "20:10",
read: false,
starred: false,
},
],
},
{
id: 2,
contact_id: 2,
chats: [
{
id: 1,
preview:
"Excited for the Ioniconf 2021! The 23rd can't come quick enough",
received: false,
sent: true,
date: "Yesterday",
read: true,
starred: false,
},
],
},
{
id: 3,
contact_id: 3,
chats: [
{
id: 1,
preview:
"Excited for the Ioniconf 2021! The 23rd can't come quick enough",
received: false,
sent: true,
date: "Saturday",
read: true,
starred: false,
},
],
},
{
id: 4,
contact_id: 4,
chats: [
{
id: 1,
preview: "Hey Alan, this is a test whatsapp message",
received: true,
sent: false,
date: "Friday",
read: false,
starred: false,
},
],
},
{
id: 5,
contact_id: 5,
chats: [
{
id: 1,
preview: "Hey Alan, this is a test whatsapp message",
received: true,
sent: false,
date: "Thursday",
read: false,
starred: false,
},
],
},
{
id: 6,
contact_id: 6,
chats: [
{
id: 1,
preview: "Hey Alan, this is a test received whatsapp message",
received: true,
sent: false,
date: "Wednesday",
read: false,
starred: false,
},
{
id: 2,
preview: "Hey Josh, this is a test sent whatsapp message",
received: true,
sent: true,
date: "Wednesday",
read: true,
starred: false,
},
{
id: 3,
preview: "Awesome man! This seems to be coming together OK!",
received: true,
sent: false,
date: "Wednesday",
read: true,
starred: false,
},
],
},
{
id: 7,
contact_id: 7,
chats: [
{
id: 1,
preview: "Goodluck on the quest to space, the moon and mars!",
received: true,
sent: false,
date: "08/06/2021",
read: true,
starred: false,
},
],
},
{
id: 8,
contact_id: 8,
chats: [
{
id: 1,
preview: "Hey Bill, This is a test sent message to your whatsapp",
received: true,
sent: false,
date: "05/06/2021",
read: true,
starred: false,
},
],
},
{
id: 9,
contact_id: 10,
chats: [
{
id: 1,
preview:
"This is Alans WhatsApp clone using the Ionic Framework and CapacitorJS for some native functionality.",
received: true,
sent: false,
date: "Wednesday",
read: false,
starred: false,
},
{
id: 2,
preview:
"Yep, and don't forget the Ionic Animations for the slick UI transitions you see, and some Ionic Gestures for sliding etc, as well as some other things!",
received: true,
sent: true,
date: "Wednesday",
read: true,
starred: false,
},
{
id: 3,
preview: "Cool! It looks good, can we get another teaser?",
received: true,
sent: false,
date: "Wednesday",
read: true,
starred: false,
},
{
id: 4,
preview: "Sure... I'll post one on Twitter now!",
received: false,
sent: true,
date: "Wednesday",
read: true,
starred: false,
},
],
},
],
});
export const getNotificationCount = (allChats) => {
let notificationCount = 0;
allChats.forEach((chats) => {
chats.chats.forEach((chat) => {
if (!chat.read) {
notificationCount++;
}
});
});
return notificationCount;
};
export const markAllAsRead = (contactId) => {
ChatStore.update((s) => {
const chatIndex = s.chats.findIndex(
(chat) => chat.contact_id === parseInt(contactId),
);
s.chats[chatIndex].chats.forEach((chat) => {
chat.read = true;
});
});
};
export const sendChatMessage = (
contactId,
message,
reply = false,
replyID = false,
image = false,
imagePath = false,
) => {
const today = new Date();
const currentTime = `${today.getHours() < 10 ? `0${today.getHours()}` : today.getHours()}:${today.getMinutes() < 10 ? `0${today.getMinutes()}` : today.getMinutes()}`;
ChatStore.update((s) => {
const chatIndex = s.chats.findIndex(
(chat) => chat.contact_id === parseInt(contactId),
);
const newChat = {
id: s.chats[chatIndex].length + 1,
preview: message,
received: false,
sent: true,
date: currentTime,
read: true,
starred: false,
reply,
replyID,
image: image,
imagePath: imagePath,
};
s.chats[chatIndex].chats.push(newChat);
});
};
export const starChatMessage = (contactId, messageId) => {
ChatStore.update((s) => {
const chatIndex = s.chats.findIndex(
(chat) => chat.contact_id === parseInt(contactId),
);
const messageIndex = s.chats[chatIndex].chats.findIndex(
(message) => message.id === parseInt(messageId),
);
s.chats[chatIndex].chats[messageIndex].starred =
!s.chats[chatIndex].chats[messageIndex].starred;
});
};
export default ChatStore;

View File

@@ -0,0 +1,58 @@
import { Store } from "pullstate";
const ContactStore = new Store({
contacts: [
{
id: 1,
name: "Amy Sister",
avatar: "/assets/amy.jpeg",
},
{
id: 2,
name: "Max Lynch",
avatar: "/assets/max.jpeg",
},
{
id: 3,
name: "Mike Hartington",
avatar: "/assets/mike.jpeg",
},
{
id: 4,
name: "Henk Jurriens",
avatar: "/assets/henk.jpeg",
},
{
id: 5,
name: "Simon Grimm",
avatar: "/assets/simon.jpeg",
},
{
id: 6,
name: "Josh Morony",
avatar: "/assets/josh.jpeg",
},
{
id: 7,
name: "Elon Musk",
avatar: "/assets/elon.jpeg",
},
{
id: 8,
name: "Bill Gates",
avatar: "/assets/bill.jpeg",
},
{
id: 9,
name: "Mark Zuckerberg",
avatar: "/assets/mark.jpeg",
},
{
id: 10,
name: "Ionic Framework (not)",
avatar: "/assets/ionic.png",
},
],
});
export default ContactStore;

View File

@@ -0,0 +1,30 @@
import { createSelector } from "reselect";
const getState = (state) => state;
// General getters
export const getContacts = createSelector(getState, (state) => state.contacts);
export const getChats = createSelector(getState, (state) => state.chats);
// More specific getters
export const getChat = (contactId) =>
createSelector(
getState,
(state) =>
state.chats.filter(
(c) => parseInt(c.contact_id) === parseInt(contactId),
)[0].chats,
);
export const getContact = (contactId) =>
createSelector(
getState,
(state) =>
state.contacts.filter((c) => parseInt(c.id) === parseInt(contactId))[0],
);
export const getChatNotificationCount = (contactId) =>
createSelector(getState, (state) =>
state.chats
.filter((c) => parseInt(c.contact_id) === parseInt(contactId))[0]
.chats.filter((chat) => chat.read === false),
);

View File

@@ -0,0 +1,2 @@
export { default as ContactStore } from "./ContactStore";
export { default as ChatStore } from "./ChatStore";