2023-06-12 21:15:23 +10:00
|
|
|
import produce from 'immer';
|
|
|
|
|
import { atom } from 'jotai';
|
|
|
|
|
import { MatrixClient } from 'matrix-js-sdk';
|
|
|
|
|
|
|
|
|
|
type RoomInfo = {
|
|
|
|
|
roomId: string;
|
|
|
|
|
timestamp: number;
|
|
|
|
|
};
|
|
|
|
|
type TabToRoom = Map<string, RoomInfo>;
|
|
|
|
|
|
|
|
|
|
type TabToRoomAction = {
|
|
|
|
|
type: 'PUT';
|
|
|
|
|
tabInfo: { tabId: string; roomInfo: RoomInfo };
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const baseTabToRoom = atom<TabToRoom>(new Map());
|
2024-01-21 23:50:56 +11:00
|
|
|
export const tabToRoomAtom = atom<TabToRoom, [TabToRoomAction], undefined>(
|
2023-06-12 21:15:23 +10:00
|
|
|
(get) => get(baseTabToRoom),
|
|
|
|
|
(get, set, action) => {
|
|
|
|
|
if (action.type === 'PUT') {
|
|
|
|
|
set(
|
|
|
|
|
baseTabToRoom,
|
|
|
|
|
produce(get(baseTabToRoom), (draft) => {
|
|
|
|
|
draft.set(action.tabInfo.tabId, action.tabInfo.roomInfo);
|
|
|
|
|
})
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
export const useBindTabToRoomAtom = (mx: MatrixClient) => {
|
|
|
|
|
console.log(mx);
|
|
|
|
|
// TODO:
|
|
|
|
|
};
|