ぼざクリタグ広場 https://hub.nizika.monster
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

254 lines
7.6 KiB

  1. import { CATEGORIES,
  2. FETCH_POSTS_ORDER_FIELDS,
  3. USER_ROLES,
  4. ViewFlagBehavior } from '@/consts'
  5. import type { ReactNode } from 'react'
  6. export type Category = typeof CATEGORIES[number]
  7. export type FetchPostsOrder = `${ FetchPostsOrderField }:${ 'asc' | 'desc' }`
  8. export type FetchPostsOrderField = typeof FETCH_POSTS_ORDER_FIELDS[number]
  9. export type FetchPostsParams = {
  10. url: string
  11. title: string
  12. tags: string
  13. match: 'all' | 'any'
  14. originalCreatedFrom: string
  15. originalCreatedTo: string
  16. createdFrom: string
  17. createdTo: string
  18. updatedFrom: string
  19. updatedTo: string
  20. page: number
  21. limit: number
  22. order: FetchPostsOrder }
  23. export type FetchTagsOrder = `${ FetchTagsOrderField }:${ 'asc' | 'desc' }`
  24. export type FetchTagsOrderField =
  25. | 'name'
  26. | 'category'
  27. | 'post_count'
  28. | 'created_at'
  29. | 'updated_at'
  30. export type FetchTagsParams = {
  31. post: number | null
  32. name: string
  33. category: Category | null
  34. postCountGTE: number
  35. postCountLTE: number | null
  36. createdFrom: string
  37. createdTo: string
  38. updatedFrom: string
  39. updatedTo: string
  40. page: number
  41. limit: number
  42. order: FetchTagsOrder }
  43. export type Material = {
  44. id: number
  45. tag: Tag
  46. file: string | null
  47. url: string | null
  48. wikiPageBody?: string | null
  49. contentType: string | null
  50. createdAt: string
  51. createdByUser: { id: number; name: string }
  52. updatedAt: string
  53. updatedByUser: { id: number; name: string } }
  54. export type Menu = MenuItem[]
  55. export type MenuInvisibleItem = {
  56. name: ReactNode
  57. to?: string
  58. base?: string
  59. visible: false
  60. subMenu: SubMenuItem[] }
  61. export type MenuItem = MenuVisibleItem | MenuInvisibleItem
  62. export type MenuVisibleItem = {
  63. name: ReactNode
  64. to: string
  65. base?: string
  66. visible?: true
  67. subMenu: SubMenuItem[] }
  68. export type NicoTag = Tag & {
  69. category: 'nico'
  70. linkedTags: Tag[] }
  71. export type NiconicoMetadata = {
  72. currentTime: number
  73. duration: number
  74. isVideoMetaDataLoaded: boolean
  75. maximumBuffered: number
  76. muted: boolean
  77. showComment: boolean
  78. volume: number }
  79. export type NiconicoVideoInfo = {
  80. title: string
  81. videoId: string
  82. lengthInSeconds: number
  83. thumbnailUrl: string
  84. description: string
  85. viewCount: number
  86. commentCount: number
  87. mylistCount: number
  88. postedAt: string
  89. watchId: number }
  90. export type NiconicoViewerHandle = {
  91. play: () => void
  92. pause: () => void
  93. seek: (time: number) => void
  94. mute: () => void
  95. unmute: () => void
  96. setVolume: (volume: number) => void
  97. showComments: () => void
  98. hideComments: () => void }
  99. export type Post = {
  100. id: number
  101. url: string
  102. title: string | null
  103. thumbnail: string | null
  104. thumbnailBase: string | null
  105. tags: Tag[]
  106. parentPosts?: Post[]
  107. childPosts?: Post[]
  108. siblingPosts?: Record<`${ number }`, Post[]>
  109. viewed: boolean
  110. related: Post[]
  111. originalCreatedFrom: string | null
  112. originalCreatedBefore: string | null
  113. createdAt: string
  114. updatedAt: string
  115. uploadedUser: { id: number; name: string | null } | null }
  116. export type PostTagChange = {
  117. post: Post
  118. tag: Tag | null
  119. user: User | null
  120. changeType: 'add' | 'remove'
  121. timestamp: string }
  122. export type PostVersion = {
  123. postId: number
  124. versionNo: number
  125. eventType: 'create' | 'update' | 'discard' | 'restore'
  126. title: { current: string | null; prev: string | null }
  127. url: { current: string; prev: string | null }
  128. thumbnail: { current: string | null; prev: string | null }
  129. thumbnailBase: { current: string | null; prev: string | null }
  130. tags: { name: string
  131. type: 'context' | 'added' | 'removed' }[]
  132. parentPosts: { id: number
  133. title: string
  134. type: 'context' | 'added' | 'removed' }[]
  135. originalCreatedFrom: { current: string | null; prev: string | null }
  136. originalCreatedBefore: { current: string | null; prev: string | null }
  137. createdAt: string
  138. createdByUser: { id: number; name: string | null } | null }
  139. export type SubMenuComponentItem = {
  140. component: ReactNode
  141. visible: boolean }
  142. export type SubMenuItem = SubMenuComponentItem | SubMenuStringItem
  143. export type SubMenuStringItem = {
  144. name: ReactNode
  145. to: string
  146. visible?: boolean }
  147. export type Tag = {
  148. id: number
  149. name: string
  150. category: Category
  151. aliases: string[]
  152. parents: Tag[]
  153. postCount: number
  154. createdAt: string
  155. updatedAt: string
  156. hasWiki: boolean
  157. materialId: number
  158. children?: Tag[]
  159. matchedAlias?: string | null }
  160. export type TagVersion = {
  161. tagId: number
  162. versionNo: number
  163. eventType: 'create' | 'update' | 'discard' | 'restore'
  164. name: { current: string; prev: string | null }
  165. category: { current: Category; prev: Category | null }
  166. aliases: { name: string; type: 'context' | 'added' | 'removed' }[]
  167. parentTags: { tag: Tag; type: 'context' | 'added' | 'removed' }[]
  168. createdAt: string
  169. createdByUser: { id: number; name: string | null } | null }
  170. export type Theatre = {
  171. id: number
  172. name: string | null
  173. opensAt: string
  174. closesAt: string | null
  175. createdByUser: { id: number; name: string }
  176. createdAt: string
  177. updatedAt: string }
  178. export type TheatreComment = {
  179. theatreId: number,
  180. no: number,
  181. user: { id: number, name: string } | null
  182. content: string
  183. createdAt: string }
  184. export type User = {
  185. id: number
  186. name: string | null
  187. inheritanceCode: string
  188. role: UserRole }
  189. export type ViewFlagBehavior = typeof ViewFlagBehavior[keyof typeof ViewFlagBehavior]
  190. export type WikiPage = {
  191. id: number
  192. title: string
  193. createdUserId: number
  194. updatedUserId: number
  195. createdAt: string
  196. updatedAt: string
  197. body: string
  198. revisionId: number
  199. pred: number | null
  200. succ: number | null }
  201. export type WikiPageChange = {
  202. revisionId: number
  203. pred: number | null
  204. succ: null
  205. wikiPage: Pick<WikiPage, 'id' | 'title'>
  206. user: Pick<User, 'id' | 'name'>
  207. kind: 'content' | 'redirect'
  208. message: string | null
  209. timestamp: string }
  210. export type WikiPageDiff = {
  211. wikiPageId: number
  212. title: string
  213. olderRevisionId: number | null
  214. newerRevisionId: number
  215. diff: WikiPageDiffDiff[] }
  216. export type WikiPageDiffDiff = {
  217. type: 'context' | 'added' | 'removed'
  218. content: string }
  219. export type UserRole = typeof USER_ROLES[number]