document.head.insertAdjacentHTML('beforeend','') module.exports = name: 'Events' render: (new Function '_ctx', '_cache', renderFns['app/pages/Events/index.pug'])() data: -> allEvents: [] displayedEvents: [] loading: false currentPage: 1 pageSize: 9 eventFilters: [ { key: 'category' label: 'Категория' type: 'select' options: [ { value: 'all', label: 'Все категории' } { value: 'classical', label: 'Классическая музыка' } { value: 'folk', label: 'Фольклор' } { value: 'jazz', label: 'Джаз' } { value: 'pop', label: 'Поп-музыка' } { value: 'dance', label: 'Танцевальное шоу' } ] } { key: 'venue' label: 'Зал' type: 'select' options: [ { value: 'all', label: 'Все залы' } { value: 'Большой зал', label: 'Большой зал' } { value: 'Малый зал', label: 'Малый зал' } { value: 'Камерный зал', label: 'Камерный зал' } ] } { key: 'priceRange' label: 'Цена' type: 'range' options: [ { value: 'all', label: 'Любая цена' } { value: 'budget', label: 'До 50 сомони' } { value: 'medium', label: '50-100 сомони' } { value: 'premium', label: 'Выше 100 сомони' } ] } ] sortOptions: [ { value: 'date-asc', label: 'По дате (сначала ближайшие)' } { value: 'date-desc', label: 'По дате (сначала дальние)' } { value: 'price-asc', label: 'По цене (сначала дешевые)' } { value: 'price-desc', label: 'По цене (сначала дорогие)' } { value: 'name-asc', label: 'По названию (А-Я)' } { value: 'name-desc', label: 'По названию (Я-А)' } ] categoryLabels: classical: 'Классика' folk: 'Фольклор' jazz: 'Джаз' pop: 'Поп' dance: 'Танцы' computed: hasMoreEvents: -> @currentPage * @pageSize < @allEvents.length mounted: -> @loadEvents() @displayedEvents = @allEvents.slice(0, @pageSize) methods: loadEvents: -> @loading = true @allEvents = _.getEvents() || [] if @allEvents.length == 0 setTimeout => @loadEvents() , 500 else @loading = false handleFilterChange: (filteredItems) -> @displayedEvents = filteredItems @currentPage = 1 openEventModal: (event) -> _.openModal('EventDetailModal', { event: event }) loadMoreEvents: -> @loading = true setTimeout => @currentPage += 1 startIndex = 0 endIndex = @currentPage * @pageSize @displayedEvents = @allEvents.slice(startIndex, endIndex) @loading = false , 1000 resetFilters: -> @displayedEvents = @allEvents.slice(0, @pageSize) @currentPage = 1 getCategoryLabel: (category) -> @categoryLabels[category] || category getCategoryBadgeClass: (category) -> classes = classical: 'bg-blue-500' folk: 'bg-green-500' jazz: 'bg-purple-500' pop: 'bg-pink-500' dance: 'bg-orange-500' classes[category] || 'bg-gray-500' formatDate: (dateString) -> try date = new Date(dateString) options = { day: 'numeric', month: 'short' } date.toLocaleDateString('ru-RU', options) catch dateString