Commit 265ece97 authored by Chunchi Che's avatar Chunchi Che

optimize

parent 4e07b786
Pipeline #27619 passed with stages
in 7 minutes and 35 seconds
...@@ -26,11 +26,17 @@ export const deckStore = proxy({ ...@@ -26,11 +26,17 @@ export const deckStore = proxy({
const index = deckStore.decks.findIndex( const index = deckStore.decks.findIndex(
(deck) => deck.deckName === deckName, (deck) => deck.deckName === deckName,
); );
if (index === -1) return false; if (index === -1) {
deckStore.decks[index] = deck; // if not existed, create one
await del(deckName, deckIdb); // 新的名字可能和旧的名字不一样,所以要删除旧的,再添加 await deckStore.add(deck);
await set(deck.deckName, deck, deckIdb); return true;
return true; } else {
deckStore.decks[index] = deck;
// 新的名字可能和旧的名字不一样,所以要删除旧的,再添加
await del(deckName, deckIdb);
await set(deck.deckName, deck, deckIdb);
return true;
}
}, },
async add(deck: IDeck): Promise<boolean> { async add(deck: IDeck): Promise<boolean> {
......
...@@ -10,6 +10,9 @@ import { useConfig } from "@/config"; ...@@ -10,6 +10,9 @@ import { useConfig } from "@/config";
import { deckStore } from "@/stores"; import { deckStore } from "@/stores";
import { IconFont } from "@/ui/Shared"; import { IconFont } from "@/ui/Shared";
import { setSelectedDeck } from "../..";
import { editDeckStore } from "../../store";
import { iDeckToEditingDeck } from "../../utils";
import styles from "./index.module.scss"; import styles from "./index.module.scss";
const { assetsPath } = useConfig(); const { assetsPath } = useConfig();
...@@ -51,7 +54,7 @@ export const DeckResults: React.FC = memo(() => { ...@@ -51,7 +54,7 @@ export const DeckResults: React.FC = memo(() => {
update(); update();
}, [snap.query, snap.page]); }, [snap.query, snap.page]);
const onchangePage = async (page: number) => { const onChangePage = async (page: number) => {
const resp = await pullDecks({ const resp = await pullDecks({
page, page,
size: PAGE_SIZE, size: PAGE_SIZE,
...@@ -83,7 +86,7 @@ export const DeckResults: React.FC = memo(() => { ...@@ -83,7 +86,7 @@ export const DeckResults: React.FC = memo(() => {
<div style={{ textAlign: "center", padding: "0.625rem 0 1.25rem" }}> <div style={{ textAlign: "center", padding: "0.625rem 0 1.25rem" }}>
<Pagination <Pagination
current={snap.page} current={snap.page}
onChange={onchangePage} onChange={onChangePage}
total={snap.total} total={snap.total}
pageSize={PAGE_SIZE} pageSize={PAGE_SIZE}
showLessItems showLessItems
...@@ -114,7 +117,10 @@ const MdproDeckBlock: React.FC<Snapshot<MdproDeck>> = (deck) => ( ...@@ -114,7 +117,10 @@ const MdproDeckBlock: React.FC<Snapshot<MdproDeck>> = (deck) => (
</Button> </Button>
} }
> >
<div className={styles["mdpro-deck"]}> <div
className={styles["mdpro-deck"]}
onClick={async () => await copyMdproDeckToEditing(deck)}
>
<img <img
src={`${assetsPath}/deck-cases/DeckCase${deck.deckCase src={`${assetsPath}/deck-cases/DeckCase${deck.deckCase
.toString() .toString()
...@@ -141,6 +147,21 @@ const copyMdproDeckToLocal = async (mdproDeck: MdproDeck) => { ...@@ -141,6 +147,21 @@ const copyMdproDeckToLocal = async (mdproDeck: MdproDeck) => {
} }
}; };
const copyMdproDeckToEditing = async (mdproDeck: MdproDeck) => {
const deck = YGOProDeck.fromYdkString(mdproDeck.deckYdk);
if (!(deck.main.length + deck.extra.length + deck.side.length === 0)) {
const deckName = mdproDeck.deckName;
const ideck = { deckName, ...deck };
const editingDeck = await iDeckToEditingDeck(ideck);
setSelectedDeck(ideck);
editDeckStore.set(editingDeck);
} else {
message.error("卡组解析失败,请联系技术人员解决:<ccc@neos.moe>");
}
};
function truncateString(str: string, maxLen: number): string { function truncateString(str: string, maxLen: number): string {
const length = Array.from(str).length; const length = Array.from(str).length;
......
...@@ -73,29 +73,35 @@ export const selectedCard = proxy({ ...@@ -73,29 +73,35 @@ export const selectedCard = proxy({
open: false, open: false,
}); });
const selectedDeck = proxy<{ deck: IDeck }>({
deck: deckStore.decks.at(0) ?? emptyDeck,
});
export const setSelectedDeck = (deck: IDeck) => {
selectedDeck.deck = deck;
};
export const Component: React.FC = () => { export const Component: React.FC = () => {
const snapDecks = useSnapshot(deckStore); const snapDecks = useSnapshot(deckStore);
const { progress } = useSnapshot(initStore.sqlite); const { progress } = useSnapshot(initStore.sqlite);
const [selectedDeck, setSelectedDeck] = useState<IDeck>( const { deck: snapSelectedDeck } = useSnapshot(selectedDeck);
deckStore.decks.at(0) ?? emptyDeck,
);
const { message } = App.useApp(); const { message } = App.useApp();
const handleDeckEditorReset = async () => { const handleDeckEditorReset = async () => {
editDeckStore.set(await iDeckToEditingDeck(selectedDeck)); editDeckStore.set(await iDeckToEditingDeck(selectedDeck.deck as IDeck));
message.info("重置成功"); message.info("重置成功");
}; };
const handleDeckEditorSave = async () => { const handleDeckEditorSave = async () => {
const tmpIDeck = editingDeckToIDeck(editDeckStore); const tmpIDeck = editingDeckToIDeck(editDeckStore);
const result = await deckStore.update(selectedDeck.deckName, tmpIDeck); const result = await deckStore.update(selectedDeck.deck.deckName, tmpIDeck);
if (result) { if (result) {
setSelectedDeck(tmpIDeck); setSelectedDeck(tmpIDeck);
message.info("保存成功"); message.info("保存成功");
editDeckStore.edited = false; editDeckStore.edited = false;
} else { } else {
editDeckStore.set(await iDeckToEditingDeck(selectedDeck)); editDeckStore.set(await iDeckToEditingDeck(selectedDeck.deck as IDeck));
message.error("保存失败"); message.error("保存失败");
editDeckStore.edited = false; editDeckStore.edited = false;
} }
...@@ -117,7 +123,7 @@ export const Component: React.FC = () => { ...@@ -117,7 +123,7 @@ export const Component: React.FC = () => {
<ScrollableArea className={styles["deck-select-container"]}> <ScrollableArea className={styles["deck-select-container"]}>
<DeckSelect <DeckSelect
decks={snapDecks.decks as IDeck[]} decks={snapDecks.decks as IDeck[]}
selected={selectedDeck.deckName} selected={snapSelectedDeck.deckName}
onSelect={(name) => onSelect={(name) =>
setSelectedDeck(deckStore.get(name) ?? emptyDeck) setSelectedDeck(deckStore.get(name) ?? emptyDeck)
} }
...@@ -140,7 +146,7 @@ export const Component: React.FC = () => { ...@@ -140,7 +146,7 @@ export const Component: React.FC = () => {
<> <>
<div className={styles.deck}> <div className={styles.deck}>
<DeckEditor <DeckEditor
deck={selectedDeck} deck={snapSelectedDeck as IDeck}
onClear={editDeckStore.clear} onClear={editDeckStore.clear}
onReset={handleDeckEditorReset} onReset={handleDeckEditorReset}
onSave={handleDeckEditorSave} onSave={handleDeckEditorSave}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment