UNPKG

@expofp/floorplan

Version:

Interactive floor plan library for expos and events

2 lines (1 loc) 1.69 kB
import{jsx as d}from"react/jsx-runtime";import{observer as u,useLocalStore as C}from"mobx-react-lite";import{t as a}from"../utils/i18n";import{Modal as I,MultiSelectGroups as S}from"./";export const BaseFilterModal=u(({store:t,rootStore:r,title:o,groups:s})=>{const i=C(()=>({get pendingSelectedIds(){return t.state.pendingItems.map(e=>e.id)},get totalItemsCount(){return t.state.pendingItems.length===0?t.getFilteredItems().length:r.exhibitorStore.exhibitors.filter(e=>e.categories.some(l=>t.state.pendingItems.some(n=>n.id===l.id))).length},get allCategories(){return s.flatMap(e=>e.items)},get isAllSelected(){return this.allCategories.every(e=>this.pendingSelectedIds.includes(e.id))},get isPartiallySelected(){const e=this.allCategories.filter(l=>this.pendingSelectedIds.includes(l.id)).length;return e>0&&e<this.allCategories.length},get totalCategoriesCount(){return this.allCategories.length}})),g=e=>{const l=s.flatMap(n=>n.items).filter(n=>e.includes(n.id));t.setPendingItems(l)},c=()=>{t.applyFilter()},h=()=>{t.closeFilter()},m=()=>{t.clearPendingItems()},f=e=>{const l=i.allCategories;t.setPendingItems(e?l:[])},p=()=>t.state.isOpen;return d(I,{open:t.state.isOpen,title:o,onClickClose:h,footerLeft:[{label:a("Clear all"),onClick:m,variant:"gray",disabled:i.pendingSelectedIds.length===0}],footerRight:[{label:i.pendingSelectedIds.length>0?a("Show #{{count}}# Matching Exhibitors",{count:i.totalItemsCount}):a("Show All Exhibitors"),onClick:c,variant:"primary",withBadge:!0,disabled:!p()}],children:d(S,{groups:s,selectedIds:i.pendingSelectedIds,variant:"categories",onChange:g,itemCountProvider:e=>r.categoryStore.categoryById.get(Number(e.id))?.exhibitors?.length||0})})});