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({
const index = deckStore.decks.findIndex(
(deck) => deck.deckName === deckName,
);
if (index === -1) return false;
if (index === -1) {
// if not existed, create one
await deckStore.add(deck);
return true;
} else {
deckStore.decks[index] = deck;
await del(deckName, deckIdb); // 新的名字可能和旧的名字不一样,所以要删除旧的,再添加
// 新的名字可能和旧的名字不一样,所以要删除旧的,再添加
await del(deckName, deckIdb);
await set(deck.deckName, deck, deckIdb);
return true;
}
},
async add(deck: IDeck): Promise<boolean> {
......
......@@ -10,6 +10,9 @@ import { useConfig } from "@/config";
import { deckStore } from "@/stores";
import { IconFont } from "@/ui/Shared";
import { setSelectedDeck } from "../..";
import { editDeckStore } from "../../store";
import { iDeckToEditingDeck } from "../../utils";
import styles from "./index.module.scss";
const { assetsPath } = useConfig();
......@@ -51,7 +54,7 @@ export const DeckResults: React.FC = memo(() => {
update();
}, [snap.query, snap.page]);
const onchangePage = async (page: number) => {
const onChangePage = async (page: number) => {
const resp = await pullDecks({
page,
size: PAGE_SIZE,
......@@ -83,7 +86,7 @@ export const DeckResults: React.FC = memo(() => {
<div style={{ textAlign: "center", padding: "0.625rem 0 1.25rem" }}>
<Pagination
current={snap.page}
onChange={onchangePage}
onChange={onChangePage}
total={snap.total}
pageSize={PAGE_SIZE}
showLessItems
......@@ -114,7 +117,10 @@ const MdproDeckBlock: React.FC<Snapshot<MdproDeck>> = (deck) => (
</Button>
}
>
<div className={styles["mdpro-deck"]}>
<div
className={styles["mdpro-deck"]}
onClick={async () => await copyMdproDeckToEditing(deck)}
>
<img
src={`${assetsPath}/deck-cases/DeckCase${deck.deckCase
.toString()
......@@ -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 {
const length = Array.from(str).length;
......
......@@ -73,29 +73,35 @@ export const selectedCard = proxy({
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 = () => {
const snapDecks = useSnapshot(deckStore);
const { progress } = useSnapshot(initStore.sqlite);
const [selectedDeck, setSelectedDeck] = useState<IDeck>(
deckStore.decks.at(0) ?? emptyDeck,
);
const { deck: snapSelectedDeck } = useSnapshot(selectedDeck);
const { message } = App.useApp();
const handleDeckEditorReset = async () => {
editDeckStore.set(await iDeckToEditingDeck(selectedDeck));
editDeckStore.set(await iDeckToEditingDeck(selectedDeck.deck as IDeck));
message.info("重置成功");
};
const handleDeckEditorSave = async () => {
const tmpIDeck = editingDeckToIDeck(editDeckStore);
const result = await deckStore.update(selectedDeck.deckName, tmpIDeck);
const result = await deckStore.update(selectedDeck.deck.deckName, tmpIDeck);
if (result) {
setSelectedDeck(tmpIDeck);
message.info("保存成功");
editDeckStore.edited = false;
} else {
editDeckStore.set(await iDeckToEditingDeck(selectedDeck));
editDeckStore.set(await iDeckToEditingDeck(selectedDeck.deck as IDeck));
message.error("保存失败");
editDeckStore.edited = false;
}
......@@ -117,7 +123,7 @@ export const Component: React.FC = () => {
<ScrollableArea className={styles["deck-select-container"]}>
<DeckSelect
decks={snapDecks.decks as IDeck[]}
selected={selectedDeck.deckName}
selected={snapSelectedDeck.deckName}
onSelect={(name) =>
setSelectedDeck(deckStore.get(name) ?? emptyDeck)
}
......@@ -140,7 +146,7 @@ export const Component: React.FC = () => {
<>
<div className={styles.deck}>
<DeckEditor
deck={selectedDeck}
deck={snapSelectedDeck as IDeck}
onClear={editDeckStore.clear}
onReset={handleDeckEditorReset}
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