mirror of
https://github.com/usememos/memos.git
synced 2025-06-05 22:09:59 +02:00
chore: update store selector
This commit is contained in:
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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
|
||||||
|
@ -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(() => {
|
||||||
|
@ -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",
|
||||||
});
|
});
|
||||||
|
@ -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`;
|
||||||
|
|
||||||
|
@ -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));
|
||||||
|
@ -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 = () => {
|
||||||
|
@ -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(() => {
|
||||||
|
@ -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);
|
||||||
|
@ -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();
|
||||||
|
@ -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(() => {
|
||||||
|
@ -13,25 +13,37 @@ 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 {
|
||||||
if (m.id === action.payload.id) {
|
...state,
|
||||||
return {
|
memos: state.memos.map((m) => {
|
||||||
...m,
|
if (m.id === action.payload.id) {
|
||||||
...action.payload,
|
return {
|
||||||
};
|
...m,
|
||||||
} else {
|
...action.payload,
|
||||||
return m;
|
};
|
||||||
}
|
} else {
|
||||||
});
|
return m;
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
};
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@ -11,25 +11,37 @@ 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 {
|
||||||
if (s.id === action.payload.id) {
|
...state,
|
||||||
return {
|
shortcuts: state.shortcuts.map((s) => {
|
||||||
...s,
|
if (s.id === action.payload.id) {
|
||||||
...action.payload,
|
return {
|
||||||
};
|
...s,
|
||||||
} else {
|
...action.payload,
|
||||||
return s;
|
};
|
||||||
}
|
} else {
|
||||||
});
|
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),
|
||||||
|
};
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@ -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,
|
||||||
...action.payload,
|
user: {
|
||||||
} as User;
|
...state.user,
|
||||||
|
...action.payload,
|
||||||
|
} as User,
|
||||||
|
};
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user