新規作成リンクをクリックしたら新規作成ダイアログが表示されるべき
複数付箋追加が行われた時、バラの付箋であるべきか、グループ化されているべきか
→グループ化されててOK
「新規作成に直感的でない2操作が必要、さらにオススメの初期状態にするために正解のわかりにくい操作が必要」が悪い
なぜ?
新規作成リンク
Create Blank Map
クラウド保存済みリンク
ルーティングがどうであるべきか
$ npx cypress open
:
You are currently running Version 7.7.0
To get the latest, run the following command*:
npm:npm install --save-dev cypress@8.0.0
Regroupのコードを見る
import { Route, RouteComponentProps } from "react-router";
import { HashRouter } from "react-router-dom";
...
<HashRouter>
<Route path="/:id" component={WhenHashSpecified} />
<Route exact path="/">
...
...
const WhenHashSpecified: React.FC<RouteComponentProps<{
id: string;
}>> = props => {
return <App urlParam={props.match.params.id} />;
};
というわけでルーティング部分を実装した
テストコードのcy.visit("/")をcy.visit("/#blank")に変えたらテストがこけた
こけた原因はcy.visit("/#blank")でアプリの状態がリセットされないこと
cy.visit("/")ではリセットされてたよね?cy.visit("/") の後の(A)では状態がリセットされているが、 cy.visit("/#blank")の後の(B)では値がリセットされていない
ts
describe("visit_reset", () => {
beforeEach(() => {
cy.visit("/");
});
it("main", () => {
cy.updateGlobal((g) => {
g.scale = 2;
})
cy.getGlobal(g => g.scale).should("eql", 2);
cy.visit("/");
cy.getGlobal(g => g.scale).should("eql", 1); // (A)
cy.updateGlobal((g) => {
g.scale = 2;
})
cy.visit("/#blank");
cy.getGlobal(g => g.scale).should("eql", 2); // (B)
});
});
reported https://github.com/cypress-io/cypress/issues/17479
テスト用のページに新しいURLを割り当てて、ルートにアクセスしたら付箋追加ダイアログが開いた状態で開始するようになった
次は複数付箋の追加をつける
その次
2021-07-20Movidea開発日記の図に加筆
うーむ、記法をなんとかしないと
stopPropagation、そんな目立つ必要ないな、あと動的スコープはもっとはっきりしてた方がいいし、色が同じであることで同じものと認識するのは良くないな、名前があるべき
いま「選択状態か」が「選択されたものが存在するか」で判断してるけど、選択範囲に対象が存在しなかった時に選択範囲表示を消すか、選択対象がなくても選択状態に入るようにすべきか
閉じたグループの表札付箋を普通の付箋と同様にレンダリングしようとしてコードを再利用したのが良くなかった
付箋のdragstartが親のグループに伝搬しないようにする必要がある
できた
パターン発見した
キャンバスにドロップしたのかグループにドロップしたのかによって挙動が変わるなら今どちらであるのかをユーザがわかる必要がある
この実装で、図解にない処理が必要になった
ts
let enter_count = 0;
const onDragEnter = (e: React.DragEvent<HTMLDivElement>) => {
enter_count++;
if (self.current !== null) {
self.current.style.borderColor = GROUP_HIGHLIGHTED_BORDER_COLOR;
}
e.stopPropagation();
}
const onDragLeave = (e: React.DragEvent<HTMLDivElement>) => {
enter_count--;
if (self.current !== null && enter_count === 0) {
self.current.style.borderColor = GROUP_BORDER_COLOR;
}
e.stopPropagation();
}
const onDrop = (e: React.DragEvent<HTMLDivElement>) => {
if (self.current !== null) {
self.current.style.borderColor = GROUP_BORDER_COLOR;
}
onGroupDrop(e, value);
}