Browse Source

Fix scrolling for over-long lists.

main
Titouan Rigoudy 4 years ago
parent
commit
282b587568
5 changed files with 36 additions and 37 deletions
  1. +18
    -3
      src/components/SearchableList.tsx
  2. +8
    -13
      src/modules/room/RoomList.tsx
  3. +1
    -6
      src/modules/room/message.ts
  4. +1
    -2
      src/modules/room/slice.ts
  5. +8
    -13
      src/modules/user/UserList.tsx

+ 18
- 3
src/components/SearchableList.tsx View File

@ -1,4 +1,4 @@
import { Component, FC, useState } from "react";
import { Component, FC, ReactEventHandler, useState } from "react";
interface ItemProps<Item> {
name: string;
@ -6,11 +6,18 @@ interface ItemProps<Item> {
}
interface ListProps<Item> {
title: string;
onRefresh: ReactEventHandler;
component: Component<ItemProps<Item>>;
map: { [key: string]: Item };
}
const SearchableList: FC<ListProps<Item>> = ({ component, map }) => {
const SearchableList: FC<ListProps<Item>> = ({
title,
onRefresh,
component,
map,
}) => {
const [filter, setFilter] = useState<string>("");
const onChange: ReactEventHandler = (event) => {
@ -25,7 +32,15 @@ const SearchableList: FC<ListProps<Item>> = ({ component, map }) => {
}
return (
<div className="flex flex-col h-full px-3">
<div className="flex flex-col px-3 h-full">
<div className="flex justify-between p-3">
<h1 className="pl-3 text-2xl font-bold text-yellow-800 text-center">
{title}
</h1>
<button onClick={onRefresh} className="button">
Refresh
</button>
</div>
<form className="flex gap-3 p-3">
<label htmlFor="filter" className="self-center">
Filter:


+ 8
- 13
src/modules/room/RoomList.tsx View File

@ -1,4 +1,4 @@
import { FC } from "react";
import { FC, ReactEventHandler } from "react";
import { useDispatch } from "react-redux";
import SearchableList from "components/SearchableList";
@ -8,23 +8,18 @@ import { RoomSliceState, roomGetAll } from "modules/room/slice";
const RoomList: FC<RoomSliceState> = ({ rooms }) => {
const dispatch = useDispatch();
const onClick: ReactEventHandler = (event) => {
const onRefresh: ReactEventHandler = (event) => {
event.preventDefault();
dispatch(roomGetAll());
};
return (
<div className="h-full">
<div className="flex justify-between p-3">
<h1 className="pl-3 text-2xl font-bold text-yellow-800 text-center">
Chat Rooms
</h1>
<button onClick={onClick} className="button">
Refresh
</button>
</div>
<SearchableList component={RoomListEntry} map={rooms} />
</div>
<SearchableList
title="Chat Rooms"
onRefresh={onRefresh}
component={RoomListEntry}
map={rooms}
/>
);
};


+ 1
- 6
src/modules/room/message.ts View File

@ -82,12 +82,7 @@ function handleRoomJoinResponse(dispatch: AppDispatch, response): void {
}
function handleRoomLeaveResponse(dispatch: AppDispatch, response): void {
dispatch(
roomSetMembership([
response.room_name,
RoomMembership.Left,
])
);
dispatch(roomSetMembership([response.room_name, RoomMembership.Left]));
}
function roomListRequest(): SocketMessage {


+ 1
- 2
src/modules/room/slice.ts View File

@ -63,8 +63,7 @@ export const roomSlice = createSlice({
room.membership = membership;
},
roomSetState: (state: RoomSliceState,
action: PayloadAction<RoomState>) => {
roomSetState: (state: RoomSliceState, action: PayloadAction<RoomState>) => {
const room = action.payload;
state.rooms[room.name] = room;
},


+ 8
- 13
src/modules/user/UserList.tsx View File

@ -1,4 +1,4 @@
import { FC } from "react";
import { FC, ReactEventHandler } from "react";
import { useDispatch } from "react-redux";
import SearchableList from "components/SearchableList";
@ -12,23 +12,18 @@ interface Props {
const UserList: FC<Props> = ({ users }) => {
const dispatch = useDispatch();
const onClick: ReactEventHandler = (event) => {
const onRefresh: ReactEventHandler = (event) => {
event.preventDefault();
dispatch(userGetAll());
};
return (
<div>
<div className="flex justify-between p-3">
<h1 className="pl-3 text-2xl font-bold text-yellow-800 text-center">
Users
</h1>
<button onClick={onClick} className="button">
Refresh
</button>
</div>
<SearchableList component={UserListEntry} map={users} />
</div>
<SearchableList
title="Users"
onRefresh={onRefresh}
component={UserListEntry}
map={users}
/>
);
};


Loading…
Cancel
Save