{"version":3,"sources":["webpack:///./src/modules/FilterableGridModule/FilterableGridModule.types.ts"],"names":["getFilterOptions","filterItem","Options","Groups","map","g","reduce","aggr","item","getCheckedOptions","filter","o","Checked","getCheckedFilter","isFinder","opt","type","Header","Text","length","String","Value","slice","value","toUpperCase","getCheckedFilters","filters","checkedFilters","getUnitedCheckedFilters","results","push","getCheckedValues","getCheckedCount","count","current","getFilterValues","values","Name","uncheckAll","forEach","setFilterCount","counts","Count","find","c","Id","filterCards","cards","isFiltersFitCard","card","every","f","isFilterFitCard","checked","some","isOptionFitCard","option","cardValue","split","n","parseInt","v","Array","isArray","includes","getFilterCountsByCards","acc","filteredCards"],"mappings":"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","file":"239.993ede7c467379a81922.js","sourcesContent":["import { FilterValuesModel, FilterCountItem, FilterCountsItem } from './FilterableGridModule.api';\nimport CtaLinkItem from '@/common/interfaces/CtaLinkItem';\nimport LinkItem from '@/common/interfaces/LinkItem';\n\nexport interface IGridCard {\n Id?: number;\n CardType?: string;\n}\n\nexport interface FilterableGridViewModel {\n CtaText?: string;\n DottedLine?: boolean; // show footer dotted line\n Header?: string; // DestinationGrid (\"All destinations\")\n TitleLarge?: string;\n ShowHeaderCount?: boolean; // DestinationsGrid (\"(30) All destinations\")\n ShowLeftResultCount?: boolean; // TeamMemberGrid (\"800 Results\")\n HeaderCta?: CtaLinkItem; // BrochureGrid \"Submit Orders\" button\n Filters?: FilterItem[];\n CurrentSorting?: string;\n Sorting?: SortingOption[];\n Cards: IGridCard[];\n Masonry?: MasonrySettings;\n Paging?: PagingModel;\n Endpoint?: string;\n EmptyGridMessage?: string; //Message shown if there is no cards\n DisclaimerMessage?: string;\n ViewMoreLink?: LinkItem;\n HideFilters?: boolean;\n HideSorting?: boolean;\n AppliedFilters?: AppliedFilters;\n NoteText?: string;\n}\n\nexport interface MasonrySettings {\n TopTitle: string;\n MainTitle: string;\n MasonryField: string;\n}\n\nexport interface SortingOption {\n Title: string;\n Value: string | number;\n Data?: {\n Field: string;\n Direction: 'asc' | 'desc';\n };\n}\n\nexport interface PagingModel {\n Total: number;\n PageSize: number; // desktop (-1 for all)\n PageSizeMedium?: number; // tablet\n PageSizeSmall?: number; // mobile\n LoadMoreButton?: CtaLinkItem;\n ViewCounts: boolean; // \"Viewing 12 of 800\" - M061-TeamMemberGrid\n AdditionalButton?: CtaLinkItem; // Not sure about this one\n // for full paging\n // CurrentPage?: number; //\n // AllPages?: number;\n // IsFull?: boolean; // LoadMore is not full\n}\n\nexport interface FilterItem {\n Header: string;\n Name: string;\n Options?: FilterOption[];\n Groups?: FilterOptionsGroup[];\n IsDropdown?: boolean;\n IsSingleCheckbox?: boolean;\n}\n\nexport interface FilterOptionsGroup {\n Header: string;\n Options: FilterOption[];\n}\n\nexport interface FilterOption {\n Text: string;\n Value: string | number;\n Count: number;\n Checked: boolean;\n}\n\nexport interface SegmentFilterOption {\n type: string,\n value: string,\n}\nexport interface AppliedFilters\n{\n Destination: string,\n Itinerary: string,\n StartDate :string,\n EndDate :string\n}\n\nexport const getFilterOptions = (filterItem: FilterItem) => {\n if (filterItem.Options) {\n return filterItem.Options;\n }\n if (filterItem.Groups) {\n return filterItem.Groups.map((g) => g.Options).reduce((aggr, item) => [...aggr, ...item], []);\n }\n return [];\n};\n\nexport const getCheckedOptions = (filterItem: FilterItem): FilterOption[] =>\n getFilterOptions(filterItem).filter((o) => o.Checked);\n\nexport const getCheckedFilter = (filterItem: FilterItem, isFinder: boolean): SegmentFilterOption[] =>\n getFilterOptions(filterItem).filter((o) => o.Checked).map(opt => {\n const type = filterItem.Header;\n if (type === 'Dates' && !isFinder) return { value: `${opt.Text} ${String(opt.Value).slice(0, 4)}`, type }\n if (type === 'Dates' && isFinder) {\n if (opt.Text.length === 3) {\n opt.Text = `${opt.Text} ${String(opt.Value).slice(0, 4)}`\n }\n return { value: `${opt.Text.toUpperCase()}`, type }\n }\n return { value: opt.Text, type }\n })\n\nexport const getCheckedFilters = (filters: FilterItem[], isFinder = false) => {\n const checkedFilters = filters.map(filter => getCheckedFilter(filter, isFinder));\n return getUnitedCheckedFilters(checkedFilters)\n}\nexport const getUnitedCheckedFilters = (filters: Array) =>\n filters.reduce((results: SegmentFilterOption[], filter: SegmentFilterOption[]) => {\n if (filter.length) filter.map(filterItem => results.push(filterItem))\n return results;\n }, [])\n\nexport const getCheckedValues = (filterItem: FilterItem): any[] => {\n return getCheckedOptions(filterItem).map((o) => o.Value);\n};\n\nexport const getCheckedCount = (filters: FilterItem[]) =>\n filters.reduce((count, current) => count + getCheckedOptions(current).length, 0);\n\nexport const getFilterValues = (filters: FilterItem[]): FilterValuesModel => {\n return filters.reduce(\n (values: FilterValuesModel, filter: FilterItem) => ({\n ...values,\n [filter.Name]: getCheckedValues(filter),\n }),\n {},\n );\n};\n\nexport const uncheckAll = (filterItem: FilterItem): void =>\n getFilterOptions(filterItem).forEach((o) => (o.Checked = false));\n\nexport const setFilterCount = (filterItem: FilterItem, counts: FilterCountItem[]) =>\n getFilterOptions(filterItem).forEach(\n (o) => (o.Count = counts.find((c) => c.Id == o.Value)?.Count || 0),\n );\n\nexport const filterCards = (cards: any[], filters: FilterItem[]) => {\n return cards.filter((c) => isFiltersFitCard(c, filters));\n};\n\nexport const isFiltersFitCard = (card: any[], filters: FilterItem[]) => {\n return filters.every((f) => isFilterFitCard(card, f));\n};\n\nexport const isFilterFitCard = (card: any, filter: FilterItem) => {\n const checked = getCheckedOptions(filter);\n return !checked.length || checked.some((o) => isOptionFitCard(card, o, filter));\n};\n\nexport const isOptionFitCard = (card: any, option: FilterOption, filter: FilterItem) => {\n const cardValue = card[filter.Name];\n\n if (filter.Name === 'Durations') {\n const [start, end] = option.Text.split(' ')[0]\n .split('-')\n .map((n) => parseInt(n));\n\n return (cardValue as string[]).some((v) => start <= +v && end && +v <= end);\n } else {\n const { Value } = option;\n\n if (Array.isArray(cardValue)) {\n return cardValue.includes(Value);\n } else {\n return Value == cardValue;\n }\n }\n};\n\nexport const getFilterCountsByCards = (cards: any[], filters: FilterItem[]) => {\n return filters.reduce((acc: FilterCountsItem, filter) => {\n const filteredCards = filterCards(\n cards,\n filters.filter((f) => f !== filter),\n );\n return {\n ...acc,\n [filter.Name]: [\n ...getFilterOptions(filter).map(\n (o) =>\n ({\n Id: o.Value,\n Count: filteredCards.filter((c) => isOptionFitCard(c, o, filter)).length,\n } as FilterCountItem),\n ),\n ],\n };\n }, {} as FilterCountsItem);\n};\n"],"sourceRoot":""}