// pages.jsx — トップページ・一覧ページ・絞り込みパネル
const { useState: useStateP, useMemo: useMemoP } = React;
// トップページに内包する読み物コンテンツ
const EATING_TIPS = [
{ t: "そのまま", body: "封を開けてそのまま。素材本来の甘みと、ねっとり・もっちりの食感をいちばんシンプルに楽しめます。" },
{ t: "炙る", body: "トースターやグリルで両面を1〜2分。香ばしさが立ち、表面はカリッ、中はとろける食感に変わります。" },
{ t: "バター焼き", body: "フライパンに少量のバターで焼くと、塩気と甘みが絶妙。おやつにもおつまみにもおすすめです。" },
{ t: "アレンジ", body: "刻んでヨーグルトやアイスに、天ぷらや炊き込みご飯の具にも。料理の素材としても優秀です。" },
];
const STORAGE_TIPS = [
{ t: "常温", body: "未開封なら直射日光を避けた涼しい場所で。表示の賞味期限内に食べきりましょう。" },
{ t: "冷蔵", body: "開封後は乾燥を防ぐため密閉して冷蔵庫へ。固くなったらレンジや炙りで温めると食感が戻ります。" },
{ t: "冷凍", body: "長期保存は小分けして冷凍が便利。半解凍ならアイス感覚、しっかり解凍でしっとり食感に。" },
];
// ===== 絞り込みパネル =====
function FilterPanel({ filters, setFilters, counts, onClose }) {
const toggle = (key, id) => {
setFilters((f) => {
const cur = f[key] || [];
const arr = cur.includes(id) ? cur.filter((x) => x !== id) : [...cur, id];
return { ...f, [key]: arr };
});
};
const setPrice = (id) => setFilters((f) => ({ ...f, price: f.price === id ? null : id }));
const setRating = (id) => setFilters((f) => ({ ...f, minRating: f.minRating === id ? null : id }));
const clearAll = () => setFilters({ variety: [], origin: [], shape: [], hardness: [], maker: [], tag: [], price: null, minRating: null });
const hasAny = filters.variety.length || (filters.origin || []).length || filters.shape.length || filters.hardness.length || filters.maker.length ||
filters.tag.length || filters.price || filters.minRating;
const PRICE_BANDS = [
{ id: "a", label: "〜1,000円", test: (p) => p.price < 1000 },
{ id: "b", label: "1,000〜1,500円", test: (p) => p.price >= 1000 && p.price < 1500 },
{ id: "c", label: "1,500〜2,000円", test: (p) => p.price >= 1500 && p.price < 2000 },
{ id: "d", label: "2,000円〜", test: (p) => p.price >= 2000 },
];
const TAGS = ["無添加", "国産", "ギフト", "個包装", "大容量", "訳あり", "希少"];
const Opt = ({ on, onClick, name, cnt, radio }) => (
{on && }
{name}
{cnt != null && {cnt}}
);
return (
絞り込み
{hasAny ? すべて解除 : 条件で探す}
芋の品種
{VARIETIES.map((v) => (
toggle("variety", v.id)}
name={v.name} cnt={counts.variety[v.id] || 0} />
))}
形状
{SHAPES.map((s) => (
toggle("shape", s.id)}
name={s.name} cnt={counts.shape[s.id] || 0} />
))}
原料産地
{(window.ORIGINS || []).map((o) => (
toggle("origin", o.id)}
name={o.name} cnt={(counts.origin || {})[o.id] || 0} />
))}
硬さ
{HARDNESS.map((h) => (
toggle("hardness", h.id)}
name={h.name} cnt={counts.hardness[h.id] || 0} />
))}
メーカー・産地
{MAKERS.map((m) => (
toggle("maker", m.id)}
name={m.name} cnt={counts.maker[m.id] || 0} />
))}
価格帯
{PRICE_BANDS.map((b) => (
setPrice(b.id)} name={b.label} />
))}
評価
{[4.5, 4.0, 3.5].map((r) => (
setRating(r)}
name={`★ ${r.toFixed(1)} 以上`} />
))}
こだわり
{TAGS.map((t) => (
toggle("tag", t)} name={t} />
))}
{onClose && (
)}
);
}
// ===== トップページ =====
function TopPage({ onGoList, onOpen }) {
const top = [...PRODUCTS].sort((a, b) => a.rank - b.rank).slice(0, 8);
const totalReviews = PRODUCTS.reduce((s, p) => s + ((p.reviews || []).length), 0);
// ヒーロー=最新登録の商品(_seq が小さいほど新しい。無ければ人気No.1)
const hero = [...PRODUCTS].sort((a, b) =>
((a._seq != null ? a._seq : 999) - (b._seq != null ? b._seq : 999)) || (a.rank - b.rank))[0];
const isNew = hero && hero._seq != null;
return (
{/* ヒーロー */}
国内の干し芋を、まとめて比較
あなた好みの
干し芋が、きっと見つかる。
品種・形状・メーカーで絞り込み、甘さや味わいのスコアとレビューを見比べて選べる、
干し芋の比較・レビューサイトです。
hero && onOpen(hero)} style={{ cursor: hero ? "pointer" : "default" }}>
{hero
?
:
}
{hero && (
{isNew ? "新着ピックアップ" : "今週の人気No.1"}
{hero.name}
)}
{/* 品種から探す(品種ガイド兼用) */}
{VARIETIES.map((v) => {
const cnt = PRODUCTS.filter((p) => p.variety === v.id).length;
return (
onGoList({ variety: [v.id] })}>
{v.name}
{v.note}
{cnt} 商品
);
})}
{/* 形状から探す */}
{SHAPES.map((s) => {
const cnt = PRODUCTS.filter((p) => p.shape === s.id).length;
return (
onGoList({ shape: [s.id] })}>
{s.name}
{s.note}
{cnt} 商品
);
})}
{/* 人気ランキング */}
{/* 健康効果 */}
{HEALTH_POINTS.map((h) => (
))}
※ 効果には個人差があります。本ページは一般的な栄養情報であり、特定の疾病の予防・治療を保証するものではありません。
{/* おいしい食べ方 */}
{EATING_TIPS.map((e, i) => (
))}
{/* 保存方法 */}
{STORAGE_TIPS.map((s) => (
))}
ヒント:表面に吹く白い粉は、芋の糖分が結晶化したもので甘さの証。カビではありませんので安心してお召し上がりください。
{/* 運営者情報・お問い合わせ */}
運営者情報
- 運営者
- 干し芋ナビ
- サイト名
- 干し芋ナビ
- 開設
- 2026年
- 内容
- 国内の干し芋を品種・形状・メーカーで比較し、実食レビューとあわせて紹介する情報サイトです。
当サイトはアフィリエイトプログラム(楽天市場・Amazonアソシエイト等)を利用しています。リンクから購入された場合、当サイトが報酬を得ることがあります。
);
}
Object.assign(window, { FilterPanel, TopPage });