KDP(電子出版)のメモ 急急如律令

Amazon Kindleダイレクト・パブリッシングでの電子出版や電子書籍の作成販売について、文章やイラストの作成や編集方法について書いています。

カテゴリー、出版社、検索語句で絞り込んで表示機能の修正

検索しやすくしたサイト kyukyunyorituryo.github.io

全体のデータを読み込んで、カテゴリー、出版社、検索語句で絞り込んで表示する。 初めて表示するときはアダルトカテゴリーを除く。 カテゴリーc、出版社p、検索語句wと記号で書いて

  1. アダルト許可が選択されていないときはアダルト除去
  2. cpwのどれかが !=""のときはcpwのフィルター処理をする
  3. cp = allをクリックするかw=””にしたらcpw=""にリセットする
  const [adult, setAdult] = useState(false);
  const [inputValue, setInputValue] = useState("");
  const [selCate, setSelCate] = useState("");
  const [selPub, setSelPub] = useState("");

var filteredList = book.filter((post) => {
    //console.log(inputValue)
    //console.log(post)
    //アダルトa、カテゴリーc、出版社p、語句検索w、
    //return a && c && p && w
    //アダルト除去
    var a=true ; var c=true; var p=true; var w=true;
    if (!adult) {
      const cate = post.Category.split(',')
      a= [...cate].filter(item => !cate.includes('アダルト') && !cate.includes('HOTW_Test_アダルト')).length > 0
    }
    if (selCate === "all" && selPub === "all") {
      return book
    }
    // カテゴリー絞り込み
    if (selCate !== "") {
      //console.log(post.Category)
      const cate = post.Category.split(',')
      c= [...cate, ...selCate].filter(item => cate.includes(item) && selCate.includes(item)).length > 0
      //return book.Category === category
    }
    //出版社絞り込み
    if (selPub !== "") {
      //console.log(post.Category)
      const pub = post.Publisher.split(',')
      p= [...pub, ...selPub].filter(item => pub.includes(item) && selPub.includes(item)).length > 0
      //return book.Category === category
    }
    // フリーキーワードでの絞り込み
    if (inputValue !== "") {

      w= Object.values(post).filter(item =>
        item !== undefined && item !== null && item.toString().toUpperCase().indexOf(inputValue.toString().toUpperCase()) !== -1).length > 0
    }
    return a && c && p && w

  });
  const selectCategory = (category) => {
    setSelCate(category)
  }
  const selectPublisher = (publisher) => {
    setSelPub(publisher)
  }
  const reset = (e) => {
    setSelPub("")
    setSelCate("")
    setInputValue("")
  }
  const handleInputChange = (e) => {
    setInputValue(e.target.value);
  };

return (
    <>
      {/* カテゴリー選択ボタン */}
      <div>
        <h4>クリックしてカテゴリーと出版社で絞り込みが可能</h4>
        {/*<details> <summary><strong>クリックしてカテゴリー選択ボタンの表示</strong></summary>*/}
        <p>カテゴリー:アダルト許可 <input type="checkbox" id="switch" checked={adult}onChange={() => setAdult(prev => !prev)} /><button className="categorybutton" onClick={() => reset()}>全て</button>
          {categories.map((category) => (
            <button className="categorybutton" onClick={() => selectCategory(category)}>{category}</button>
          ))}</p>{/*</details>*/}
        {/* 出版社選択ボタン */}
        <details> <summary><strong>クリックして出版社選択ボタンの表示</strong></summary>
          <p>出版社:
            <button className="categorybutton" onClick={() => reset()}>全て</button>
            {publishers.map((publisher) => (
              <button className="categorybutton" onClick={() => selectPublisher(publisher)}>{publisher}</button>
            ))}</p></details>
      </div>

      {/* フリーキーワード検索フォーム */}
      <div>
        <h4>フリーキーワード検索</h4>
        <input type="text" value={inputValue} onChange={handleInputChange} />
      </div>

      <Paginate itemsPerPage={10} items={filteredList} />
    </>
  );
}

99nyorituryo.hatenablog.com

himenon.github.io