UNPKG

@expofp/floorplan

Version:

Interactive floor plan library for expos and events

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