Added number of list items for status tabs

This commit is contained in:
Eduard Urbach 2019-10-26 18:06:14 +09:00
parent af63870850
commit 384f966524
Signed by: akyoto
GPG Key ID: C874F672B1AF20C0
6 changed files with 35 additions and 42 deletions

View File

@ -226,31 +226,12 @@ func (list *AnimeList) WithoutPrivateItems() *AnimeList {
// SplitByStatus splits the anime list into multiple ones by status.
func (list *AnimeList) SplitByStatus() map[string]*AnimeList {
statusToList := map[string]*AnimeList{}
statusToList[AnimeListStatusWatching] = &AnimeList{
UserID: list.UserID,
Items: []*AnimeListItem{},
}
statusToList[AnimeListStatusCompleted] = &AnimeList{
UserID: list.UserID,
Items: []*AnimeListItem{},
}
statusToList[AnimeListStatusPlanned] = &AnimeList{
UserID: list.UserID,
Items: []*AnimeListItem{},
}
statusToList[AnimeListStatusHold] = &AnimeList{
UserID: list.UserID,
Items: []*AnimeListItem{},
}
statusToList[AnimeListStatusDropped] = &AnimeList{
UserID: list.UserID,
Items: []*AnimeListItem{},
statusToList := map[string]*AnimeList{
AnimeListStatusWatching: {UserID: list.UserID},
AnimeListStatusCompleted: {UserID: list.UserID},
AnimeListStatusPlanned: {UserID: list.UserID},
AnimeListStatusHold: {UserID: list.UserID},
AnimeListStatusDropped: {UserID: list.UserID},
}
list.Lock()

View File

@ -1,7 +1,7 @@
component StatusTabs(urlPrefix string)
component StatusTabs(urlPrefix string, statusLists map[string]*arn.AnimeList)
.tabs
Tab("Watching", "play", urlPrefix + "/watching")
Tab("Completed", "check", urlPrefix + "/completed")
Tab("Planned", "forward", urlPrefix + "/planned")
Tab("On Hold", "pause", urlPrefix + "/hold")
Tab("Dropped", "stop", urlPrefix + "/dropped")
TabWithCount("Watching", len(statusLists[arn.AnimeListStatusWatching].Items), "play", urlPrefix + "/watching")
TabWithCount("Completed", len(statusLists[arn.AnimeListStatusCompleted].Items), "check", urlPrefix + "/completed")
TabWithCount("Planned", len(statusLists[arn.AnimeListStatusPlanned].Items), "forward", urlPrefix + "/planned")
TabWithCount("On Hold", len(statusLists[arn.AnimeListStatusHold].Items), "pause", urlPrefix + "/hold")
TabWithCount("Dropped", len(statusLists[arn.AnimeListStatusDropped].Items), "stop", urlPrefix + "/dropped")

View File

@ -1,4 +1,10 @@
component Tab(label string, icon string, url string)
a.tab.action(href=url, data-action="diff", data-trigger="click", aria-label=label, dropzone="move")
Icon(icon)
span.tab-text= label
span.tab-text= label
component TabWithCount(label string, count int, icon string, url string)
a.tab.action(href=url, data-action="diff", data-trigger="click", aria-label=label, dropzone="move")
Icon(icon)
span.tab-text= label
span.tab-count= count

View File

@ -48,18 +48,19 @@ func AnimeList(ctx aero.Context, user *arn.User, status string, sortBy string) e
return ctx.Error(http.StatusNotFound, "Anime list not found")
}
statusList := animeList.FilterStatus(status)
// Filter private items
if user == nil || user.ID != viewUser.ID {
statusList = statusList.WithoutPrivateItems()
animeList = animeList.WithoutPrivateItems()
}
// Sort the items
statusList.Sort(sortBy)
statusLists := animeList.SplitByStatus()
// Sort the items for the requested status only
animeList = statusLists[status]
animeList.Sort(sortBy)
// These are all anime list items for the given status
allItems := statusList.Items
allItems := statusLists[status].Items
// Slice the part that we need
items := allItems[index:]
@ -102,5 +103,5 @@ func AnimeList(ctx aero.Context, user *arn.User, status string, sortBy string) e
}
// Otherwise, send the full page
return ctx.HTML(components.AnimeListPage(items, nextIndex, viewUser, user, status))
return ctx.HTML(components.AnimeListPage(items, nextIndex, viewUser, user, statusLists))
}

View File

@ -1,9 +1,9 @@
component AnimeListPage(animeListItems []*arn.AnimeListItem, nextIndex int, viewUser *arn.User, user *arn.User, status string)
component AnimeListPage(animeListItems []*arn.AnimeListItem, nextIndex int, viewUser *arn.User, user *arn.User, statusLists map[string]*arn.AnimeList)
h1.page-title= viewUser.Nick + "'s anime list"
if user == nil || user.ID != viewUser.ID
.anime-list-user-avatar
AvatarNoTip(viewUser)
StatusTabs("/+" + viewUser.Nick + "/animelist")
StatusTabs("/+" + viewUser.Nick + "/animelist", statusLists)
AnimeListItems(animeListItems, nextIndex, viewUser, user)

View File

@ -31,6 +31,10 @@ const tab-padding-x = 1rem
border-top-right-radius ui-element-border-radius
border-bottom-right-radius ui-element-border-radius
.tab-count
margin-left typography-margin
opacity 0.5
< 920px
.tab
padding 0.75rem tab-padding-x
@ -38,7 +42,8 @@ const tab-padding-x = 1rem
.padded-icon
margin-right 0
.tab-text
.tab-text,
.tab-count
display none
.tabs