chore: update store selector

This commit is contained in:
boojack
2022-05-22 12:41:15 +08:00
parent 948b53393a
commit 2e5b120986
15 changed files with 79 additions and 75 deletions

View File

@ -43,10 +43,8 @@ const getCursorPostion = (input: HTMLTextAreaElement) => {
interface Props {} interface Props {}
const MemoEditor: React.FC<Props> = () => { const MemoEditor: React.FC<Props> = () => {
const { const editorState = useAppSelector((state) => state.editor);
editor: editorState, const tags = useAppSelector((state) => state.memo.tags);
memo: { tags },
} = useAppSelector((state) => state);
const [isTagSeletorShown, toggleTagSeletor] = useToggle(false); const [isTagSeletorShown, toggleTagSeletor] = useToggle(false);
const editorRef = useRef<EditorRefActions>(null); const editorRef = useRef<EditorRefActions>(null);
const prevGlobalStateRef = useRef(editorState); const prevGlobalStateRef = useRef(editorState);

View File

@ -7,9 +7,7 @@ import "../less/memo-filter.less";
interface FilterProps {} interface FilterProps {}
const MemoFilter: React.FC<FilterProps> = () => { const MemoFilter: React.FC<FilterProps> = () => {
const { const query = useAppSelector((state) => state.location.query);
location: { query },
} = useAppSelector((state) => state);
const { tag: tagQuery, duration, type: memoType, text: textQuery, shortcutId } = query ?? {}; const { tag: tagQuery, duration, type: memoType, text: textQuery, shortcutId } = query ?? {};
const shortcut = shortcutId ? shortcutService.getShortcutById(shortcutId) : null; const shortcut = shortcutId ? shortcutService.getShortcutById(shortcutId) : null;
const showFilter = Boolean(tagQuery || (duration && duration.from < duration.to) || memoType || textQuery || shortcut); const showFilter = Boolean(tagQuery || (duration && duration.from < duration.to) || memoType || textQuery || shortcut);

View File

@ -11,10 +11,8 @@ import "../less/memo-list.less";
interface Props {} interface Props {}
const MemoList: React.FC<Props> = () => { const MemoList: React.FC<Props> = () => {
const { const query = useAppSelector((state) => state.location.query);
location: { query }, const memos = useAppSelector((state) => state.memo.memos);
memo: { memos },
} = useAppSelector((state) => state);
const [isFetching, setFetchStatus] = useState(true); const [isFetching, setFetchStatus] = useState(true);
const wrapperElement = useRef<HTMLDivElement>(null); const wrapperElement = useRef<HTMLDivElement>(null);
@ -79,7 +77,6 @@ const MemoList: React.FC<Props> = () => {
const pinnedMemos = shownMemos.filter((m) => m.pinned); const pinnedMemos = shownMemos.filter((m) => m.pinned);
const unpinnedMemos = shownMemos.filter((m) => !m.pinned); const unpinnedMemos = shownMemos.filter((m) => !m.pinned);
const sortedMemos = pinnedMemos.concat(unpinnedMemos).filter((m) => m.rowStatus === "NORMAL"); const sortedMemos = pinnedMemos.concat(unpinnedMemos).filter((m) => m.rowStatus === "NORMAL");
console.log(memos.length, sortedMemos.length);
useEffect(() => { useEffect(() => {
memoService memoService

View File

@ -9,11 +9,8 @@ let prevRequestTimestamp = Date.now();
interface Props {} interface Props {}
const MemosHeader: React.FC<Props> = () => { const MemosHeader: React.FC<Props> = () => {
const { const query = useAppSelector((state) => state.location.query);
location: { query }, const shortcuts = useAppSelector((state) => state.shortcut.shortcuts);
shortcut: { shortcuts },
} = useAppSelector((state) => state);
const [titleText, setTitleText] = useState("MEMOS"); const [titleText, setTitleText] = useState("MEMOS");
useEffect(() => { useEffect(() => {

View File

@ -15,10 +15,8 @@ interface State {
} }
const SettingDialog: React.FC<Props> = (props: Props) => { const SettingDialog: React.FC<Props> = (props: Props) => {
const {
user: { user },
} = useAppSelector((state) => state);
const { destroy } = props; const { destroy } = props;
const user = useAppSelector((state) => state.user.user);
const [state, setState] = useState<State>({ const [state, setState] = useState<State>({
selectedSection: "my-account", selectedSection: "my-account",
}); });

View File

@ -17,8 +17,7 @@ const validateConfig: ValidatorConfig = {
interface Props {} interface Props {}
const MyAccountSection: React.FC<Props> = () => { const MyAccountSection: React.FC<Props> = () => {
const { user: userState } = useAppSelector((state) => state); const user = useAppSelector((state) => state.user.user as User);
const user = userState.user as User;
const [username, setUsername] = useState<string>(user.name); const [username, setUsername] = useState<string>(user.name);
const openAPIRoute = `${window.location.origin}/h/${user.openId}/memo`; const openAPIRoute = `${window.location.origin}/h/${user.openId}/memo`;

View File

@ -12,11 +12,10 @@ import "../less/shortcut-list.less";
interface Props {} interface Props {}
const ShortcutList: React.FC<Props> = () => { const ShortcutList: React.FC<Props> = () => {
const { const query = useAppSelector((state) => state.location.query);
location: { query }, const shortcuts = useAppSelector((state) => state.shortcut.shortcuts);
shortcut: { shortcuts },
} = useAppSelector((state) => state);
const loadingState = useLoading(); const loadingState = useLoading();
const pinnedShortcuts = shortcuts const pinnedShortcuts = shortcuts
.filter((s) => s.rowStatus === "ARCHIVED") .filter((s) => s.rowStatus === "ARCHIVED")
.sort((a, b) => utils.getTimeStampByDate(b.createdTs) - utils.getTimeStampByDate(a.createdTs)); .sort((a, b) => utils.getTimeStampByDate(b.createdTs) - utils.getTimeStampByDate(a.createdTs));

View File

@ -12,10 +12,9 @@ import "../less/siderbar.less";
interface Props {} interface Props {}
const Sidebar: React.FC<Props> = () => { const Sidebar: React.FC<Props> = () => {
const { const { memos, tags } = useAppSelector((state) => state.memo);
memo: { memos, tags }, const user = useAppSelector((state) => state.user.user);
user: { user },
} = useAppSelector((state) => state);
const createdDays = user ? Math.ceil((Date.now() - utils.getTimeStampByDate(user.createdTs)) / 1000 / 3600 / 24) : 0; const createdDays = user ? Math.ceil((Date.now() - utils.getTimeStampByDate(user.createdTs)) / 1000 / 3600 / 24) : 0;
const handleMyAccountBtnClick = () => { const handleMyAccountBtnClick = () => {

View File

@ -15,10 +15,8 @@ interface Tag {
interface Props {} interface Props {}
const TagList: React.FC<Props> = () => { const TagList: React.FC<Props> = () => {
const { const { memos, tags: tagsText } = useAppSelector((state) => state.memo);
location: { query }, const query = useAppSelector((state) => state.location.query);
memo: { memos, tags: tagsText },
} = useAppSelector((state) => state);
const [tags, setTags] = useState<Tag[]>([]); const [tags, setTags] = useState<Tag[]>([]);
useEffect(() => { useEffect(() => {

View File

@ -35,9 +35,7 @@ const UsageHeatMap: React.FC<Props> = () => {
const usedDaysAmount = (tableConfig.width - 1) * tableConfig.height + todayDay; const usedDaysAmount = (tableConfig.width - 1) * tableConfig.height + todayDay;
const beginDayTimestemp = todayTimeStamp - usedDaysAmount * DAILY_TIMESTAMP; const beginDayTimestemp = todayTimeStamp - usedDaysAmount * DAILY_TIMESTAMP;
const { const { memos } = useAppSelector((state) => state.memo);
memo: { memos },
} = useAppSelector((state) => state);
const [allStat, setAllStat] = useState<DailyUsageStat[]>(getInitialUsageStat(usedDaysAmount, beginDayTimestemp)); const [allStat, setAllStat] = useState<DailyUsageStat[]>(getInitialUsageStat(usedDaysAmount, beginDayTimestemp));
const [popupStat, setPopupStat] = useState<DailyUsageStat | null>(null); const [popupStat, setPopupStat] = useState<DailyUsageStat | null>(null);
const [currentStat, setCurrentStat] = useState<DailyUsageStat | null>(null); const [currentStat, setCurrentStat] = useState<DailyUsageStat | null>(null);

View File

@ -7,13 +7,11 @@ import "../less/user-banner.less";
interface Props {} interface Props {}
const UserBanner: React.FC<Props> = () => { const UserBanner: React.FC<Props> = () => {
const { const user = useAppSelector((state) => state.user.user);
user: { user },
} = useAppSelector((state) => state);
const username = user ? user.name : "Memos";
const [shouldShowPopupBtns, setShouldShowPopupBtns] = useState(false); const [shouldShowPopupBtns, setShouldShowPopupBtns] = useState(false);
const username = user ? user.name : "Memos";
const handleUsernameClick = useCallback(() => { const handleUsernameClick = useCallback(() => {
locationService.pushHistory("/"); locationService.pushHistory("/");
locationService.clearQuery(); locationService.clearQuery();

View File

@ -7,9 +7,7 @@ import useLoading from "../hooks/useLoading";
import "../less/home.less"; import "../less/home.less";
function Home() { function Home() {
const { const pathname = useAppSelector((state) => state.location.pathname);
location: { pathname },
} = useAppSelector((state) => state);
const loadingState = useLoading(); const loadingState = useLoading();
useEffect(() => { useEffect(() => {

View File

@ -13,16 +13,27 @@ const memoSlice = createSlice({
} as State, } as State,
reducers: { reducers: {
setMemos: (state, action: PayloadAction<Memo[]>) => { setMemos: (state, action: PayloadAction<Memo[]>) => {
state.memos = action.payload; return {
...state,
memos: action.payload,
};
}, },
setTags: (state, action: PayloadAction<string[]>) => { setTags: (state, action: PayloadAction<string[]>) => {
state.tags = action.payload; return {
...state,
tags: action.payload,
};
}, },
createMemo: (state, action: PayloadAction<Memo>) => { createMemo: (state, action: PayloadAction<Memo>) => {
state.memos = state.memos.concat(action.payload); return {
...state,
memos: state.memos.concat(action.payload).sort((a, b) => b.createdTs - a.createdTs),
};
}, },
patchMemo: (state, action: PayloadAction<Partial<Memo>>) => { patchMemo: (state, action: PayloadAction<Partial<Memo>>) => {
state.memos = state.memos.map((m) => { return {
...state,
memos: state.memos.map((m) => {
if (m.id === action.payload.id) { if (m.id === action.payload.id) {
return { return {
...m, ...m,
@ -31,7 +42,8 @@ const memoSlice = createSlice({
} else { } else {
return m; return m;
} }
}); }),
};
}, },
}, },
}); });

View File

@ -11,13 +11,21 @@ const shortcutSlice = createSlice({
} as State, } as State,
reducers: { reducers: {
setShortcuts: (state, action: PayloadAction<Shortcut[]>) => { setShortcuts: (state, action: PayloadAction<Shortcut[]>) => {
state.shortcuts = action.payload; return {
...state,
shortcuts: action.payload,
};
}, },
createShortcut: (state, action: PayloadAction<Shortcut>) => { createShortcut: (state, action: PayloadAction<Shortcut>) => {
state.shortcuts = state.shortcuts.concat(action.payload); return {
...state,
shortcuts: state.shortcuts.concat(action.payload).sort((a, b) => b.createdTs - a.createdTs),
};
}, },
patchShortcut: (state, action: PayloadAction<Partial<Shortcut>>) => { patchShortcut: (state, action: PayloadAction<Partial<Shortcut>>) => {
state.shortcuts = state.shortcuts.map((s) => { return {
...state,
shortcuts: state.shortcuts.map((s) => {
if (s.id === action.payload.id) { if (s.id === action.payload.id) {
return { return {
...s, ...s,
@ -26,10 +34,14 @@ const shortcutSlice = createSlice({
} else { } else {
return s; return s;
} }
}); }),
};
}, },
deleteShortcut: (state, action: PayloadAction<ShortcutId>) => { deleteShortcut: (state, action: PayloadAction<ShortcutId>) => {
state.shortcuts = [...state.shortcuts].filter((shortcut) => shortcut.id !== action.payload); return {
...state,
shortcuts: [...state.shortcuts].filter((shortcut) => shortcut.id !== action.payload),
};
}, },
}, },
}); });

View File

@ -15,10 +15,13 @@ const userSlice = createSlice({
}; };
}, },
patchUser: (state, action: PayloadAction<Partial<User>>) => { patchUser: (state, action: PayloadAction<Partial<User>>) => {
state.user = { return {
...state,
user: {
...state.user, ...state.user,
...action.payload, ...action.payload,
} as User; } as User,
};
}, },
}, },
}); });