今日の一枚
ダイアログは一度に一つしか出ないので個別にbooleanで管理するのではなく名前で管理するのが良いと思っている
type TDialog = "" | "AddFusen";
ts
const AddFusenDialog = () => {
const [dialog, setDialog] = useGlobal("dialog");
const open = dialog === "AddFusen";
const onClose = () => {
setDialog("");
};
return (
<Dialog open={open} fullWidth={true} fullScreen={true} onClose={onClose}>
...
ts
describe("dialog", () => {
beforeEach(() => {
cy.visit("/");
});
it("main", () => {
cy.contains("Add Fusens").should("not.exist");
cy.updateGlobal((g) => {
g.dialog = "AddFusen";
});
cy.contains("Add Fusens").should("exist");
cy.contains("Close").click();
cy.contains("Add Fusens").should("not.exist");
});
});
ところでユーザに見せる名前をFusenにするかどうか
メニューバーに貴重な画面スペースを独占させない強い意志…
メニュー
付箋にもメニューがでる
気に入らないので直した
こざね法を読み返してみて、自分が作ってるものはKJ法よりはこざね法の方だなぁという気がした
KJ法...複数の人たちの「衆知をあつめる」法として、おおいに評価されて、各種の企業でも実用化されているようだ。わたしがここに紹介したこざね法というのは、単数個人用の、いわば密室むき知的生産技術であって、川喜田君の体系でいえば、比較的素朴で、初歩的な技法に属する。かれの体系のなかでは、「KJ法B型による文章化」とよばれているものと、ほぼおなじである。
drag/drop
座標系変換を実装したがテストが難しい。下記ではダメ test.ts
cy.testid("2").should(
"hasPosition",
movidea.world_to_screen([top, left])
);
なぜなら時刻T1で座標変換が先に処理されてしまうから。後から非同期でリトライをしても「目標とすべき値」は先に計算して固定されてるので意味がない。 test.ts
cy.testid("2").should(
"hasPosition",
T1
);
座標計算自体をリトライさせるには…と、考えてthenの中に入れた test.ts
cy.testid("2").then((el) => {
return cy
.wrap(el)
.should("hasPosition", movidea.world_to_screen([top, left]));
これでも直前の状態更新が非同期だとうまくいかない、デフォルト非同期にしてたが、デフォルト同期にして非同期が必要な時だけオプションで指定することにした、なぜか同期でもテストは全部通った。
翌日の追記
中央以外をつかんでドラッグするテスト、2回目のドラッグだけ不可解なズレが発生したり、元に戻るはずの中央ドラッグで全然元に戻らなかったりする
中央以外を掴んでドラッグができるようになった