sitero 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. package/dist/export/cms/client/components/index.js +6 -2
  2. package/dist/export/cms/client/index.js +2 -0
  3. package/dist/export/cms/client/pages/index.js +1 -3
  4. package/dist/export/cms/server/index.js +1 -0
  5. package/dist/export/core/server/index.js +2 -0
  6. package/dist/export/index.js +1 -0
  7. package/dist/export/web/server/index.js +1 -0
  8. package/dist/prisma/generated/internal/class.js +4 -4
  9. package/dist/src/cms/client/applications/create-applications.js +5 -0
  10. package/dist/src/cms/client/applications/resources/page/form-data.js +56 -0
  11. package/dist/src/cms/client/applications/resources/page/use-page-update-form-data.js +30 -0
  12. package/dist/src/cms/client/applications/resources/post/use-create-form-data.js +5 -5
  13. package/dist/src/cms/client/applications/resources/post/use-update-form-data.js +1 -1
  14. package/dist/src/cms/client/applications/resources/seo-metadata/build-seo-metadata-translations.js +35 -0
  15. package/dist/src/cms/client/applications/resources/seo-metadata/use-upsert-form-data.js +15 -31
  16. package/dist/src/cms/client/applications/ui/use-nav-items.js +28 -39
  17. package/dist/src/cms/client/infrastructure/i18n/messages/en-US/resources/file.js +5 -4
  18. package/dist/src/cms/client/infrastructure/i18n/messages/en-US/resources/index.js +7 -0
  19. package/dist/src/cms/client/infrastructure/i18n/messages/en-US/resources/post.js +32 -1
  20. package/dist/src/cms/client/infrastructure/i18n/messages/en-US/ui/index.js +8 -1
  21. package/dist/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/file.js +6 -5
  22. package/dist/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/index.js +7 -0
  23. package/dist/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/post.js +18 -1
  24. package/dist/src/cms/client/infrastructure/i18n/messages/zh-TW/ui/index.js +7 -2
  25. package/dist/src/cms/client/infrastructure/operation-result/presentation/message.js +15 -0
  26. package/dist/src/cms/client/interfaces/components/create-components.js +4 -8
  27. package/dist/src/cms/client/interfaces/components/create-page-contents.js +28 -0
  28. package/dist/src/cms/client/interfaces/components/resources/page/content/field-groups.js +16 -0
  29. package/dist/src/cms/client/interfaces/components/resources/page/content/page-edit-content.js +216 -0
  30. package/dist/src/cms/client/interfaces/components/resources/page/content/page-show-content.js +114 -0
  31. package/dist/src/cms/client/interfaces/components/resources/page/content/types.js +12 -0
  32. package/dist/src/cms/client/interfaces/components/resources/post/category/category-card.js +5 -3
  33. package/dist/src/cms/client/interfaces/components/resources/post/category/category-table.js +6 -4
  34. package/dist/src/cms/client/interfaces/components/resources/post/content/post-create-content.js +13 -8
  35. package/dist/src/cms/client/interfaces/components/resources/post/content/post-edit-content.js +11 -7
  36. package/dist/src/cms/client/interfaces/components/resources/post/content/post-show-content.js +7 -2
  37. package/dist/src/cms/client/interfaces/components/resources/post/post-card.js +5 -3
  38. package/dist/src/cms/client/interfaces/components/resources/post/post-list.js +45 -10
  39. package/dist/src/cms/client/interfaces/components/resources/post/post-state-icons.js +17 -1
  40. package/dist/src/cms/client/interfaces/components/resources/post/post-table.js +8 -4
  41. package/dist/src/cms/client/interfaces/components/resources/post/search/control-fields-filters.js +5 -1
  42. package/dist/src/cms/client/interfaces/components/resources/seo-metadata/seo-form/seo-form.js +90 -67
  43. package/dist/src/cms/client/interfaces/components/resources/seo-metadata/seo-metadata-dialog.js +11 -1
  44. package/dist/src/cms/client/interfaces/components/ui/blocks/list-container/list-container.js +1 -1
  45. package/dist/src/cms/client/interfaces/components/ui/blocks/list-container/pagination.js +9 -9
  46. package/dist/src/cms/client/interfaces/components/ui/features/accordion/accordion-header.js +15 -3
  47. package/dist/src/cms/client/interfaces/components/ui/features/accordion/accordion.js +5 -7
  48. package/dist/src/cms/client/interfaces/components/ui/form/control-fields/control-fields-display.js +1 -1
  49. package/dist/src/cms/client/interfaces/components/ui/form/control-fields/control-fields-input.js +1 -1
  50. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/category/_id_/edit/page.js +11 -11
  51. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/category/_id_/page.js +12 -16
  52. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/category/_id_/relations/page.js +6 -2
  53. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/category/create/page.js +15 -16
  54. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/page.js +18 -41
  55. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/post/_id_/edit/page.js +10 -11
  56. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/post/_id_/page.js +11 -16
  57. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/post/_id_/relations/page.js +1 -0
  58. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/post/create/page.js +14 -16
  59. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/subcategory/_id_/edit/page.js +11 -11
  60. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/subcategory/_id_/page.js +12 -16
  61. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/subcategory/_id_/relations/page.js +1 -0
  62. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/subcategory/create/page.js +15 -16
  63. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/page.js +18 -32
  64. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/tag/_id_/edit/page.js +2 -2
  65. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/tag/_id_/page.js +9 -9
  66. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/tag/_id_/relations/page.js +6 -2
  67. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/tag/create/page.js +2 -2
  68. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/trash/page.js +204 -0
  69. package/dist/src/cms/client/interfaces/pages/dashboard/system/access/admin/_id_/admin-refresh-token/page.js +1 -0
  70. package/dist/src/cms/client/interfaces/pages/dashboard/system/access/admin/_id_/page.js +1 -0
  71. package/dist/src/cms/client/interfaces/pages/dashboard/system/access/admin/_id_/relations/page.js +8 -3
  72. package/dist/src/cms/client/interfaces/pages/dashboard/system/storage/file/_id_/page.js +3 -2
  73. package/dist/src/cms/client/interfaces/pages/dashboard/system/storage/file/_id_/relations/page.js +41 -30
  74. package/dist/src/cms/client/interfaces/pages/dashboard/system/storage/file/delete-many/page.js +3 -3
  75. package/dist/src/cms/client/interfaces/pages/dashboard/system/storage/file/page.js +1 -1
  76. package/dist/src/cms/client/interfaces/pages/dashboard/system/storage/trash/page.js +3 -2
  77. package/dist/src/cms/client/interfaces/pages/dashboard/website/website-page/_slug_/edit/page.js +19 -11
  78. package/dist/src/cms/client/interfaces/pages/dashboard/website/website-page/_slug_/page.js +23 -10
  79. package/dist/src/cms/client/interfaces/pages/dashboard/website/website-page/page.js +7 -7
  80. package/dist/src/cms/server/create-cms-server.js +2 -0
  81. package/dist/src/cms/server/resources/page/actions.js +31 -0
  82. package/dist/src/cms/server/resources/post/actions.js +27 -6
  83. package/dist/src/cms/server/resources/seo-metadata/actions.js +7 -16
  84. package/dist/src/config/content-ui.js +24 -0
  85. package/dist/src/config/topics.js +1 -1
  86. package/dist/src/constants/paths/cms-paths.js +2 -2
  87. package/dist/src/core/infrastructure/prisma/file/include.js +44 -0
  88. package/dist/src/core/infrastructure/prisma/file/mappers.js +51 -3
  89. package/dist/src/core/infrastructure/prisma/helpers/active-file-references.js +2 -1
  90. package/dist/src/core/infrastructure/prisma/page/include.js +20 -0
  91. package/dist/src/core/infrastructure/prisma/page/mappers.js +44 -0
  92. package/dist/src/core/infrastructure/prisma/page/page-prisma-ports.js +91 -0
  93. package/dist/src/core/infrastructure/prisma/post/include.js +2 -5
  94. package/dist/src/core/infrastructure/prisma/post/lifecycle.js +108 -0
  95. package/dist/src/core/infrastructure/prisma/post/mappers.js +0 -2
  96. package/dist/src/core/infrastructure/prisma/post/post-prisma-ports.js +76 -24
  97. package/dist/src/core/infrastructure/prisma/post/read-scope.js +45 -0
  98. package/dist/src/core/infrastructure/prisma/seo-metadata/mappers.js +6 -1
  99. package/dist/src/core/infrastructure/prisma/seo-metadata/seo-metadata-prisma-ports.js +32 -11
  100. package/dist/src/core/seeders/page/seeder.js +9 -29
  101. package/dist/src/core/seeders/seed.js +0 -3
  102. package/dist/src/core/sitero-server/create-sitero-server.js +10 -0
  103. package/dist/src/web/server/create-web-server.js +5 -1
  104. package/dist/src/web/server/resources/page/actions.js +20 -0
  105. package/dist/src/web/server/resources/post/actions.js +3 -13
  106. package/dist/src/web/server/seo/sitemap/get-page-items.js +7 -6
  107. package/dist/src/web/server/seo/sitemap/get-post-items.js +2 -2
  108. package/dist/src/web/server/seo/sitemap/get-subcategory-items.js +1 -1
  109. package/dist/types/export/cms/client/components/index.d.ts +3 -0
  110. package/dist/types/export/cms/client/components/index.d.ts.map +1 -1
  111. package/dist/types/export/cms/client/index.d.ts +2 -0
  112. package/dist/types/export/cms/client/index.d.ts.map +1 -1
  113. package/dist/types/export/cms/client/pages/index.d.ts +2 -1
  114. package/dist/types/export/cms/client/pages/index.d.ts.map +1 -1
  115. package/dist/types/export/cms/server/index.d.ts +2 -1
  116. package/dist/types/export/cms/server/index.d.ts.map +1 -1
  117. package/dist/types/export/index.d.ts +1 -1
  118. package/dist/types/export/index.d.ts.map +1 -1
  119. package/dist/types/export/web/server/index.d.ts +2 -1
  120. package/dist/types/export/web/server/index.d.ts.map +1 -1
  121. package/dist/types/src/cms/client/applications/create-applications.d.ts.map +1 -1
  122. package/dist/types/src/cms/client/applications/index.d.ts +1 -0
  123. package/dist/types/src/cms/client/applications/index.d.ts.map +1 -1
  124. package/dist/types/src/cms/client/applications/resources/index.d.ts +1 -0
  125. package/dist/types/src/cms/client/applications/resources/index.d.ts.map +1 -1
  126. package/dist/types/src/cms/client/applications/resources/page/form-data.d.ts +21 -0
  127. package/dist/types/src/cms/client/applications/resources/page/form-data.d.ts.map +1 -0
  128. package/dist/types/src/cms/client/applications/resources/page/index.d.ts +3 -0
  129. package/dist/types/src/cms/client/applications/resources/page/index.d.ts.map +1 -0
  130. package/dist/types/src/cms/client/applications/resources/page/use-page-update-form-data.d.ts +12 -0
  131. package/dist/types/src/cms/client/applications/resources/page/use-page-update-form-data.d.ts.map +1 -0
  132. package/dist/types/src/cms/client/applications/resources/post/use-create-form-data.d.ts +3 -5
  133. package/dist/types/src/cms/client/applications/resources/post/use-create-form-data.d.ts.map +1 -1
  134. package/dist/types/src/cms/client/applications/resources/post/use-update-form-data.d.ts.map +1 -1
  135. package/dist/types/src/cms/client/applications/resources/seo-metadata/build-seo-metadata-translations.d.ts +6 -0
  136. package/dist/types/src/cms/client/applications/resources/seo-metadata/build-seo-metadata-translations.d.ts.map +1 -0
  137. package/dist/types/src/cms/client/applications/resources/seo-metadata/use-upsert-form-data.d.ts +5 -4
  138. package/dist/types/src/cms/client/applications/resources/seo-metadata/use-upsert-form-data.d.ts.map +1 -1
  139. package/dist/types/src/cms/client/applications/types.d.ts +2 -1
  140. package/dist/types/src/cms/client/applications/types.d.ts.map +1 -1
  141. package/dist/types/src/cms/client/applications/ui/use-nav-items.d.ts +3 -4
  142. package/dist/types/src/cms/client/applications/ui/use-nav-items.d.ts.map +1 -1
  143. package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/index.d.ts +86 -0
  144. package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/index.d.ts.map +1 -1
  145. package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/resources/file.d.ts +3 -0
  146. package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/resources/file.d.ts.map +1 -1
  147. package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/resources/index.d.ts +71 -0
  148. package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/resources/index.d.ts.map +1 -1
  149. package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/resources/post.d.ts +51 -0
  150. package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/resources/post.d.ts.map +1 -1
  151. package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/ui/index.d.ts +15 -0
  152. package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/ui/index.d.ts.map +1 -1
  153. package/dist/types/src/cms/client/infrastructure/i18n/messages/index.d.ts +172 -0
  154. package/dist/types/src/cms/client/infrastructure/i18n/messages/index.d.ts.map +1 -1
  155. package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/index.d.ts +86 -0
  156. package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/index.d.ts.map +1 -1
  157. package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/file.d.ts +3 -0
  158. package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/file.d.ts.map +1 -1
  159. package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/index.d.ts +71 -0
  160. package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/index.d.ts.map +1 -1
  161. package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/post.d.ts +51 -0
  162. package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/post.d.ts.map +1 -1
  163. package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/ui/index.d.ts +15 -0
  164. package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/ui/index.d.ts.map +1 -1
  165. package/dist/types/src/cms/client/infrastructure/operation-result/presentation/message.d.ts.map +1 -1
  166. package/dist/types/src/cms/client/interfaces/components/create-components.d.ts +6 -3
  167. package/dist/types/src/cms/client/interfaces/components/create-components.d.ts.map +1 -1
  168. package/dist/types/src/cms/client/interfaces/components/create-page-contents.d.ts +30 -0
  169. package/dist/types/src/cms/client/interfaces/components/create-page-contents.d.ts.map +1 -0
  170. package/dist/types/src/cms/client/interfaces/components/resources/index.d.ts +1 -1
  171. package/dist/types/src/cms/client/interfaces/components/resources/index.d.ts.map +1 -1
  172. package/dist/types/src/cms/client/interfaces/components/resources/page/content/field-groups.d.ts +3 -0
  173. package/dist/types/src/cms/client/interfaces/components/resources/page/content/field-groups.d.ts.map +1 -0
  174. package/dist/types/src/cms/client/interfaces/components/resources/page/content/page-edit-content.d.ts +14 -0
  175. package/dist/types/src/cms/client/interfaces/components/resources/page/content/page-edit-content.d.ts.map +1 -0
  176. package/dist/types/src/cms/client/interfaces/components/resources/page/content/page-show-content.d.ts +7 -0
  177. package/dist/types/src/cms/client/interfaces/components/resources/page/content/page-show-content.d.ts.map +1 -0
  178. package/dist/types/src/cms/client/interfaces/components/resources/page/content/types.d.ts +27 -0
  179. package/dist/types/src/cms/client/interfaces/components/resources/page/content/types.d.ts.map +1 -0
  180. package/dist/types/src/cms/client/interfaces/components/resources/page/index.d.ts +4 -0
  181. package/dist/types/src/cms/client/interfaces/components/resources/page/index.d.ts.map +1 -0
  182. package/dist/types/src/cms/client/interfaces/components/resources/post/category/category-card.d.ts +3 -1
  183. package/dist/types/src/cms/client/interfaces/components/resources/post/category/category-card.d.ts.map +1 -1
  184. package/dist/types/src/cms/client/interfaces/components/resources/post/category/category-table.d.ts +1 -1
  185. package/dist/types/src/cms/client/interfaces/components/resources/post/category/category-table.d.ts.map +1 -1
  186. package/dist/types/src/cms/client/interfaces/components/resources/post/content/post-create-content.d.ts +3 -5
  187. package/dist/types/src/cms/client/interfaces/components/resources/post/content/post-create-content.d.ts.map +1 -1
  188. package/dist/types/src/cms/client/interfaces/components/resources/post/content/post-edit-content.d.ts.map +1 -1
  189. package/dist/types/src/cms/client/interfaces/components/resources/post/content/post-show-content.d.ts.map +1 -1
  190. package/dist/types/src/cms/client/interfaces/components/resources/post/post-card.d.ts +3 -1
  191. package/dist/types/src/cms/client/interfaces/components/resources/post/post-card.d.ts.map +1 -1
  192. package/dist/types/src/cms/client/interfaces/components/resources/post/post-list.d.ts +6 -3
  193. package/dist/types/src/cms/client/interfaces/components/resources/post/post-list.d.ts.map +1 -1
  194. package/dist/types/src/cms/client/interfaces/components/resources/post/post-state-icons.d.ts.map +1 -1
  195. package/dist/types/src/cms/client/interfaces/components/resources/post/post-table.d.ts +3 -1
  196. package/dist/types/src/cms/client/interfaces/components/resources/post/post-table.d.ts.map +1 -1
  197. package/dist/types/src/cms/client/interfaces/components/resources/post/search/control-fields-filters.d.ts.map +1 -1
  198. package/dist/types/src/cms/client/interfaces/components/resources/seo-metadata/seo-form/seo-form.d.ts +5 -2
  199. package/dist/types/src/cms/client/interfaces/components/resources/seo-metadata/seo-form/seo-form.d.ts.map +1 -1
  200. package/dist/types/src/cms/client/interfaces/components/resources/seo-metadata/seo-metadata-dialog.d.ts +2 -1
  201. package/dist/types/src/cms/client/interfaces/components/resources/seo-metadata/seo-metadata-dialog.d.ts.map +1 -1
  202. package/dist/types/src/cms/client/interfaces/components/ui/blocks/list-container/list-container.d.ts.map +1 -1
  203. package/dist/types/src/cms/client/interfaces/components/ui/features/accordion/accordion-header.d.ts +3 -1
  204. package/dist/types/src/cms/client/interfaces/components/ui/features/accordion/accordion-header.d.ts.map +1 -1
  205. package/dist/types/src/cms/client/interfaces/components/ui/features/accordion/accordion.d.ts +2 -1
  206. package/dist/types/src/cms/client/interfaces/components/ui/features/accordion/accordion.d.ts.map +1 -1
  207. package/dist/types/src/cms/client/interfaces/components/ui/form/control-fields/control-fields-display.d.ts.map +1 -1
  208. package/dist/types/src/cms/client/interfaces/components/ui/form/control-fields/control-fields-input.d.ts.map +1 -1
  209. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/category/[id]/edit/page.d.ts +1 -1
  210. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/category/[id]/edit/page.d.ts.map +1 -1
  211. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/category/[id]/page.d.ts +3 -1
  212. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/category/[id]/page.d.ts.map +1 -1
  213. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/category/[id]/relations/page.d.ts +3 -1
  214. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/category/[id]/relations/page.d.ts.map +1 -1
  215. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/category/create/page.d.ts +4 -7
  216. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/category/create/page.d.ts.map +1 -1
  217. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/page.d.ts +1 -4
  218. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/page.d.ts.map +1 -1
  219. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/post/[id]/edit/page.d.ts.map +1 -1
  220. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/post/[id]/page.d.ts.map +1 -1
  221. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/post/[id]/relations/page.d.ts.map +1 -1
  222. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/post/create/page.d.ts +4 -7
  223. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/post/create/page.d.ts.map +1 -1
  224. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/subcategory/[id]/edit/page.d.ts +1 -1
  225. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/subcategory/[id]/edit/page.d.ts.map +1 -1
  226. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/subcategory/[id]/page.d.ts +3 -1
  227. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/subcategory/[id]/page.d.ts.map +1 -1
  228. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/subcategory/[id]/relations/page.d.ts.map +1 -1
  229. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/subcategory/create/page.d.ts +4 -7
  230. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/subcategory/create/page.d.ts.map +1 -1
  231. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/page.d.ts +1 -3
  232. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/page.d.ts.map +1 -1
  233. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/tag/[id]/page.d.ts.map +1 -1
  234. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/tag/[id]/relations/page.d.ts +3 -1
  235. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/tag/[id]/relations/page.d.ts.map +1 -1
  236. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/trash/index.d.ts +2 -0
  237. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/trash/index.d.ts.map +1 -0
  238. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/trash/page.d.ts +18 -0
  239. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/trash/page.d.ts.map +1 -0
  240. package/dist/types/src/cms/client/interfaces/pages/dashboard/system/access/admin/[id]/relations/page.d.ts +3 -1
  241. package/dist/types/src/cms/client/interfaces/pages/dashboard/system/access/admin/[id]/relations/page.d.ts.map +1 -1
  242. package/dist/types/src/cms/client/interfaces/pages/dashboard/system/storage/file/[id]/relations/page.d.ts +5 -6
  243. package/dist/types/src/cms/client/interfaces/pages/dashboard/system/storage/file/[id]/relations/page.d.ts.map +1 -1
  244. package/dist/types/src/cms/client/interfaces/pages/dashboard/system/storage/trash/page.d.ts.map +1 -1
  245. package/dist/types/src/cms/client/interfaces/pages/dashboard/website/website-page/[slug]/edit/page.d.ts +7 -9
  246. package/dist/types/src/cms/client/interfaces/pages/dashboard/website/website-page/[slug]/edit/page.d.ts.map +1 -1
  247. package/dist/types/src/cms/client/interfaces/pages/dashboard/website/website-page/[slug]/page.d.ts +7 -9
  248. package/dist/types/src/cms/client/interfaces/pages/dashboard/website/website-page/[slug]/page.d.ts.map +1 -1
  249. package/dist/types/src/cms/client/interfaces/pages/dashboard/website/website-page/page.d.ts +3 -3
  250. package/dist/types/src/cms/client/interfaces/pages/dashboard/website/website-page/page.d.ts.map +1 -1
  251. package/dist/types/src/cms/client/interfaces/pages/index.d.ts +1 -1
  252. package/dist/types/src/cms/client/interfaces/pages/index.d.ts.map +1 -1
  253. package/dist/types/src/cms/contracts/resources/page/actions.d.ts +7 -0
  254. package/dist/types/src/cms/contracts/resources/page/actions.d.ts.map +1 -0
  255. package/dist/types/src/cms/contracts/resources/post/actions.d.ts +2 -0
  256. package/dist/types/src/cms/contracts/resources/post/actions.d.ts.map +1 -1
  257. package/dist/types/src/cms/contracts/resources/post/form-data.d.ts +1 -1
  258. package/dist/types/src/cms/contracts/resources/post/form-data.d.ts.map +1 -1
  259. package/dist/types/src/cms/contracts/resources/seo-metadata/form-data.d.ts +2 -2
  260. package/dist/types/src/cms/contracts/resources/seo-metadata/form-data.d.ts.map +1 -1
  261. package/dist/types/src/cms/server/create-cms-server.d.ts +7 -0
  262. package/dist/types/src/cms/server/create-cms-server.d.ts.map +1 -1
  263. package/dist/types/src/cms/server/index.d.ts +1 -1
  264. package/dist/types/src/cms/server/index.d.ts.map +1 -1
  265. package/dist/types/src/cms/server/resources/index.d.ts +1 -0
  266. package/dist/types/src/cms/server/resources/index.d.ts.map +1 -1
  267. package/dist/types/src/cms/server/resources/page/actions.d.ts +8 -0
  268. package/dist/types/src/cms/server/resources/page/actions.d.ts.map +1 -0
  269. package/dist/types/src/cms/server/resources/post/actions.d.ts +2 -0
  270. package/dist/types/src/cms/server/resources/post/actions.d.ts.map +1 -1
  271. package/dist/types/src/cms/server/resources/seo-metadata/actions.d.ts.map +1 -1
  272. package/dist/types/src/config/content-ui.d.ts +14 -0
  273. package/dist/types/src/config/content-ui.d.ts.map +1 -0
  274. package/dist/types/src/config/index.d.ts +2 -0
  275. package/dist/types/src/config/index.d.ts.map +1 -1
  276. package/dist/types/src/config/page.d.ts +4 -0
  277. package/dist/types/src/config/page.d.ts.map +1 -0
  278. package/dist/types/src/config/topics.d.ts +2 -2
  279. package/dist/types/src/config/topics.d.ts.map +1 -1
  280. package/dist/types/src/constants/paths/cms-paths.d.ts +3 -3
  281. package/dist/types/src/core/infrastructure/index.d.ts +1 -0
  282. package/dist/types/src/core/infrastructure/index.d.ts.map +1 -1
  283. package/dist/types/src/core/infrastructure/prisma/file/include.d.ts +121 -0
  284. package/dist/types/src/core/infrastructure/prisma/file/include.d.ts.map +1 -1
  285. package/dist/types/src/core/infrastructure/prisma/file/mappers.d.ts.map +1 -1
  286. package/dist/types/src/core/infrastructure/prisma/helpers/active-file-references.d.ts +1 -1
  287. package/dist/types/src/core/infrastructure/prisma/helpers/active-file-references.d.ts.map +1 -1
  288. package/dist/types/src/core/infrastructure/prisma/index.d.ts +1 -0
  289. package/dist/types/src/core/infrastructure/prisma/index.d.ts.map +1 -1
  290. package/dist/types/src/core/infrastructure/prisma/page/include.d.ts +63 -0
  291. package/dist/types/src/core/infrastructure/prisma/page/include.d.ts.map +1 -0
  292. package/dist/types/src/core/infrastructure/prisma/page/index.d.ts +4 -0
  293. package/dist/types/src/core/infrastructure/prisma/page/index.d.ts.map +1 -0
  294. package/dist/types/src/core/infrastructure/prisma/page/mappers.d.ts +9 -0
  295. package/dist/types/src/core/infrastructure/prisma/page/mappers.d.ts.map +1 -0
  296. package/dist/types/src/core/infrastructure/prisma/page/page-prisma-ports.d.ts +7 -0
  297. package/dist/types/src/core/infrastructure/prisma/page/page-prisma-ports.d.ts.map +1 -0
  298. package/dist/types/src/core/infrastructure/prisma/page/types.d.ts +10 -0
  299. package/dist/types/src/core/infrastructure/prisma/page/types.d.ts.map +1 -0
  300. package/dist/types/src/core/infrastructure/prisma/post/include.d.ts +0 -29
  301. package/dist/types/src/core/infrastructure/prisma/post/include.d.ts.map +1 -1
  302. package/dist/types/src/core/infrastructure/prisma/post/lifecycle.d.ts +66 -0
  303. package/dist/types/src/core/infrastructure/prisma/post/lifecycle.d.ts.map +1 -0
  304. package/dist/types/src/core/infrastructure/prisma/post/mappers.d.ts.map +1 -1
  305. package/dist/types/src/core/infrastructure/prisma/post/post-prisma-ports.d.ts.map +1 -1
  306. package/dist/types/src/core/infrastructure/prisma/post/read-scope.d.ts +271 -0
  307. package/dist/types/src/core/infrastructure/prisma/post/read-scope.d.ts.map +1 -0
  308. package/dist/types/src/core/infrastructure/prisma/seo-metadata/mappers.d.ts +1 -1
  309. package/dist/types/src/core/infrastructure/prisma/seo-metadata/mappers.d.ts.map +1 -1
  310. package/dist/types/src/core/infrastructure/prisma/seo-metadata/seo-metadata-prisma-ports.d.ts +2 -2
  311. package/dist/types/src/core/infrastructure/prisma/seo-metadata/seo-metadata-prisma-ports.d.ts.map +1 -1
  312. package/dist/types/src/core/seeders/page/seeder.d.ts +3 -3
  313. package/dist/types/src/core/seeders/page/seeder.d.ts.map +1 -1
  314. package/dist/types/src/core/seeders/seed.d.ts +2 -3
  315. package/dist/types/src/core/seeders/seed.d.ts.map +1 -1
  316. package/dist/types/src/core/sitero-server/create-sitero-server.d.ts.map +1 -1
  317. package/dist/types/src/core/sitero-server/types.d.ts +2 -0
  318. package/dist/types/src/core/sitero-server/types.d.ts.map +1 -1
  319. package/dist/types/src/shared/list-item.d.ts +1 -0
  320. package/dist/types/src/shared/list-item.d.ts.map +1 -1
  321. package/dist/types/src/web/contracts/index.d.ts +1 -0
  322. package/dist/types/src/web/contracts/index.d.ts.map +1 -1
  323. package/dist/types/src/web/contracts/resources/page/actions.d.ts +5 -0
  324. package/dist/types/src/web/contracts/resources/page/actions.d.ts.map +1 -0
  325. package/dist/types/src/web/contracts/resources/post/actions.d.ts +1 -1
  326. package/dist/types/src/web/contracts/resources/post/actions.d.ts.map +1 -1
  327. package/dist/types/src/web/server/create-web-server.d.ts.map +1 -1
  328. package/dist/types/src/web/server/index.d.ts +1 -1
  329. package/dist/types/src/web/server/index.d.ts.map +1 -1
  330. package/dist/types/src/web/server/resources/index.d.ts +1 -0
  331. package/dist/types/src/web/server/resources/index.d.ts.map +1 -1
  332. package/dist/types/src/web/server/resources/page/actions.d.ts +17 -0
  333. package/dist/types/src/web/server/resources/page/actions.d.ts.map +1 -0
  334. package/dist/types/src/web/server/resources/post/actions.d.ts +1 -6
  335. package/dist/types/src/web/server/resources/post/actions.d.ts.map +1 -1
  336. package/dist/types/src/web/server/seo/metadata/build-metadata.d.ts +5 -2
  337. package/dist/types/src/web/server/seo/metadata/build-metadata.d.ts.map +1 -1
  338. package/dist/types/src/web/server/seo/sitemap/build-entries.d.ts +2 -2
  339. package/dist/types/src/web/server/seo/sitemap/build-entries.d.ts.map +1 -1
  340. package/dist/types/src/web/server/seo/sitemap/get-page-items.d.ts +6 -2
  341. package/dist/types/src/web/server/seo/sitemap/get-page-items.d.ts.map +1 -1
  342. package/dist/types/src/web/server/seo/sitemap/get-post-items.d.ts.map +1 -1
  343. package/dist/types/src/web/server/seo/sitemap/get-subcategory-items.d.ts.map +1 -1
  344. package/dist/types/src/web/server/types.d.ts +6 -2
  345. package/dist/types/src/web/server/types.d.ts.map +1 -1
  346. package/package.json +3 -3
  347. package/dist/src/cms/client/interfaces/components/resources/post/topic/topic-card.js +0 -81
  348. package/dist/src/cms/client/interfaces/components/resources/post/topic/topic-table.js +0 -120
  349. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/_id_/edit/page.js +0 -110
  350. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/_id_/page.js +0 -161
  351. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/page.js +0 -103
  352. package/dist/src/core/seeders/topic/seeder.js +0 -47
  353. package/dist/types/src/cms/client/interfaces/components/resources/post/topic/index.d.ts +0 -3
  354. package/dist/types/src/cms/client/interfaces/components/resources/post/topic/index.d.ts.map +0 -1
  355. package/dist/types/src/cms/client/interfaces/components/resources/post/topic/topic-card.d.ts +0 -5
  356. package/dist/types/src/cms/client/interfaces/components/resources/post/topic/topic-card.d.ts.map +0 -1
  357. package/dist/types/src/cms/client/interfaces/components/resources/post/topic/topic-table.d.ts +0 -3
  358. package/dist/types/src/cms/client/interfaces/components/resources/post/topic/topic-table.d.ts.map +0 -1
  359. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/[id]/edit/page.d.ts +0 -20
  360. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/[id]/edit/page.d.ts.map +0 -1
  361. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/[id]/page.d.ts +0 -20
  362. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/[id]/page.d.ts.map +0 -1
  363. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/index.d.ts +0 -4
  364. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/index.d.ts.map +0 -1
  365. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/page.d.ts +0 -14
  366. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/page.d.ts.map +0 -1
  367. package/dist/types/src/core/seeders/topic/seeder.d.ts +0 -10
  368. package/dist/types/src/core/seeders/topic/seeder.d.ts.map +0 -1
