fix: highlight active page

This commit is contained in:
ascarbek 2023-03-05 23:34:46 +06:00
parent 543846c241
commit e297769ac2
5 changed files with 26 additions and 3 deletions

View File

@ -1,14 +1,16 @@
import { useAppSelector } from '../../../stores/store';
import { useAppDispatch, useAppSelector } from '../../../stores/store';
import { useNavigate } from 'react-router-dom';
import { IPage } from '../../../stores/reducers/pages/slice';
import { ViewLayoutTypePB } from '../../../../services/backend';
import { MouseEventHandler, useState } from 'react';
import { activePageIdActions } from '../../../stores/reducers/activePageId/slice';
// number of pixels from left side of screen to show hidden navigation panel
const FLOATING_PANEL_SHOW_WIDTH = 10;
const FLOATING_PANEL_HIDE_EXTRA_WIDTH = 10;
export const useNavigationPanelHooks = function () {
const dispatch = useAppDispatch();
const folders = useAppSelector((state) => state.folders);
const pages = useAppSelector((state) => state.pages);
const width = useAppSelector((state) => state.navigationWidth);
@ -52,6 +54,8 @@ export const useNavigationPanelHooks = function () {
}
})();
dispatch(activePageIdActions.setActivePageId(page.id));
navigate(`/page/${pageTypeRoute}/${page.id}`);
};

View File

@ -1,5 +1,5 @@
import { IPage, pagesActions } from '../../../stores/reducers/pages/slice';
import { useAppDispatch } from '../../../stores/store';
import { useAppDispatch, useAppSelector } from '../../../stores/store';
import { useState } from 'react';
import { nanoid } from 'nanoid';
import { ViewBackendService } from '../../../stores/effects/folder/view/view_bd_svc';
@ -9,6 +9,7 @@ export const usePageEvents = (page: IPage) => {
const appDispatch = useAppDispatch();
const [showPageOptions, setShowPageOptions] = useState(false);
const [showRenamePopup, setShowRenamePopup] = useState(false);
const activePageId = useAppSelector((state) => state.activePageId);
const viewBackendService: ViewBackendService = new ViewBackendService(page.id);
const error = useError();
@ -69,5 +70,6 @@ export const usePageEvents = (page: IPage) => {
duplicatePage,
closePopup,
closeRenamePopup,
activePageId,
};
};

View File

@ -20,13 +20,16 @@ export const PageItem = ({ page, onPageClick }: { page: IPage; onPageClick: () =
duplicatePage,
closePopup,
closeRenamePopup,
activePageId,
} = usePageEvents(page);
return (
<div className={'relative'}>
<div
onClick={() => onPageClick()}
className={'flex cursor-pointer items-center justify-between rounded-lg py-2 pl-8 pr-4 hover:bg-surface-2 '}
className={`flex cursor-pointer items-center justify-between rounded-lg py-2 pl-8 pr-4 hover:bg-surface-2 ${
activePageId === page.id ? 'bg-surface-2' : ''
}`}
>
<button className={'flex min-w-0 flex-1 items-center'}>
<i className={'ml-1 mr-1 h-[16px] w-[16px]'}>

View File

@ -0,0 +1,12 @@
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
export const activePageIdSlice = createSlice({
name: 'activePageId',
initialState: '',
reducers: {
setActivePageId(state, action: PayloadAction<string>) {
return action.payload;
},
},
});
export const activePageIdActions = activePageIdSlice.actions;

View File

@ -16,6 +16,7 @@ import { workspaceSlice } from './reducers/workspace/slice';
import { databaseSlice } from './reducers/database/slice';
import { boardSlice } from './reducers/board/slice';
import { errorSlice } from './reducers/error/slice';
import { activePageIdSlice } from './reducers/activePageId/slice';
const listenerMiddlewareInstance = createListenerMiddleware({
onError: () => console.error,
@ -25,6 +26,7 @@ const store = configureStore({
reducer: {
[foldersSlice.name]: foldersSlice.reducer,
[pagesSlice.name]: pagesSlice.reducer,
[activePageIdSlice.name]: activePageIdSlice.reducer,
[navigationWidthSlice.name]: navigationWidthSlice.reducer,
[currentUserSlice.name]: currentUserSlice.reducer,
[gridSlice.name]: gridSlice.reducer,