Closed5

Remix+CloudflareでWebサイトを作る 33(「文A」というアイコン、ショトカのライブラリ、D1はトランザクション未対応、RadixのTabのdefaultValue)

saneatsusaneatsu

【2024-09-08】言語選択アイコンの「文A」って広く浸透していないのでは?

疑問

Xにも投稿したけど、「文A」アイコンを「言語選択だ!」となるのってエンジニア特有で、一般的にはあまり浸透していないのではないかと思った。

この例のように、エンジニアがよく見る技術サイトでは当然のように使われているので今まであまり考えてこなかった。

https://x.com/__saneatsu/status/1832649555139236095

調べてみる

Dribbbleで調べてみると🌏 <selectedLanguage> は王道っぽいし、Xで返信いただいた溝口さんも同様の懸念からそうしているっぽい。

個人的には 🇯🇵 <selectedLanguage>または🇯🇵 単体という国旗の絵文字パターンでも良いかと思っている。なんか国旗のアイコンってその人に対して親しみ合ってポジティブな感じがするんだよな。

その場合「English」って🇬🇧?🇺🇸?
さすがに🇬🇧か。
イギリス英語とアメリカ英語で分ける思想強めなサイトってあるのかな。

https://x.com/__saneatsu/status/1832652221449924761

saneatsusaneatsu

【2024-09-18】D1ではトランザクションが実行できない

背景

最近はもっぱら国際化に伴うDBとUIの修正をしている。
このようなトランザクションを用いた処理を実装したところエラーが発生。

await client.$transaction(async (tx) => {
  await tx.tag.create({
    data: {
      hoge: {
        create: array.map(() => {

        })
      }
    },
  });
});
ErrorType: DefaultError
ErrorTitle: Error
ErrorMessage: Error: Cloudflare D1 does not support interactive transactions. We recommend you to refactor your queries with that limitation in mind, and use batch transactions with `prisma.$transactions([])` where applicable.

Cloudflare D1ではサポートされてないとな...。

調べる

https://zenn.dev/minamiso/articles/885adef7098ebe

今回のケースはこの記事のあるクエリの結果を別のクエリに使えないに該当するパターン。

どうする?

今回の対象テーブルはエラーが発生しうるのはテーブルでカラムAとカラムBの組み合わせが重複する時。
catchした先で delete を実行するのも怖いので、エラーが発生しながらも作成されてしまったデータは手動で削除できるような動線を用意することで一時的に回避しようかと思う。

こんなところに躓きがあるとは。
仕様だからしゃーなし。

ひとこと

多言語対応、2週間くらいやってるけど20%くらいしか進んでない。萎える😔

saneatsusaneatsu

【2024-09-25】RadixのTabを切り替えると、常にdefaultValueの値が表示されてしまう

問題

https://ui.shadcn.com/docs/components/tabs

shadcn/uiのTabsを使用している。
shadcn/uiの中ではRadixを使用している。

このページのデモでも確認できるがタブを切り替えたら値が保持されていなくて、defaultValueの値に戻ってしまっている。

これだとConfomを利用してフォームバリデーションを実装している場合に困ることになる。
このデモページの内容で説明する。

  1. ページにアクセス。「Account」タブが選択されていてその中のInputタグのフォームにdefaultValueが入っている状態
  2. 「Account」タブのInputタグのフォームの値を空にする
  3. ここが必須の場合フォームの周りが赤くなりエラーになる
  4. 「Password」タブに移動する
  5. 再度「Account」タブに移動する

この場合、「手順3によりAccountタブではフォーム周りが赤くなりエラーになっているのにも関わらず、defaultValueの値が入っている」という矛盾が生じてしまう。

解決方法

https://github.com/radix-ui/primitives/discussions/855#discussioncomment-1626807

以下のようにforceMouthiddenを入れると解決できる。
<TabsContent forceMount hidden={value !== data.language} >

forceMouttrueだと選択していなくてもすべての<TabsContent>が強制的に表示される。
この場合、上記のような問題は起きなくなる。
そして hiddenを使って選択しているタブ以外の<TabsContent>を非表示にする、というやり方。

これはこれで記事書こう。

このスクラップは2ヶ月前にクローズされました