hooks.ts 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import { useTranslation } from 'react-i18next'
  2. import type { TFunction } from 'i18next'
  3. import {
  4. categoryKeys,
  5. tagKeys,
  6. } from './constants'
  7. type Tag = {
  8. name: string
  9. label: string
  10. }
  11. export const useTags = (translateFromOut?: TFunction) => {
  12. const { t: translation } = useTranslation()
  13. const t = translateFromOut || translation
  14. const tags = tagKeys.map((tag) => {
  15. return {
  16. name: tag,
  17. label: t(`pluginTags.tags.${tag}`),
  18. }
  19. })
  20. const tagsMap = tags.reduce((acc, tag) => {
  21. acc[tag.name] = tag
  22. return acc
  23. }, {} as Record<string, Tag>)
  24. return {
  25. tags,
  26. tagsMap,
  27. }
  28. }
  29. type Category = {
  30. name: string
  31. label: string
  32. }
  33. export const useCategories = (translateFromOut?: TFunction) => {
  34. const { t: translation } = useTranslation()
  35. const t = translateFromOut || translation
  36. const categories = categoryKeys.map((category) => {
  37. if (category === 'agent-strategy') {
  38. return {
  39. name: 'agent-strategy',
  40. label: t('plugin.category.agents'),
  41. }
  42. }
  43. return {
  44. name: category,
  45. label: t(`plugin.category.${category}s`),
  46. }
  47. })
  48. const categoriesMap = categories.reduce((acc, category) => {
  49. acc[category.name] = category
  50. return acc
  51. }, {} as Record<string, Category>)
  52. return {
  53. categories,
  54. categoriesMap,
  55. }
  56. }
  57. export const useSingleCategories = (translateFromOut?: TFunction) => {
  58. const { t: translation } = useTranslation()
  59. const t = translateFromOut || translation
  60. const categories = categoryKeys.map((category) => {
  61. if (category === 'agent-strategy') {
  62. return {
  63. name: 'agent-strategy',
  64. label: t('plugin.categorySingle.agent'),
  65. }
  66. }
  67. return {
  68. name: category,
  69. label: t(`plugin.categorySingle.${category}`),
  70. }
  71. })
  72. const categoriesMap = categories.reduce((acc, category) => {
  73. acc[category.name] = category
  74. return acc
  75. }, {} as Record<string, Category>)
  76. return {
  77. categories,
  78. categoriesMap,
  79. }
  80. }