@@ -18,6 +18,7 @@ import { createUsePostCreateFormData } from './resources/post/use-create-form-da
18
18
  import { createUsePostUpdateFormData } from './resources/post/use-update-form-data.js';
19
19
  import { createUseSeoMetadataUpsertFormData } from './resources/seo-metadata/use-upsert-form-data.js';
20
20
  import { createUseConfigUpdateFormData } from './resources/config/use-config-update-form-data.js';
21
+ import { createUsePageUpdateFormData } from './resources/page/use-page-update-form-data.js';
21
22
  import { useParentPathname } from './ui/use-parent-pathname.js';
22
23
  import { useNavItems } from './ui/use-nav-items.js';
23
24
 
@@ -42,6 +43,9 @@ function createApplications(input) {
42
43
  const usePostUpdateFormData = createUsePostUpdateFormData({
43
44
  buildTranslations
44
45
  });
46
+ const usePageUpdateFormData = createUsePageUpdateFormData({
47
+ buildTranslations
48
+ });
45
49
  const useSeoMetadataUpsertFormData = createUseSeoMetadataUpsertFormData({
46
50
  buildTranslations
47
51
  });
@@ -65,6 +69,7 @@ function createApplications(input) {
65
69
  useAdminUpdateFormData,
66
70
  useFileCreateFormData,
67
71
  useFileUpdateFormData,
72
+ usePageUpdateFormData,
68
73
  usePostCreateFormData,
69
74
  usePostUpdateFormData,
70
75
  useSeoMetadataUpsertFormData,
@@ -0,0 +1,56 @@
1
+ import { PAGE_TEXT_FIELDS, PAGE_MEDIA_FIELDS } from 'sitero-domain';
2
+
3
+ function buildPageUpdateFormData(buildTranslations, page) {
4
+ const defaults = buildTranslations(
5
+ PAGE_TEXT_FIELDS.map((key) => ({ key, value: null }))
6
+ );
7
+ const locales = [
8
+ .../* @__PURE__ */ new Set([
9
+ ...defaults.map((t) => t.locale),
10
+ ...page?.translations.map((t) => t.locale) ?? []
11
+ ])
12
+ ];
13
+ const texts = Object.fromEntries(
14
+ PAGE_TEXT_FIELDS.map((key) => [key, null])
15
+ );
16
+ return {
17
+ ...Object.fromEntries(
18
+ PAGE_MEDIA_FIELDS.map((key) => [key, page?.[key] ?? null])
19
+ ),
20
+ translations: locales.map((locale) => {
21
+ const source = page?.translations.find((t) => t.locale === locale);
22
+ return {
23
+ ...texts,
24
+ ...Object.fromEntries(
25
+ PAGE_TEXT_FIELDS.map((key) => [key, source?.[key] ?? null])
26
+ ),
27
+ locale
28
+ };
29
+ })
30
+ };
31
+ }
32
+ function toPageUpdateInput({
33
+ id,
34
+ pageKey,
35
+ formData,
36
+ allowField
37
+ }) {
38
+ const page = {
39
+ translations: formData.translations.map((translation) => {
40
+ const result = {
41
+ locale: translation.locale
42
+ };
43
+ for (const field of PAGE_TEXT_FIELDS) {
44
+ if (allowField({ pageKey, field })) result[field] = translation[field];
45
+ }
46
+ return result;
47
+ })
48
+ };
49
+ for (const field of PAGE_MEDIA_FIELDS) {
50
+ if (allowField({ pageKey, field }))
51
+ page[`${field}Id`] = formData[field]?.id ?? null;
52
+ }
53
+ return { id, page };
54
+ }
55
+
56
+ export { buildPageUpdateFormData, toPageUpdateInput };
@@ -0,0 +1,30 @@
1
+ "use client";
2
+ import { useState, useRef, useEffect } from 'react';
3
+ import { buildPageUpdateFormData } from './form-data.js';
4
+
5
+ function createUsePageUpdateFormData({
6
+ buildTranslations
7
+ }) {
8
+ return function usePageUpdateFormData({
9
+ page
10
+ }) {
11
+ const [formData, setFormData] = useState(
12
+ () => buildPageUpdateFormData(buildTranslations, page)
13
+ );
14
+ const initializedId = useRef(page?.id);
15
+ const [loadedId, setLoadedId] = useState(page?.id);
16
+ useEffect(() => {
17
+ if (!page || initializedId.current === page.id) return;
18
+ setFormData(buildPageUpdateFormData(buildTranslations, page));
19
+ initializedId.current = page.id;
20
+ setLoadedId(page.id);
21
+ }, [page]);
22
+ return {
23
+ formData,
24
+ setFormData,
25
+ isInitializing: !page || loadedId !== page.id
26
+ };
27
+ };
28
+ }
29
+
30
+ export { createUsePageUpdateFormData };
@@ -7,14 +7,14 @@ function createUsePostCreateFormData({
7
7
  return function usePostCreateFormData({
8
8
  type,
9
9
  admin,
10
- topic
10
+ topicKey
11
11
  }) {
12
12
  const [formData, setFormData] = useState(() => ({
13
13
  type,
14
14
  // ----------------------------------------------------------------------------
15
15
  // states
16
16
  // ----------------------------------------------------------------------------
17
- isActive: true,
17
+ isActive: false,
18
18
  isIndexActive: false,
19
19
  index: null,
20
20
  isSlugActive: false,
@@ -27,7 +27,7 @@ function createUsePostCreateFormData({
27
27
  // Admin
28
28
  author: admin,
29
29
  // Post
30
- topicId: topic?.id ?? null,
30
+ topicKey: topicKey ?? null,
31
31
  parents: [],
32
32
  tags: [],
33
33
  relatedPosts: [],
@@ -133,9 +133,9 @@ function createUsePostCreateFormData({
133
133
  setFormData((prev) => ({
134
134
  ...prev,
135
135
  author: admin,
136
- topicId: topic?.id ?? null
136
+ topicKey: topicKey ?? null
137
137
  }));
138
- }, [admin, topic]);
138
+ }, [admin, topicKey]);
139
139
  return { formData, setFormData };
140
140
  };
141
141
  }
@@ -28,7 +28,7 @@ function createUsePostUpdateFormData({
28
28
  // Admin
29
29
  author: null,
30
30
  // Post
31
- topicId: null,
31
+ topicKey: null,
32
32
  parents: [],
33
33
  tags: [],
34
34
  relatedPosts: [],
@@ -0,0 +1,35 @@
1
+ import 'mime-types';
2
+ import 'sitero-domain';
3
+ import 'react';
4
+ import 'ua-parser-js';
5
+ import '../../../../../shared/client/react-query/client.js';
6
+ import 'react/jsx-runtime';
7
+ import '@tanstack/react-query';
8
+ import { datetimeToUi } from '../../../../../shared/form/normalizers/datetime-to-ui.js';
9
+ import { jsonArrayToUi } from '../../../../../shared/form/normalizers/json-array-to-ui.js';
10
+ import 'clsx';
11
+ import 'tailwind-merge';
12
+ import { SEO_METADATA_EMPTY_TRANSLATIONS } from './seo-metadata-empty-translation.js';
13
+
14
+ function buildSeoMetadataTranslations(buildTranslations, saved = []) {
15
+ const translations = new Map(
16
+ SEO_METADATA_EMPTY_TRANSLATIONS(buildTranslations).map((value) => [
17
+ value.locale,
18
+ value
19
+ ])
20
+ );
21
+ for (const value of saved) {
22
+ translations.set(value.locale, {
23
+ ...translations.get(value.locale),
24
+ ...value,
25
+ ogType: value.ogType,
26
+ twitterCard: value.twitterCard,
27
+ ogArticlePublishedTime: datetimeToUi(value.ogArticlePublishedTime),
28
+ ogArticleModifiedTime: datetimeToUi(value.ogArticleModifiedTime),
29
+ jsonLd: jsonArrayToUi(value.jsonLd)
30
+ });
31
+ }
32
+ return [...translations.values()];
33
+ }
34
+
35
+ export { buildSeoMetadataTranslations };
@@ -1,49 +1,33 @@
1
1
  "use client";
2
2
  import { useState, useEffect } from 'react';
3
- import 'mime-types';
4
- import 'sitero-domain';
5
- import 'ua-parser-js';
6
- import '../../../../../shared/client/react-query/client.js';
7
- import 'react/jsx-runtime';
8
- import '@tanstack/react-query';
9
- import { datetimeToUi } from '../../../../../shared/form/normalizers/datetime-to-ui.js';
10
- import { jsonArrayToUi } from '../../../../../shared/form/normalizers/json-array-to-ui.js';
11
- import 'clsx';
12
- import 'tailwind-merge';
13
- import { ensureArray } from '../../../../../shared/utils/ensure-array.js';
14
- import { SEO_METADATA_EMPTY_TRANSLATIONS } from './seo-metadata-empty-translation.js';
3
+ import { buildSeoMetadataTranslations } from './build-seo-metadata-translations.js';
15
4
 
16
5
  function createUseSeoMetadataUpsertFormData({
17
6
  buildTranslations
18
7
  }) {
19
8
  return function useSeoMetadataUpsertFormData({
20
9
  id,
21
- post
10
+ post,
11
+ ownerType = "post"
22
12
  }) {
23
13
  const [formData, setFormData] = useState(() => ({
24
- postId: id,
25
- translations: SEO_METADATA_EMPTY_TRANSLATIONS(buildTranslations)
14
+ ...ownerType === "page" ? { pageId: id } : { postId: id },
15
+ translations: buildSeoMetadataTranslations(
16
+ buildTranslations,
17
+ post?.seoMetadatas
18
+ )
26
19
  }));
27
20
  useEffect(() => {
28
21
  if (!post) return;
29
- const seoMetadatas = ensureArray(post?.seoMetadatas);
30
- if (seoMetadatas.length === 0) return;
22
+ if (post.seoMetadatas.length === 0) return;
31
23
  setFormData({
32
- postId: post.id,
33
- translations: seoMetadatas.map((s) => {
34
- return {
35
- ...s,
36
- ogType: s.ogType,
37
- twitterCard: s.twitterCard,
38
- // Datetime to UI
39
- ogArticlePublishedTime: datetimeToUi(s.ogArticlePublishedTime),
40
- ogArticleModifiedTime: datetimeToUi(s.ogArticleModifiedTime),
41
- // JSON-LD to raw UI text
42
- jsonLd: jsonArrayToUi(s.jsonLd)
43
- };
44
- })
24
+ ...ownerType === "page" ? { pageId: post.id } : { postId: post.id },
25
+ translations: buildSeoMetadataTranslations(
26
+ buildTranslations,
27
+ post.seoMetadatas
28
+ )
45
29
  });
46
- }, [post, setFormData]);
30
+ }, [post, ownerType, setFormData]);
47
31
  return { formData, setFormData };
48
32
  };
49
33
  }
@@ -1,12 +1,11 @@
1
1
  import { useTranslator } from 'intor/react';
2
- import { Gauge, ShieldUser, ShieldCheck, Image, Trash2, Package, SlidersHorizontal, AppWindow, Inbox, SquareLibrary, Tag, ShelvingUnit } from 'lucide-react';
3
- import { POST_TYPES } from 'sitero-domain';
2
+ import { Gauge, ShieldUser, ShieldCheck, Image, Trash2, Package, SlidersHorizontal, AppWindow, Inbox, Tag, ShelvingUnit } from 'lucide-react';
4
3
  import { isContentTopic } from '../../../../config/topics.js';
5
4
  import { CMS_PATHS } from '../../../../constants/paths/cms-paths.js';
6
5
  import '../../../../constants/paths/redirect.js';
7
6
  import '../../../../constants/cms-locale.js';
8
7
  import 'mime-types';
9
- import { findTranslation } from '../../../../shared/translation/find-translation.js';
8
+ import 'sitero-domain';
10
9
  import 'react';
11
10
  import 'ua-parser-js';
12
11
  import '../../../../shared/client/react-query/client.js';
@@ -25,7 +24,7 @@ function useNavItems({
25
24
  PAGES,
26
25
  TOPICS,
27
26
  configFindManyAction,
28
- postFindManyAction
27
+ pageFindManyAction
29
28
  }) {
30
29
  const { t, locale } = useTranslator();
31
30
  const { data: websiteConfigs } = useQuery(
@@ -45,34 +44,26 @@ function useNavItems({
45
44
  }
46
45
  );
47
46
  const { data: pages } = useQuery(
48
- () => postFindManyAction({ type: POST_TYPES.PAGE }),
49
- ["postFindManyAction", POST_TYPES.PAGE],
50
- { select: (data) => data?.posts }
47
+ () => pageFindManyAction({ keys: Object.keys(PAGES) }),
48
+ ["pageFindManyAction", normalizeUnorderedCacheKey(Object.keys(PAGES))],
49
+ { select: (data) => data?.pages }
51
50
  );
52
- const pageNavItems = ensureArray(pages).map((page) => {
53
- const slug = page.slug;
54
- return {
55
- icon: PAGES[slug]?.icon,
56
- title: PAGES[slug]?.title[locale] ?? "",
51
+ const existingPageKeys = new Set(ensureArray(pages).map((page) => page.key));
52
+ const pageNavItems = Object.entries(PAGES).filter(([key]) => existingPageKeys.has(key)).map(
53
+ ([key, page]) => ({
54
+ icon: page.icon,
55
+ title: page.title[locale] ?? "",
57
56
  // from static
58
- url: `${CMS_PATHS.website["website-page"].pathname}/${page.slug}`
59
- };
60
- });
61
- const { data: topics } = useQuery(
62
- () => postFindManyAction({ type: POST_TYPES.TOPIC }),
63
- ["postFindManyAction", POST_TYPES.TOPIC],
64
- { select: (data) => data?.posts }
57
+ url: `${CMS_PATHS.website["website-page"].pathname}/${key}`
58
+ })
59
+ );
60
+ const topicNavItems = Object.entries(TOPICS).filter(([key]) => isContentTopic(TOPICS, key)).map(
61
+ ([key, topic]) => ({
62
+ icon: topic.icon,
63
+ title: topic.title[locale] ?? "",
64
+ url: `${CMS_PATHS.content["content-management"].pathname}/${key}`
65
+ })
65
66
  );
66
- const topicNavItems = ensureArray(topics).filter((topic) => isContentTopic(TOPICS, topic.slug)).map((topic) => {
67
- const translation = findTranslation(topic.translations, locale);
68
- const slug = topic.slug;
69
- return {
70
- icon: TOPICS[slug]?.icon,
71
- title: translation?.title ?? "",
72
- // from db
73
- url: `${CMS_PATHS.content["content-management"].pathname}/${topic.slug}`
74
- };
75
- });
76
67
  const navItems = [
77
68
  // dashboard
78
69
  {
@@ -159,23 +150,21 @@ function useNavItems({
159
150
  url: CMS_PATHS.content["content-management"].pathname,
160
151
  items: [
161
152
  ...topicNavItems,
162
- ...FEATURES.topic || FEATURES.tag ? [{ isSeparator: true }] : [],
163
- // topic
164
- ...FEATURES.topic ? [
165
- {
166
- icon: SquareLibrary,
167
- title: t("resources.topic.text"),
168
- url: CMS_PATHS.content["content-management"].topic.pathname
169
- }
170
- ] : [],
171
153
  // tag
154
+ ...FEATURES.tag ? [{ isSeparator: true }] : [],
172
155
  ...FEATURES.tag ? [
173
156
  {
174
157
  icon: Tag,
175
158
  title: t("resources.tag.text"),
176
159
  url: CMS_PATHS.content["content-management"].tag.pathname
177
160
  }
178
- ] : []
161
+ ] : [],
162
+ { isSeparator: true },
163
+ {
164
+ icon: Trash2,
165
+ title: t("main.trash.text"),
166
+ url: CMS_PATHS.content["content-management"].trash.pathname
167
+ }
179
168
  ]
180
169
  }
181
170
  ];
@@ -1,21 +1,22 @@
1
1
  const file = {
2
+ "confirm-restore": { text: "Restore the selected files?" },
2
3
  "delete-completed": { text: "Moved to trash" },
3
4
  "delete-skipped": { text: "Skipped" },
4
- "delete-failed": { text: "Delete failed, retry available" },
5
+ "delete-failed": { text: "Failed to move to trash. Please try again." },
5
6
  "delete-not-found": { text: "The file no longer exists." },
6
7
  "delete-already-deleted": { text: "The file is already in the trash." },
7
8
  "restore-completed": { text: "Restored" },
8
9
  "restore-skipped": { text: "Skipped" },
9
- "restore-failed": { text: "Restore failed, retry available" },
10
+ "restore-failed": { text: "Restore failed. Please try again." },
10
11
  "restore-not-found": { text: "The file no longer exists." },
11
12
  "restore-not-deleted": { text: "The file is no longer in the trash." },
12
- "purge-pending": { text: "Purge incomplete" },
13
+ "purge-pending": { text: "Permanent deletion is incomplete" },
13
14
  "restore-purge-started": {
14
15
  text: "This file cannot be restored because permanent deletion has started."
15
16
  },
16
17
  "purge-completed": { text: "Permanently deleted" },
17
18
  "purge-skipped": { text: "Skipped" },
18
- "purge-failed": { text: "Failed, retry available" },
19
+ "purge-failed": { text: "Permanent deletion failed. Please try again." },
19
20
  "lock-filter": {
20
21
  label: { text: "Lock status" }
21
22
  },
@@ -5,6 +5,13 @@ import { post } from './post.js';
5
5
  import { seoMetadata } from './seo-metadata.js';
6
6
 
7
7
  const resources = {
8
+ page: {
9
+ "text-placeholder": { text: "Please enter content" },
10
+ main: { text: "Main content" },
11
+ section: { text: "Section" },
12
+ "cover-media": { text: "Cover media" },
13
+ "custom-text": { text: "Custom text" }
14
+ },
8
15
  // common
9
16
  "related-resources": { text: "Related Resources" },
10
17
  "view-related-resources": { text: "View related resources" },
@@ -1,4 +1,35 @@
1
1
  const post = {
2
+ "is-public": { text: "Public" },
3
+ "confirm-restore": {
4
+ text: "Restore the selected content? It will not be public."
5
+ },
6
+ type: { text: "Content type" },
7
+ "previous-page": { text: "Previous page" },
8
+ "next-page": { text: "Next page" },
9
+ published: { text: "Public" },
10
+ unpublished: { text: "Not public" },
11
+ "in-use": {
12
+ text: "Other content references this item. Remove those references first."
13
+ },
14
+ "parent-unpublished": {
15
+ text: "Make all selected categories and their ancestors public first."
16
+ },
17
+ "published-children": {
18
+ text: "Make dependent content non-public before making this category non-public."
19
+ },
20
+ "slug-conflict": {
21
+ text: "This URL slug is already in use, including content in trash."
22
+ },
23
+ "invalid-state": {
24
+ text: "The content state has changed. Refresh and try again."
25
+ },
26
+ "reference-unavailable": { text: "A selected item is missing or in trash." },
27
+ "delete-locked": { text: "This content is locked and cannot be deleted." },
28
+ "empty-trash": { text: "No content in trash." },
29
+ trashed: { text: "In trash" },
30
+ "publication-hint": {
31
+ text: "Saving public content updates the live website immediately."
32
+ },
2
33
  text: "Content",
3
34
  author: { text: "Author" },
4
35
  "cover-image": { text: "Cover Image" },
@@ -14,7 +45,7 @@ const post = {
14
45
  text: "Summary",
15
46
  placeholder: { text: "Please enter a summary" }
16
47
  },
17
- excerpt: { text: "Excerpt" },
48
+ excerpt: { text: "Preview text" },
18
49
  description: {
19
50
  text: "Description",
20
51
  placeholder: { text: "Please enter a description" }
@@ -1,4 +1,5 @@
1
1
  const ui = {
2
+ retry: { text: "Retry" },
2
3
  // ------------------------------------------------------
3
4
  // common
4
5
  // ------------------------------------------------------
@@ -25,8 +26,14 @@ const ui = {
25
26
  edit: { text: "Edit" },
26
27
  update: { text: "Update" },
27
28
  locked: { text: "Locked" },
29
+ "move-to-trash": { text: "Move to trash" },
30
+ "move-many-to-trash": { text: "Move multiple items to trash" },
31
+ "dialog.move-to-trash": { text: "Move the selected items to trash?" },
32
+ "dialog.purge": {
33
+ text: "Permanently delete the selected items? This cannot be undone."
34
+ },
28
35
  destroy: { text: "Delete" },
29
- purge: { text: "Purge" },
36
+ purge: { text: "Delete permanently" },
30
37
  restore: { text: "Restore" },
31
38
  "create-many": { text: "Create Many" },
32
39
  "delete-many": { text: "Delete Many" },
@@ -1,21 +1,22 @@
1
1
  const file = {
2
+ "confirm-restore": { text: "\u78BA\u5B9A\u9084\u539F\u9078\u53D6\u7684\u6A94\u6848\uFF1F" },
2
3
  "delete-completed": { text: "\u5DF2\u79FB\u81F3\u5783\u573E\u6876" },
3
4
  "delete-skipped": { text: "\u5DF2\u7565\u904E" },
4
- "delete-failed": { text: "\u522A\u9664\u5931\u6557\uFF0C\u53EF\u91CD\u8A66" },
5
+ "delete-failed": { text: "\u79FB\u81F3\u5783\u573E\u6876\u5931\u6557\uFF0C\u8ACB\u91CD\u8A66" },
5
6
  "delete-not-found": { text: "\u6A94\u6848\u5DF2\u4E0D\u5B58\u5728\u3002" },
6
7
  "delete-already-deleted": { text: "\u6A94\u6848\u5DF2\u5728\u5783\u573E\u6876\u3002" },
7
8
  "restore-completed": { text: "\u5DF2\u9084\u539F" },
8
9
  "restore-skipped": { text: "\u5DF2\u7565\u904E" },
9
- "restore-failed": { text: "\u9084\u539F\u5931\u6557\uFF0C\u53EF\u91CD\u8A66" },
10
+ "restore-failed": { text: "\u9084\u539F\u5931\u6557\uFF0C\u8ACB\u91CD\u8A66" },
10
11
  "restore-not-found": { text: "\u6A94\u6848\u5DF2\u4E0D\u5B58\u5728\u3002" },
11
12
  "restore-not-deleted": { text: "\u6A94\u6848\u5DF2\u4E0D\u5728\u5783\u573E\u6876\u3002" },
12
- "purge-pending": { text: "\u6E05\u9664\u672A\u5B8C\u6210" },
13
+ "purge-pending": { text: "\u6C38\u4E45\u522A\u9664\u5C1A\u672A\u5B8C\u6210" },
13
14
  "restore-purge-started": {
14
15
  text: "\u6A94\u6848\u5DF2\u958B\u59CB\u6C38\u4E45\u522A\u9664\uFF0C\u7121\u6CD5\u9084\u539F\u3002"
15
16
  },
16
17
  "purge-completed": { text: "\u5DF2\u6C38\u4E45\u522A\u9664" },
17
- "purge-skipped": { text: "\u672A\u57F7\u884C" },
18
- "purge-failed": { text: "\u6E05\u9664\u5931\u6557\uFF0C\u53EF\u91CD\u8A66" },
18
+ "purge-skipped": { text: "\u5DF2\u7565\u904E" },
19
+ "purge-failed": { text: "\u6C38\u4E45\u522A\u9664\u5931\u6557\uFF0C\u8ACB\u91CD\u8A66" },
19
20
  "lock-filter": {
20
21
  label: { text: "\u9396\u5B9A\u72C0\u614B" }
21
22
  },
@@ -5,6 +5,13 @@ import { post } from './post.js';
5
5
  import { seoMetadata } from './seo-metadata.js';
6
6
 
7
7
  const resources = {
8
+ page: {
9
+ "text-placeholder": { text: "\u8ACB\u8F38\u5165\u5167\u5BB9" },
10
+ main: { text: "\u4E3B\u5167\u5BB9" },
11
+ section: { text: "\u5340\u584A" },
12
+ "cover-media": { text: "\u5C01\u9762\u5A92\u9AD4" },
13
+ "custom-text": { text: "\u81EA\u8A02\u6587\u5B57" }
14
+ },
8
15
  // common
9
16
  "related-resources": { text: "\u95DC\u806F\u8CC7\u6E90" },
10
17
  "view-related-resources": { text: "\u67E5\u770B\u95DC\u806F\u8CC7\u6E90" },
@@ -1,4 +1,21 @@
1
1
  const post = {
2
+ "is-public": { text: "\u662F\u5426\u516C\u958B" },
3
+ "confirm-restore": { text: "\u78BA\u5B9A\u9084\u539F\u9078\u53D6\u7684\u5167\u5BB9\uFF1F\u9084\u539F\u5F8C\u5C07\u4FDD\u6301\u672A\u516C\u958B\u3002" },
4
+ type: { text: "\u5167\u5BB9\u985E\u578B" },
5
+ "previous-page": { text: "\u4E0A\u4E00\u9801" },
6
+ "next-page": { text: "\u4E0B\u4E00\u9801" },
7
+ published: { text: "\u5DF2\u516C\u958B" },
8
+ unpublished: { text: "\u672A\u516C\u958B" },
9
+ "in-use": { text: "\u4ECD\u6709\u5176\u4ED6\u5167\u5BB9\u5F15\u7528\u6B64\u9805\u76EE\uFF0C\u8ACB\u5148\u89E3\u9664\u5F15\u7528\u3002" },
10
+ "parent-unpublished": { text: "\u8ACB\u5148\u516C\u958B\u6240\u6709\u6307\u5B9A\u5206\u985E\u53CA\u5176\u4E0A\u5C64\u5206\u985E\u3002" },
11
+ "published-children": { text: "\u8ACB\u5148\u5C07\u4F9D\u8CF4\u6B64\u5206\u985E\u7684\u516C\u958B\u5167\u5BB9\u8A2D\u70BA\u672A\u516C\u958B\u3002" },
12
+ "slug-conflict": { text: "\u6B64\u7DB2\u5740\u4EE3\u7A31\u5DF2\u88AB\u4F7F\u7528\uFF0C\u5305\u542B\u5783\u573E\u6876\u4E2D\u7684\u5167\u5BB9\u3002" },
13
+ "invalid-state": { text: "\u5167\u5BB9\u72C0\u614B\u5DF2\u8B8A\u66F4\uFF0C\u8ACB\u91CD\u65B0\u6574\u7406\u5F8C\u518D\u8A66\u3002" },
14
+ "reference-unavailable": { text: "\u9078\u53D6\u7684\u5167\u5BB9\u4E0D\u5B58\u5728\u6216\u5DF2\u5728\u5783\u573E\u6876\u3002" },
15
+ "delete-locked": { text: "\u6B64\u5167\u5BB9\u5DF2\u9396\u5B9A\uFF0C\u7121\u6CD5\u522A\u9664\u3002" },
16
+ "empty-trash": { text: "\u5783\u573E\u6876\u6C92\u6709\u5167\u5BB9\u3002" },
17
+ trashed: { text: "\u5DF2\u79FB\u81F3\u5783\u573E\u6876" },
18
+ "publication-hint": { text: "\u5132\u5B58\u5DF2\u516C\u958B\u5167\u5BB9\u6703\u7ACB\u5373\u66F4\u65B0\u524D\u53F0\u7DB2\u7AD9\u3002" },
2
19
  text: "\u5167\u5BB9",
3
20
  author: { text: "\u4F5C\u8005" },
4
21
  "cover-image": { text: "\u5C01\u9762\u5716\u7247" },
@@ -14,7 +31,7 @@ const post = {
14
31
  text: "\u6458\u8981",
15
32
  placeholder: { text: "\u8ACB\u8F38\u5165\u6458\u8981" }
16
33
  },
17
- excerpt: { text: "\u5167\u5BB9\u6458\u8981" },
34
+ excerpt: { text: "\u9810\u89BD\u6587\u5B57" },
18
35
  description: {
19
36
  text: "\u6558\u8FF0",
20
37
  placeholder: { text: "\u8ACB\u8F38\u5165\u6558\u8FF0" }
@@ -1,4 +1,5 @@
1
1
  const ui = {
2
+ retry: { text: "\u91CD\u8A66" },
2
3
  // ------------------------------------------------------
3
4
  // common
4
5
  // ------------------------------------------------------
@@ -25,9 +26,13 @@ const ui = {
25
26
  edit: { text: "\u7DE8\u8F2F" },
26
27
  update: { text: "\u66F4\u65B0" },
27
28
  locked: { text: "\u5DF2\u9396\u5B9A" },
29
+ "move-to-trash": { text: "\u79FB\u81F3\u5783\u573E\u6876" },
30
+ "move-many-to-trash": { text: "\u6279\u6B21\u79FB\u81F3\u5783\u573E\u6876" },
31
+ "dialog.move-to-trash": { text: "\u78BA\u5B9A\u5C07\u9078\u53D6\u9805\u76EE\u79FB\u81F3\u5783\u573E\u6876\uFF1F" },
32
+ "dialog.purge": { text: "\u78BA\u5B9A\u6C38\u4E45\u522A\u9664\u9078\u53D6\u9805\u76EE\uFF1F\u6B64\u64CD\u4F5C\u7121\u6CD5\u5FA9\u539F\u3002" },
28
33
  destroy: { text: "\u522A\u9664" },
29
- purge: { text: "\u5FB9\u5E95\u522A\u9664" },
30
- restore: { text: "\u5FA9\u539F" },
34
+ purge: { text: "\u6C38\u4E45\u522A\u9664" },
35
+ restore: { text: "\u9084\u539F" },
31
36
  "create-many": { text: "\u5EFA\u7ACB\u591A\u500B" },
32
37
  "delete-many": { text: "\u522A\u9664\u591A\u500B" },
33
38
  "view-website-page": { text: "\u67E5\u770B\u7DB2\u7AD9\u9801\u9762\uFF08\u53E6\u958B\u5206\u9801\uFF09" },
@@ -38,6 +38,21 @@ function getZodFieldErrorMessage(locale, error) {
38
38
  }
39
39
  function getCmsOperationErrorMessage(t, code) {
40
40
  switch (code) {
41
+ case "POST_IN_USE":
42
+ return t("resources.post.in-use.text");
43
+ case "POST_PARENT_UNPUBLISHED":
44
+ return t("resources.post.parent-unpublished.text");
45
+ case "POST_HAS_PUBLISHED_CHILDREN":
46
+ return t("resources.post.published-children.text");
47
+ case "POST_SLUG_CONFLICT":
48
+ return t("resources.post.slug-conflict.text");
49
+ case "POST_INVALID_STATE":
50
+ return t("resources.post.invalid-state.text");
51
+ case "POST_NOT_FOUND":
52
+ case "POST_REFERENCE_UNAVAILABLE":
53
+ return t("resources.post.reference-unavailable.text");
54
+ case "POST_DELETE_LOCKED":
55
+ return t("resources.post.delete-locked.text");
41
56
  case "RATE_LIMITED":
42
57
  return t("ui.operation-error.rate-limited.text");
43
58
  case "UNAUTHENTICATED":
@@ -59,8 +59,6 @@ import { CategoryTable } from './resources/post/category/category-table.js';
59
59
  import { TagTable } from './resources/post/tag/tag-table.js';
60
60
  import { createCategoryCard } from './resources/post/category/category-card.js';
61
61
  import { createTagCard } from './resources/post/tag/tag-card.js';
62
- import { createTopicCard } from './resources/post/topic/topic-card.js';
63
- import { createTopicTable } from './resources/post/topic/topic-table.js';
64
62
  import { createSeoMetadataDialog } from './resources/seo-metadata/seo-metadata-dialog.js';
65
63
  import { createSeoForm } from './resources/seo-metadata/seo-form/seo-form.js';
66
64
  import { createBasicTags } from './resources/seo-metadata/seo-form/fields/basic-tags.js';
@@ -75,12 +73,14 @@ function createComponents(input) {
75
73
  locales: constants.webLocales
76
74
  });
77
75
  const PostCard = createPostCard({
76
+ topics: constants.topics ?? {},
78
77
  storageUrl: constants.storageUrl,
79
78
  defaultWebLocale: constants.defaultWebLocale,
80
79
  SmartImage,
81
80
  strategies: constants.post.strategies
82
81
  });
83
82
  const PostList = createPostList({
83
+ topics: constants.topics ?? {},
84
84
  customControlFields: constants.post.customControlFields,
85
85
  defaultWebLocale: constants.defaultWebLocale,
86
86
  postFindListCardsAction: actions.resources.post.findListCards,
@@ -88,12 +88,9 @@ function createComponents(input) {
88
88
  strategies: constants.post.strategies
89
89
  });
90
90
  const CategoryCard = createCategoryCard({
91
+ topics: constants.topics ?? {},
91
92
  defaultWebLocale: constants.defaultWebLocale
92
93
  });
93
- const TopicCard = createTopicCard({
94
- defaultWebLocale: constants.defaultWebLocale
95
- });
96
- const TopicTable = createTopicTable();
97
94
  const TagCard = createTagCard({
98
95
  defaultWebLocale: constants.defaultWebLocale
99
96
  });
@@ -151,6 +148,7 @@ function createComponents(input) {
151
148
  const JsonLdTags = createJsonLdTags(seoFieldsInput);
152
149
  const SeoForm = createSeoForm({
153
150
  postFindDetailAction: actions.resources.post.findDetail,
151
+ ...actions.resources.page ? { pageFindDetailAction: actions.resources.page.findDetail } : {},
154
152
  seoMetadataUpsertAction: actions.resources.seoMetadata.upsert,
155
153
  useSeoMetadataUpsertFormData: applications.resources.seoMatadata.upsert,
156
154
  BasicTags,
@@ -184,8 +182,6 @@ function createComponents(input) {
184
182
  CategoryCard,
185
183
  CategoryTable,
186
184
  // topic
187
- TopicCard,
188
- TopicTable,
189
185
  // tag
190
186
  TagCard,
191
187
  TagTable,