import React from 'react'; import PropTypes from 'prop-types'; import NumberInput from '@ui/NumberInput'; import {useSorting} from '@hooks/useSorting'; import SortDropdown from '@ui/SortDropdown'; import { Music, Tv, Users, Cloud, Film, HardDrive, Maximize, Globe, Video, Flag, Zap, Package, List } from 'lucide-react'; const AdvancedView = ({formats, onScoreChange}) => { const sortOptions = [ {label: 'Name', value: 'name'}, {label: 'Score', value: 'score'} ]; // Group formats by their tags const groupedFormats = formats.reduce((acc, format) => { // Check if format has any tags that match our known categories const hasKnownTag = format.tags?.some( tag => tag.includes('Audio') || tag.includes('Codec') || tag.includes('Enhancement') || tag.includes('HDR') || tag.includes('Flag') || tag.includes('Language') || (tag.includes('Release Group') && !tag.includes('Tier')) || tag.includes('Release Group Tier') || tag.includes('Resolution') || tag.includes('Source') || tag.includes('Storage') || tag.includes('Streaming Service') ); if (!hasKnownTag) { if (!acc['Uncategorized']) acc['Uncategorized'] = []; acc['Uncategorized'].push(format); return acc; } format.tags.forEach(tag => { if (!acc[tag]) acc[tag] = []; acc[tag].push(format); }); return acc; }, {}); const formatGroups = { Audio: Object.entries(groupedFormats) .filter(([tag]) => tag.includes('Audio')) .flatMap(([_, formats]) => formats), Codecs: Object.entries(groupedFormats) .filter(([tag]) => tag.includes('Codec')) .flatMap(([_, formats]) => formats), Enhancements: Object.entries(groupedFormats) .filter(([tag]) => tag.includes('Enhancement')) .flatMap(([_, formats]) => formats), HDR: Object.entries(groupedFormats) .filter(([tag]) => tag.includes('HDR')) .flatMap(([_, formats]) => formats), 'Indexer Flags': Object.entries(groupedFormats) .filter(([tag]) => tag.includes('Flag')) .flatMap(([_, formats]) => formats), Language: Object.entries(groupedFormats) .filter(([tag]) => tag.includes('Language')) .flatMap(([_, formats]) => formats), 'Release Groups': Object.entries(groupedFormats) .filter( ([tag]) => tag.includes('Release Group') && !tag.includes('Tier') ) .flatMap(([_, formats]) => formats), 'Group Tier Lists': Object.entries(groupedFormats) .filter(([tag]) => tag.includes('Release Group Tier')) .flatMap(([_, formats]) => formats), Resolution: Object.entries(groupedFormats) .filter(([tag]) => tag.includes('Resolution')) .flatMap(([_, formats]) => formats), Source: Object.entries(groupedFormats) .filter(([tag]) => tag.includes('Source')) .flatMap(([_, formats]) => formats), Storage: Object.entries(groupedFormats) .filter(([tag]) => tag.includes('Storage')) .flatMap(([_, formats]) => formats), 'Streaming Services': Object.entries(groupedFormats) .filter(([tag]) => tag.includes('Streaming Service')) .flatMap(([_, formats]) => formats), Uncategorized: groupedFormats['Uncategorized'] || [] }; const getGroupIcon = groupName => { const icons = { Audio: , HDR: , 'Release Groups': , 'Group Tier Lists': , 'Streaming Services': , Codecs: , Storage: , Resolution: , Language: , Source: