@opengis/cms 0.0.22 → 0.0.26

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 (274) hide show
  1. package/dist/index-W-qQIppj-DRzFSjU1.js +2452 -0
  2. package/dist/index.html +28 -34
  3. package/dist/index.js +13915 -0
  4. package/dist/index.umd.cjs +153 -0
  5. package/package.json +4 -11
  6. package/dist/assets/AddUser-CX-McfRW.js +0 -1
  7. package/dist/assets/ApiKeys-DSv1exYv.js +0 -16
  8. package/dist/assets/Appearance-DDtOUvCV.js +0 -6
  9. package/dist/assets/ArticlesPage-D6B3cZsl.js +0 -6
  10. package/dist/assets/BuilderPage-CCeSMVWe.js +0 -1
  11. package/dist/assets/CollectionsBreadcrumb.vue_vue_type_script_setup_true_lang-DVYVfYF4.js +0 -1
  12. package/dist/assets/CollectionsPage-CHk8Cn5k.js +0 -1
  13. package/dist/assets/Dashboard-Bs7sXO6h.js +0 -11
  14. package/dist/assets/EditCollectionPage-gPuLJrN8.js +0 -41
  15. package/dist/assets/EmailPage-DhlWsPxk.js +0 -1
  16. package/dist/assets/EmptyData-Ct-xQv_N.js +0 -1
  17. package/dist/assets/FeedbackPage-DtaOncVv.js +0 -1
  18. package/dist/assets/Logs-CZ5klHNK.js +0 -1
  19. package/dist/assets/MediaBreadcrumb-BpOxt5PK.js +0 -11
  20. package/dist/assets/MediaPage-DqRcZFlO.js +0 -16
  21. package/dist/assets/MenuAddPage-BLcoVgrS.js +0 -1
  22. package/dist/assets/MenuItemPage-B2otXqkz.js +0 -20
  23. package/dist/assets/MenuPage-C00m4Fc_.js +0 -1
  24. package/dist/assets/MonacoEditor.vue_vue_type_script_setup_true_lang-CjoEsC67.js +0 -3
  25. package/dist/assets/PermissionsPage-LtqcCJ14.js +0 -1
  26. package/dist/assets/Settings-BHH6RoBP.js +0 -1
  27. package/dist/assets/SettingsTable-CY5pZx1z.js +0 -1
  28. package/dist/assets/SettingsTitle-t4WJBFxZ.js +0 -1
  29. package/dist/assets/SingletonsPage-Bn2Ypjhs.js +0 -6
  30. package/dist/assets/TagsPage-DAiakEth.js +0 -1
  31. package/dist/assets/UniversalTable.vue_vue_type_script_setup_true_lang-BQ5m4aZd.js +0 -11
  32. package/dist/assets/UniversalTablePagination.vue_vue_type_script_setup_true_lang-DppVBws0.js +0 -1
  33. package/dist/assets/Users-CMH5j0db.js +0 -1
  34. package/dist/assets/UsersPage-CDGreEib.js +0 -1
  35. package/dist/assets/arrow-up-DCe0WsrM.js +0 -16
  36. package/dist/assets/calendar-o9t4MkD2.js +0 -6
  37. package/dist/assets/chevron-left-WFftVS9c.js +0 -6
  38. package/dist/assets/chevron-right-BiiSb3Be.js +0 -6
  39. package/dist/assets/contentForm-unZQhjCu.js +0 -6
  40. package/dist/assets/en-BDx3Svx8.js +0 -1
  41. package/dist/assets/eye-Dijywc6g.js +0 -6
  42. package/dist/assets/file-B_duymIT.js +0 -6
  43. package/dist/assets/general-CkN_0qIV.js +0 -1
  44. package/dist/assets/index-BIp7eSXk.js +0 -1
  45. package/dist/assets/index-DCW2e4Az.js +0 -9
  46. package/dist/assets/index-DGweaj24.js +0 -1
  47. package/dist/assets/index-W-qQIppj-BDlsxaGB.js +0 -1
  48. package/dist/assets/index-W-qQIppj-BsopI3Hz-BIZR-dhy.js +0 -1
  49. package/dist/assets/index-oQz9FOqL.css +0 -1
  50. package/dist/assets/index-yMJAVBXk.js +0 -290
  51. package/dist/assets/list-CXRbSNky.js +0 -6
  52. package/dist/assets/logo-Cct5WB26.png +0 -0
  53. package/dist/assets/pencil-CwnPP4IJ.js +0 -6
  54. package/dist/assets/plus-DLR44m6p.js +0 -6
  55. package/dist/assets/save-FeDrOUOd.js +0 -6
  56. package/dist/assets/search-C4-fHihx.js +0 -6
  57. package/dist/assets/square-pen-xVs4e8Yb.js +0 -6
  58. package/dist/assets/trash-2-BGXMNU3d.js +0 -6
  59. package/dist/assets/uk-BA7DIKEL.js +0 -1
  60. package/dist/assets/useDebounce-DFq3rxAW.js +0 -1
  61. package/dist/assets/vs-form-reletion-link-C-xrdHDl.js +0 -20
  62. package/dist/assets/vs-form-reletion-link-bk-9ZkDH.css +0 -1
  63. package/dist/assets/vue.-sixQ7xP-CUPNuJcq.js +0 -1
  64. package/dist/assets/vuedraggable.umd-W_2WTF6i.js +0 -14
  65. package/dist/assets/x-D2t-wfBe.js +0 -6
  66. package/module/cms/card/cms.content.table/index.yml +0 -17
  67. package/module/cms/card/cms.content.table/main_info.hbs +0 -26
  68. package/module/cms/card/cms.menu.table/content_info.hbs +0 -16
  69. package/module/cms/card/cms.menu.table/index.yml +0 -18
  70. package/module/cms/card/cms.menu.table/main_info.hbs +0 -22
  71. package/module/cms/card/cms.settings.table/index.yml +0 -13
  72. package/module/cms/card/cms.settings.table/main_info.hbs +0 -20
  73. package/module/cms/cls/content.status.json +0 -18
  74. package/module/cms/cls/user_type.json +0 -10
  75. package/module/cms/form/admin.users.form.json +0 -78
  76. package/module/cms/form/cms.content.form.json +0 -79
  77. package/module/cms/form/cms.menu.form.json +0 -69
  78. package/module/cms/form/cms.settings.form.json +0 -32
  79. package/module/cms/menu.json +0 -24
  80. package/module/cms/router.js +0 -169
  81. package/module/cms/select/cms.page_type.sql +0 -2
  82. package/module/cms/select/collection.sql +0 -1
  83. package/module/cms/select/locale.sql +0 -17
  84. package/module/cms/select/news_tag_id.sql +0 -12
  85. package/module/cms/select/tag_id.sql +0 -1
  86. package/module/cms/table/admin.users.table.json +0 -54
  87. package/module/cms/table/cms.content.table.json +0 -106
  88. package/module/cms/table/cms.menu.table.json +0 -73
  89. package/module/cms/table/cms.settings.table.json +0 -57
  90. package/module/cms/table/collection.default.table.json +0 -102
  91. package/module/cms/table/single.default.table.json +0 -115
  92. package/src/App.css +0 -52
  93. package/src/App.vue +0 -62
  94. package/src/assets/image.png +0 -0
  95. package/src/assets/main.css +0 -3
  96. package/src/assets/tailwind-3.4.17.js +0 -113
  97. package/src/components/LanguageSwitcher.vue +0 -73
  98. package/src/components/SettingsCard.vue +0 -40
  99. package/src/components/builder/CreateForm.vue +0 -128
  100. package/src/components/builder/formTypeSchema.js +0 -145
  101. package/src/components/builder/tabs/index.ts +0 -9
  102. package/src/components/builder/tabs/vs-builder-edit.vue +0 -133
  103. package/src/components/builder/tabs/vs-builder-monaco.vue +0 -29
  104. package/src/components/builder/tabs/vs-builder-preview.vue +0 -39
  105. package/src/components/builder/vs-builder-datatable-controls.vue +0 -138
  106. package/src/components/builder/vs-builder-datatable-form.vue +0 -80
  107. package/src/components/builder/vs-builder-datatable.vue +0 -191
  108. package/src/components/builder/vs-builder-list-item.vue +0 -110
  109. package/src/components/collections/CollectionsBreadcrumb.vue +0 -52
  110. package/src/components/collections/CollectionsGrid.vue +0 -176
  111. package/src/components/collections/ContentBlock.vue +0 -75
  112. package/src/components/collections/formWrapper.vue +0 -156
  113. package/src/components/dashboard/ContentItem.vue +0 -82
  114. package/src/components/dashboard/DashboardHeader.vue +0 -33
  115. package/src/components/dashboard/QuickActions.vue +0 -84
  116. package/src/components/dashboard/RecentContent.vue +0 -54
  117. package/src/components/dashboard/StatCard.vue +0 -63
  118. package/src/components/dashboard/StatsGrid.vue +0 -28
  119. package/src/components/form-components/MonacoEditor.vue +0 -104
  120. package/src/components/form-components/VsFormMeta.vue +0 -40
  121. package/src/components/form-components/VsFormTags.vue +0 -150
  122. package/src/components/form-components/custom-datatable/vs-form-custom-datatable-add.vue +0 -84
  123. package/src/components/form-components/custom-datatable/vs-form-custom-datatable-controls.vue +0 -106
  124. package/src/components/form-components/index.js +0 -23
  125. package/src/components/form-components/reference/vs-form-reference-add.vue +0 -92
  126. package/src/components/form-components/reference/vs-form-reference-controls.vue +0 -101
  127. package/src/components/form-components/reference-list/referenceOptionList.js +0 -78
  128. package/src/components/form-components/reference-list/vs-form-reference-add.vue +0 -145
  129. package/src/components/form-components/reference-list/vs-form-reference-choce.vue +0 -39
  130. package/src/components/form-components/reference-list/vs-form-reference-controls.vue +0 -110
  131. package/src/components/form-components/reference-skeleton/about-skeleton.vue +0 -37
  132. package/src/components/form-components/reference-skeleton/banner-skeleton.vue +0 -29
  133. package/src/components/form-components/reference-skeleton/body-skeleton.vue +0 -56
  134. package/src/components/form-components/reference-skeleton/cards-skeleton.vue +0 -47
  135. package/src/components/form-components/reference-skeleton/documents-skeleton.vue +0 -64
  136. package/src/components/form-components/reference-skeleton/faq-skeleton.vue +0 -64
  137. package/src/components/form-components/reference-skeleton/form-skeleton.vue +0 -41
  138. package/src/components/form-components/reference-skeleton/index.js +0 -36
  139. package/src/components/form-components/reference-skeleton/infoLine-skeleton.vue +0 -37
  140. package/src/components/form-components/reference-skeleton/news-skeleton.vue +0 -54
  141. package/src/components/form-components/reference-skeleton/slider-skeleton.vue +0 -41
  142. package/src/components/form-components/reference-skeleton/tabs-skeleton.vue +0 -40
  143. package/src/components/form-components/reference-skeleton/team-skeleton.vue +0 -103
  144. package/src/components/form-components/reference-skeleton/usefulLinks-skeleton.vue +0 -52
  145. package/src/components/form-components/reference-skeleton/video-skeleton.vue +0 -36
  146. package/src/components/form-components/testReferenceTypes.js +0 -773
  147. package/src/components/form-components/vs-form-color-picker.vue +0 -29
  148. package/src/components/form-components/vs-form-custom-datatable.vue +0 -214
  149. package/src/components/form-components/vs-form-integer.vue +0 -86
  150. package/src/components/form-components/vs-form-key-value.vue +0 -201
  151. package/src/components/form-components/vs-form-marcdown-md.vue +0 -3
  152. package/src/components/form-components/vs-form-media-select.vue +0 -780
  153. package/src/components/form-components/vs-form-reference-list.vue +0 -97
  154. package/src/components/form-components/vs-form-reference.vue +0 -59
  155. package/src/components/form-components/vs-form-relation.vue +0 -30
  156. package/src/components/form-components/vs-form-reletion-link.vue +0 -34
  157. package/src/components/form-components/vs-form-select-collection.vue +0 -0
  158. package/src/components/form-components/vs-form-slug.vue +0 -72
  159. package/src/components/form-components/vs-form-tiptap.vue +0 -7
  160. package/src/components/form-components/vs-richtext-md.vue +0 -3
  161. package/src/components/icons/BellIcon.vue +0 -17
  162. package/src/components/icons/GlobeIcon.vue +0 -18
  163. package/src/components/icons/KeyIcon.vue +0 -20
  164. package/src/components/icons/PaletteIcon.vue +0 -22
  165. package/src/components/icons/SettingsIcon.vue +0 -19
  166. package/src/components/icons/ShieldIcon.vue +0 -18
  167. package/src/components/icons/UsersIcon.vue +0 -19
  168. package/src/components/icons/icon-chevron-right.vue +0 -16
  169. package/src/components/icons/icon-drag.vue +0 -20
  170. package/src/components/icons/icon-file-text.vue +0 -21
  171. package/src/components/icons/icon-folder.vue +0 -18
  172. package/src/components/icons/icon-grid.vue +0 -17
  173. package/src/components/icons/icon-group.vue +0 -19
  174. package/src/components/icons/icon-home.vue +0 -16
  175. package/src/components/icons/icon-image.vue +0 -18
  176. package/src/components/icons/icon-list.vue +0 -20
  177. package/src/components/icons/icon-more.vue +0 -17
  178. package/src/components/icons/icon-plus.vue +0 -17
  179. package/src/components/icons-types/icon-array.vue +0 -22
  180. package/src/components/icons-types/icon-boolean.vue +0 -18
  181. package/src/components/icons-types/icon-datalist.vue +0 -22
  182. package/src/components/icons-types/icon-date.vue +0 -20
  183. package/src/components/icons-types/icon-datetime.vue +0 -20
  184. package/src/components/icons-types/icon-file.vue +0 -21
  185. package/src/components/icons-types/icon-gallery.vue +0 -18
  186. package/src/components/icons-types/icon-image.vue +0 -19
  187. package/src/components/icons-types/icon-integer.vue +0 -20
  188. package/src/components/icons-types/icon-merkdown.vue +0 -18
  189. package/src/components/icons-types/icon-multiselect.vue +0 -22
  190. package/src/components/icons-types/icon-number.vue +0 -20
  191. package/src/components/icons-types/icon-radio.vue +0 -22
  192. package/src/components/icons-types/icon-reference-list.vue +0 -22
  193. package/src/components/icons-types/icon-reference.vue +0 -20
  194. package/src/components/icons-types/icon-relation.vue +0 -22
  195. package/src/components/icons-types/icon-richtext.vue +0 -18
  196. package/src/components/icons-types/icon-select.vue +0 -22
  197. package/src/components/icons-types/icon-slug.vue +0 -19
  198. package/src/components/icons-types/icon-text.vue +0 -19
  199. package/src/components/icons-types/index.js +0 -43
  200. package/src/components/layout/Layout.vue +0 -67
  201. package/src/components/layout/Sidebar.vue +0 -128
  202. package/src/components/media/FileUploadProgress.vue +0 -29
  203. package/src/components/media/MediaBreadcrumb.vue +0 -42
  204. package/src/components/media/MediaCreateFolder.vue +0 -59
  205. package/src/components/media/MediaFileInfo.vue +0 -148
  206. package/src/components/media/MediaGrid.vue +0 -148
  207. package/src/components/media/MediaList.vue +0 -148
  208. package/src/components/media/MediaViewControls.vue +0 -38
  209. package/src/components/media/TypeTag.vue +0 -23
  210. package/src/components/menu/AddNewItemInTree.vue +0 -75
  211. package/src/components/menu/MenuBody.vue +0 -149
  212. package/src/components/menu/MenuItem.vue +0 -73
  213. package/src/components/menu/MenuList.vue +0 -101
  214. package/src/components/referencec/index.ts +0 -7
  215. package/src/components/referencec/vs-reference-faq.vue +0 -61
  216. package/src/components/referencec/vs-reference-user-card.vue +0 -40
  217. package/src/components/settings/NotificationSettings.vue +0 -32
  218. package/src/components/settings/SettingsTable.vue +0 -50
  219. package/src/components/settings/SettingsTitle.vue +0 -33
  220. package/src/components/settings/SettingsToggleItem.vue +0 -25
  221. package/src/components/sidebar/DropdownMenu.vue +0 -34
  222. package/src/components/sidebar/SettingsSidebar.vue +0 -121
  223. package/src/components/sidebar/SidebarFooter.vue +0 -52
  224. package/src/components/sidebar/SidebarHeader.vue +0 -57
  225. package/src/components/sidebar/SidebarMenu.vue +0 -78
  226. package/src/components/ui/EmptyData.vue +0 -76
  227. package/src/components/ui/UniversalTable.vue +0 -310
  228. package/src/components/ui/UniversalTableFilters.vue +0 -0
  229. package/src/components/ui/UniversalTablePagination.vue +0 -118
  230. package/src/components/ui/VsPreview.vue +0 -75
  231. package/src/composables/useCollectionView.ts +0 -21
  232. package/src/composables/useDebounce.ts +0 -26
  233. package/src/composables/useMonaco.ts +0 -28
  234. package/src/composables/useTheme.ts +0 -40
  235. package/src/content/test-slug/metadata.json +0 -1
  236. package/src/i18n.ts +0 -75
  237. package/src/index.css +0 -3
  238. package/src/index.ts +0 -122
  239. package/src/locales/en.json +0 -778
  240. package/src/locales/uk.json +0 -797
  241. package/src/main.ts +0 -41
  242. package/src/pages/Dashboard.vue +0 -168
  243. package/src/pages/EmailPage.vue +0 -183
  244. package/src/pages/FeedbackPage.vue +0 -232
  245. package/src/pages/MediaPage.vue +0 -372
  246. package/src/pages/TagsPage.vue +0 -207
  247. package/src/pages/builder/BuilderPage.vue +0 -195
  248. package/src/pages/builder/EditCollectionPage.vue +0 -163
  249. package/src/pages/collections/ArticlesPage.vue +0 -385
  250. package/src/pages/collections/CollectionsPage.vue +0 -146
  251. package/src/pages/collections/SingletonsPage.vue +0 -119
  252. package/src/pages/collections/contentForm.vue +0 -484
  253. package/src/pages/collections/schema/seo.ts +0 -27
  254. package/src/pages/menu/MenuAddPage.vue +0 -123
  255. package/src/pages/menu/MenuItemPage.vue +0 -183
  256. package/src/pages/menu/MenuPage.vue +0 -133
  257. package/src/pages/settings/ApiKeys.vue +0 -75
  258. package/src/pages/settings/Appearance.vue +0 -80
  259. package/src/pages/settings/Logs.vue +0 -260
  260. package/src/pages/settings/PermissionsPage.vue +0 -237
  261. package/src/pages/settings/Settings.vue +0 -186
  262. package/src/pages/settings/Users.vue +0 -109
  263. package/src/pages/settings/general.vue +0 -154
  264. package/src/pages/settings/generalScheme.js +0 -132
  265. package/src/pages/users/AddUser.vue +0 -106
  266. package/src/pages/users/UsersPage.vue +0 -98
  267. package/src/props/builder.ts +0 -67
  268. package/src/props/content.ts +0 -56
  269. package/src/props/media.ts +0 -63
  270. package/src/router/index.ts +0 -181
  271. package/src/types/fastify-auth.d.ts +0 -4
  272. package/src/utils/getField.js +0 -270
  273. package/src/utils/translit.js +0 -19
  274. package/src/vite-env.d.ts +0 -1
@@ -1,195 +0,0 @@
1
- <template>
2
- <div class="space-y-6 max-w-7xl mx-auto">
3
- <div class="flex items-center justify-between mb-8">
4
- <div class="flex gap-4">
5
- <div>
6
- <h1 class="text-3xl font-bold text-slate-800 dark:text-slate-100 mb-2">{{ $t("builder.collections") }}</h1>
7
- <p class="text-slate-600 dark:text-slate-300">{{ $t("builder.manageContentCollections") }}</p>
8
- </div>
9
- <a :href="`https://cms.opengis.info/${locale}/guides/collections/`" target="_blank" :title="$t('guide.collections')" class="mt-2">
10
- <HelpCircle class="w-5 h-5" />
11
- </a>
12
- </div>
13
- <div class="flex items-center gap-3">
14
- <div class="relative">
15
- <div class="absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none">
16
- <Search class="w-5 h-5 text-gray-400" />
17
- </div>
18
- <input
19
- type="text"
20
- class="block w-full py-2 pl-10 pr-3 leading-5 text-gray-900 placeholder-gray-500 transition-colors bg-white border border-gray-300 rounded-md dark:border-gray-600 dark:bg-gray-700 dark:placeholder-gray-400 focus:outline-none focus:ring-sky-500 focus:border-sky-500 dark:text-white sm:text-sm"
21
- :placeholder="$t('builder.searchCollections')"
22
- v-model="searchQuery"
23
- />
24
- </div>
25
- <div class="flex items-center bg-white dark:bg-slate-700 border border-slate-200 dark:border-slate-600 rounded-lg p-1 max-w-[fit-content]">
26
- <button
27
- class="inline-flex items-center justify-center whitespace-nowrap font-medium transition-colors rounded-md text-xs h-8 w-8 p-0 hover:bg-blue-700 hover:text-white cursor-pointer"
28
- :class="{ 'bg-blue-600 text-white': collectionView === 'list' }"
29
- @click="collectionView = 'list'"
30
- >
31
- <IconList class="dark:text-blue-50 w-4 h-4" />
32
- </button>
33
-
34
- <button
35
- class="inline-flex items-center justify-center whitespace-nowrap font-medium transition-colors rounded-md text-xs h-8 w-8 p-0 hover:bg-blue-700 hover:text-white cursor-pointer"
36
- :class="{ 'bg-blue-600 text-white': collectionView === 'grid' }"
37
- @click="collectionView = 'grid'"
38
- >
39
- <IconGrid class="dark:text-blue-50 w-4 h-4" />
40
- </button>
41
- </div>
42
- <CreateForm />
43
- </div>
44
- </div>
45
-
46
- <div>
47
- <UniversalTable
48
- class="max-h-[calc(100vh-270px)] overflow-y-auto overflow-x-hidden"
49
- :columns="columns"
50
- :rows="filteredCollections"
51
- :onDelete="handleDeleteCollection"
52
- @edit="handleEditCollection"
53
- @view="handleGoToContent"
54
- v-if="collectionView === 'list'"
55
- >
56
- <template #actions="{ row }">
57
- <button
58
- class="inline-flex items-center justify-center whitespace-nowrap font-medium border rounded-md text-xs h-8 w-8 p-0 border-slate-300 bg-white transition-all duration-200 shadow-sm group
59
- dark:border-slate-600 dark:bg-slate-700 dark:hover:bg-slate-600 dark:hover:border-slate-500 dark:hover:text-slate-200
60
- hover:bg-blue-50 hover:border-blue-300 hover:text-blue-600"
61
- @click="handleGoToContent(row)"
62
- >
63
- <List class="text-slate-800 dark:text-slate-200 w-4 h-4 group-hover:text-blue-600 dark:group-hover:text-blue-50" />
64
- </button>
65
- </template>
66
- </UniversalTable>
67
- <CollectionsGrid
68
- v-if="collectionView === 'grid'"
69
- :collections="filteredCollections"
70
- @edit="handleEditCollection"
71
- @view="handleGoToContent"
72
- @delete="handleDeleteCollection"
73
- class="max-h-[calc(100vh-270px)] overflow-y-auto overflow-x-hidden"
74
- />
75
- <UniversalTablePagination
76
- v-if="tableData?.total > 16"
77
- :total="tableData?.filtered"
78
- :count="tableData?.count || tableData?.total"
79
- v-model:page="page"
80
- :limit="limit"
81
- />
82
- </div>
83
- </div>
84
- </template>
85
-
86
- <script setup lang="ts">
87
- import { ref, computed, onMounted, inject, watch } from "vue";
88
- import CreateForm from "../../components/builder/CreateForm.vue";
89
- import { useRouter } from "vue-router";
90
- import { List, Search, Layers, HelpCircle } from "lucide-vue-next";
91
- import { useHead } from "@vueuse/head";
92
- import { useI18n } from "vue-i18n";
93
- import { useDebounce } from "../../composables/useDebounce";
94
- import UniversalTable from "../../components/ui/UniversalTable.vue";
95
- import UniversalTablePagination from "../../components/ui/UniversalTablePagination.vue";
96
- import IconList from "../../components/icons/icon-list.vue";
97
- import IconGrid from "../../components/icons/icon-grid.vue";
98
- import CollectionsGrid from "../../components/collections/CollectionsGrid.vue";
99
- import { useCollectionView } from '../../composables/useCollectionView';
100
- import type { Collection } from '../../props/builder';
101
-
102
- const { t, locale } = useI18n();
103
-
104
- const router = useRouter();
105
-
106
- const columns = [
107
- { name: "name", title: t("builder.collectionName"), type: "text", icon: Layers },
108
- { name: "title", title: t("builder.title"), type: "text", icon: Layers },
109
- { name: "description", title: t("common.description"), type: "text" },
110
- { name: "entries", title: t("builder.entries"), type: "number" },
111
- { name: "fields", title: t("builder.fields"), type: "number" },
112
- { name: "status", title: t("builder.status"), type: "text" },
113
- { name: "last_edit", title: t("builder.lastModified"), type: "date" },
114
- ];
115
-
116
- const searchQuery = ref("");
117
- const debouncedSearchQuery = useDebounce(searchQuery, 300);
118
-
119
- useHead({
120
- title: () => t("collections.title") + " | CMS",
121
- });
122
-
123
- const collections = ref<Collection[]>([]);
124
- const fetchContentTypes = inject<any>("fetchContentTypes");
125
- const page = ref(1);
126
- const limit = ref(16);
127
- const tableData = ref<any>(null);
128
-
129
- const { collectionView, toggleCollectionView } = useCollectionView();
130
-
131
- async function fetchCollections() {
132
- try {
133
- const searchParam = debouncedSearchQuery.value ? `&search=${encodeURIComponent(String(debouncedSearchQuery.value))}` : '';
134
- const url = `/api/cms-type?page=${page.value}&limit=${limit.value}${searchParam}`;
135
- console.log('Fetching collections with URL:', url);
136
-
137
- const res = await fetch(url);
138
- if (!res.ok) throw new Error("Failed to fetch collections");
139
- const data = await res.json();
140
-
141
- console.log('Collections fetched:', data);
142
- collections.value = data.rows;
143
- tableData.value = data;
144
- } catch (e) {
145
- console.error("Error fetching collections:", e);
146
- }
147
- }
148
-
149
- onMounted(() => {
150
- fetchCollections();
151
- });
152
-
153
- const filteredCollections = computed(() => {
154
- const sorted = [...collections.value].sort((a, b) => {
155
- if (a.id === 'pages') return -1;
156
- if (b.id === 'pages') return 1;
157
- return 0;
158
- });
159
- return sorted;
160
- });
161
-
162
- const handleDeleteCollection = async (collection: Collection) => {
163
- try {
164
- await fetch(`/api/cms-type/${collection.id}`, { method: 'DELETE' });
165
- fetchCollections();
166
- fetchContentTypes();
167
- } catch (error) {
168
- console.error("Error deleting collection:", error);
169
- }
170
- };
171
-
172
- const handleEditCollection = (collection: Collection) => {
173
- router.push(`/settings/collections/edit/${collection.id || collection.name}`);
174
- };
175
-
176
- const handleGoToContent = (collection: Collection) => {
177
- if (collection.type === "single") {
178
- router.push(`/collections/single/${collection.name}`);
179
- } else {
180
- router.push(`/collections/${collection.name}`);
181
- }
182
- };
183
-
184
-
185
- watch(page, () => {
186
- fetchCollections();
187
- });
188
-
189
-
190
- watch(debouncedSearchQuery, (newValue) => {
191
- console.log('Search query changed:', newValue);
192
- page.value = 1; // Reset to first page when searching
193
- fetchCollections();
194
- });
195
- </script>
@@ -1,163 +0,0 @@
1
- <template>
2
- <div class="max-w-6xl mx-auto">
3
- <div class="flex items-center justify-between mb-6">
4
- <div>
5
- <h1 class="mb-2 text-2xl font-semibold text-gray-900">
6
- {{ $t("builder.editCollection") }}
7
- <span class="lowercase">{{ title }}</span>
8
- </h1>
9
- <p class="text-gray-600">{{ $t("builder.editContentForYourSite") }}</p>
10
- </div>
11
- <div class="flex items-center gap-2">
12
- <router-link
13
- to="/settings/collections"
14
- class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 border bg-background hover:text-accent-foreground h-10 px-4 py-2 border-gray-300 text-gray-700 hover:bg-gray-50"
15
- >{{ $t("common.actions.back") }}</router-link
16
- ><button
17
- @click="createContent"
18
- class="inline-flex items-center justify-center gap-2 whitespace-nowrap text-white rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 text-primary-foreground h-10 px-4 py-2 bg-blue-600 hover:bg-blue-700"
19
- >
20
- {{ $t("common.actions.save") }}
21
- </button>
22
- </div>
23
- </div>
24
- <div class="w-full">
25
- <div
26
- class="flex items-center w-full h-10 max-w-md grid-cols-3 p-1 mb-6 bg-white border border-gray-200 rounded-md text-muted-foreground"
27
- >
28
- <button
29
- v-for="tab in tabsList"
30
- :key="tab.id"
31
- @click="activeTab = tab.id"
32
- class="inline-flex flex-1 items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm data-[state=active]:bg-blue-50 data-[state=active]:text-blue-700 data-[state=active]:border-blue-200"
33
- :class="
34
- tab.id === activeTab
35
- ? 'bg-blue-50 text-blue-700 border-blue-200'
36
- : ''
37
- "
38
- >
39
- {{ tab.name }}
40
- </button>
41
- </div>
42
- </div>
43
- <div
44
- v-if="isLoading"
45
- class="container mx-auto bg-white rounded-md py-4 px-2 bg-opacity-50"
46
- >
47
- <component
48
- :is="tabs[activeTab]"
49
- v-model:yaml="values.yaml"
50
- v-model:data="values.data"
51
- v-model:form="form"
52
- />
53
- </div>
54
- </div>
55
- </template>
56
-
57
- <script setup>
58
- import { ref, computed, onMounted, getCurrentInstance, inject } from "vue";
59
- import { useRoute, useRouter } from "vue-router";
60
- import tabs from "../../components/builder/tabs";
61
- import { useI18n } from "vue-i18n";
62
- import { notify } from '@opengis/core'
63
- const { t } = useI18n();
64
- const fetchContentTypes = inject("fetchContentTypes");
65
-
66
- const activeTab = ref("edit");
67
- const values = ref({ yaml: "", data: { columns: [], type: "collection" } });
68
- const form = ref({});
69
- const title = ref("");
70
- const route = useRoute();
71
- const router = useRouter();
72
- const isLoading = ref(false);
73
-
74
- const tabsList = computed(() => [
75
- // {
76
- // name: "YAML",
77
- // id: "monaco",
78
- // },
79
- {
80
- name: t("builder.edit"),
81
- id: "edit",
82
- },
83
- {
84
- name: t("builder.preview"),
85
- id: "preview",
86
- },
87
- ]);
88
-
89
- const getCollection = async () => {
90
- try {
91
- const response = await fetch(`/api/cms-type/${route.params.id}`);
92
- const data = await response.json();
93
-
94
- // Create a new object to avoid direct mutation of reactive data
95
- const newData = {
96
- ...data,
97
- columns: Array.isArray(data.columns)
98
- ? data.columns
99
- : Object.entries(data?.columns || {})?.map(([name, column]) => ({
100
- ...column,
101
- name,
102
- })),
103
- };
104
-
105
- // Update the reactive values in a single operation
106
- values.value = {
107
- ...values.value,
108
- data: newData
109
- };
110
-
111
- title.value = newData.title || newData.name;
112
- } catch (error) {
113
- console.error(error);
114
- } finally {
115
- isLoading.value = true;
116
- }
117
- };
118
-
119
- const createContent = async () => {
120
- try {
121
- let result = await form.value.validate();
122
- if (result) {
123
- notify({
124
- type: "warning",
125
- title: t("common.actions.warning"),
126
- message: t("builder.editFieldFailed"),
127
- });
128
- return;
129
- }
130
-
131
- const response = await fetch(
132
- `/api/cms-type/${route.params.id}`,
133
- {
134
- method: 'PUT',
135
- headers: {
136
- 'Content-Type': 'application/json',
137
- },
138
- body: JSON.stringify(activeTab.value === "monaco" ? values.value?.yaml : values.value?.data)
139
- }
140
- );
141
- router.push(`/settings/collections`);
142
- fetchContentTypes();
143
- notify({
144
- type: "success",
145
- title: t("common.actions.success"),
146
- message: t("collections.collectionCreated"),
147
- });
148
- } catch (error) {
149
- console.error(error);
150
- notify({
151
- type: "error",
152
- title: t("common.actions.error"),
153
- message: t("collections.collectionCreationFailed"),
154
- });
155
- }
156
- };
157
-
158
- onMounted(() => {
159
- getCollection();
160
- });
161
- </script>
162
-
163
- <style lang="scss" scoped></style>