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