@opengis/cms 0.0.17 → 0.0.18

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.
@@ -0,0 +1,17 @@
1
+ component: default
2
+
3
+ tokens:
4
+ edit: { table: cms.content.table, form: cms.content.form, id: '{{id}}', ignoreCheck: true }
5
+
6
+ panels:
7
+ - type: container
8
+ col: 5
9
+ items:
10
+ - name: main_info
11
+ - component: vs-widget-file
12
+ - type: tabs
13
+ col: 7
14
+ items:
15
+ - component: vs-widget-history
16
+ title: Історія редагування
17
+
@@ -0,0 +1,26 @@
1
+ <div>
2
+ <div class="flex justify-between items-center pb-[5px]">
3
+ <div class="font-semibold text-[16px] dark:text-white">Загальна інформація</div>
4
+ <div class="flex gap-[5px] items-center">
5
+ {{{button this token=(token table="cms.content.table" form="cms.content.form" id=content_id) edit=1 }}}
6
+ {{{button this token=(token table="cms.content.table" id=content_id) del=1 }}}
7
+ </div>
8
+ </div>
9
+ {{{descriptionList
10
+ this
11
+ comma=";"
12
+ columns="
13
+ Назва,title,
14
+ Slug,slug,
15
+ Тип контенту,{{select content_type_id data='collection'}},
16
+ Статус,{{{badge status data='content.status'}}},
17
+ Дата публікації,{{formatDate published_at}},
18
+ Локаль,locale,
19
+ Головне зображення,{{{buttonFilePreview main_image}}},
20
+ Користувач; який створив запис, {{select created_by data='user_id'}},
21
+ Дата створення, {{formatDate created_at}},
22
+ Дата оновлення, {{formatDate updated_at}}
23
+ "
24
+ }}}
25
+ </div>
26
+
@@ -0,0 +1,16 @@
1
+ <div>
2
+ <div class="font-semibold text-[16px] dark:text-white mb-2">Контент меню</div>
3
+ {{#if content}}
4
+ <div class="bg-gray-50 dark:bg-gray-800 p-4 rounded-lg mb-4">
5
+ <div class="font-semibold text-sm mb-2">YAML формат:</div>
6
+ <pre class="bg-gray-900 text-green-400 p-4 rounded-lg font-mono text-sm overflow-auto whitespace-pre-wrap">{{content}}</pre>
7
+ </div>
8
+ {{/if}}
9
+ {{#if items}}
10
+ <div class="bg-gray-50 dark:bg-gray-800 p-4 rounded-lg">
11
+ <div class="font-semibold text-sm mb-2">JSON формат:</div>
12
+ <pre class="bg-gray-900 text-green-400 p-4 rounded-lg font-mono text-sm overflow-auto whitespace-pre-wrap">{{json items}}</pre>
13
+ </div>
14
+ {{/if}}
15
+ </div>
16
+
@@ -0,0 +1,18 @@
1
+ component: default
2
+
3
+ tokens:
4
+ edit: { table: cms.menu.table, form: cms.menu.form, id: '{{id}}', ignoreCheck: true }
5
+
6
+ panels:
7
+ - type: container
8
+ col: 5
9
+ items:
10
+ - name: main_info
11
+ - type: tabs
12
+ col: 7
13
+ items:
14
+ - name: content_info
15
+ title: Контент меню
16
+ - component: vs-widget-history
17
+ title: Історія редагування
18
+
@@ -0,0 +1,22 @@
1
+ <div>
2
+ <div class="flex justify-between items-center pb-[5px]">
3
+ <div class="font-semibold text-[16px] dark:text-white">Загальна інформація</div>
4
+ <div class="flex gap-[5px] items-center">
5
+ {{{button this token=(token table="cms.menu.table" form="cms.menu.form" id=menu_id) edit=1 }}}
6
+ {{{button this token=(token table="cms.menu.table" id=menu_id) del=1 }}}
7
+ </div>
8
+ </div>
9
+ {{{descriptionList
10
+ this
11
+ comma=";"
12
+ columns="
13
+ Назва меню,name,
14
+ Локаль,locale,
15
+ Опис,description,
16
+ Користувач; який створив запис, {{select created_by data='user_id'}},
17
+ Дата створення, {{formatDate created_at}},
18
+ Дата оновлення, {{formatDate updated_at}}
19
+ "
20
+ }}}
21
+ </div>
22
+
@@ -0,0 +1,13 @@
1
+ component: default
2
+
3
+ tokens:
4
+ edit: { table: cms.settings.table, form: cms.settings.form, id: '{{id}}', ignoreCheck: true }
5
+
6
+ panels:
7
+ - type: container
8
+ col: 12
9
+ items:
10
+ - name: main_info
11
+ - component: vs-widget-history
12
+ title: Історія редагування
13
+
@@ -0,0 +1,20 @@
1
+ <div>
2
+ <div class="flex justify-between items-center pb-[5px]">
3
+ <div class="font-semibold text-[16px] dark:text-white">Налаштування</div>
4
+ <div class="flex gap-[5px] items-center">
5
+ {{{button this token=(token table="cms.settings.table" form="cms.settings.form" id=id) edit=1 }}}
6
+ </div>
7
+ </div>
8
+ {{{descriptionList
9
+ this
10
+ comma=";"
11
+ columns="
12
+ Ключ,key,
13
+ Значення,value,
14
+ Користувач; який створив запис, {{select created_by data='user_id'}},
15
+ Дата створення, {{formatDate created_at}},
16
+ Дата оновлення, {{formatDate updated_at}}
17
+ "
18
+ }}}
19
+ </div>
20
+
@@ -0,0 +1,18 @@
1
+ [
2
+ {
3
+ "id": "draft",
4
+ "text": "Чернетка"
5
+ },
6
+ {
7
+ "id": "published",
8
+ "text": "Опубліковано"
9
+ },
10
+ {
11
+ "id": "archived",
12
+ "text": "Архівовано"
13
+ },
14
+ {
15
+ "id": "delayPublished",
16
+ "text": "Затримка публікації"
17
+ }
18
+ ]
@@ -0,0 +1,10 @@
1
+ [
2
+ {
3
+ "id": "regular",
4
+ "text": "Звичайний"
5
+ },
6
+ {
7
+ "id": "admin",
8
+ "text": "Admin"
9
+ }
10
+ ]
@@ -0,0 +1,78 @@
1
+ {
2
+ "schema": {
3
+ "user_name": {
4
+ "type": "Text",
5
+ "rules": [
6
+ "required"
7
+ ],
8
+ "ua": "Ім'я",
9
+ "i": "Вноситься ім'я користувача, що буде відображатися у системі"
10
+ },
11
+ "sur_name": {
12
+ "type": "Text",
13
+ "rules": [
14
+ "required"
15
+ ],
16
+ "ua": "Прізвище",
17
+ "i": "Вноситься прізвище користувача, що буде відображатися у системі"
18
+ },
19
+ "father_name": {
20
+ "ua": "По-батькові",
21
+ "type": "Text"
22
+ },
23
+ "phone": {
24
+ "type": "Text",
25
+ "mask": "+389999999999",
26
+ "ua": "Телефон",
27
+ "i": "Вноситься телефон користувача"
28
+ },
29
+ "email": {
30
+ "type": "Text",
31
+ "ua": "E-mail",
32
+ "i": "Вноситься електронна адреса користувача",
33
+ "rules": [
34
+ "email"
35
+ ]
36
+ },
37
+ "login": {
38
+ "type": "Text",
39
+ "ua": "Логін",
40
+ "i": "Вноситься довільний логін користувача латинськими літерами, що буде використовуватися для входу в систему",
41
+ "rules": [
42
+ "required"
43
+ ]
44
+ },
45
+ "password": {
46
+ "type": "Text",
47
+ "ua": "Пароль",
48
+ "rules": [
49
+ "required",
50
+ {
51
+ "type": "regexp",
52
+ "pattern": "^.{8,}$",
53
+ "message": "Пароль повинен бути більше 8 символів"
54
+ }
55
+ ],
56
+ "i": "Вноситься пароль, що буде використовуватися для входу в систему (рекомендоване використання складних паролів)"
57
+ },
58
+ "avatar": {
59
+ "type": "File",
60
+ "ua": "Аватар",
61
+ "i": "Додається зображення, що буде відображено в системі у якості аватара цього користувача"
62
+ },
63
+ "user_type": {
64
+ "type": "Select",
65
+ "ua": "Тип користувача",
66
+ "i": "Вноситься тип користувача",
67
+ "data": "user_type"
68
+ },
69
+ "enabled": {
70
+ "type": "Switcher",
71
+ "label": "Доступ"
72
+ },
73
+ "twofa": {
74
+ "type": "Switcher",
75
+ "label": "Двофакторна авторизація"
76
+ }
77
+ }
78
+ }
@@ -0,0 +1,79 @@
1
+ {
2
+ "style": {
3
+ "navigation": true
4
+ },
5
+ "schema": {
6
+ "d0": {
7
+ "type": "HTML",
8
+ "title": "Загальна інформація",
9
+ "text": "<h2 class='text-xl font-bold text-left'>Загальна інформація про контент</h2>",
10
+ "col": 12
11
+ },
12
+ "title": {
13
+ "ua": "Назва",
14
+ "col": 12,
15
+ "type": "Text",
16
+ "validators": [
17
+ "required"
18
+ ]
19
+ },
20
+ "slug": {
21
+ "ua": "Slug",
22
+ "col": 12,
23
+ "type": "Text",
24
+ "parent": "title",
25
+ "validators": [
26
+ "required"
27
+ ]
28
+ },
29
+ "content_type_id": {
30
+ "ua": "Тип контенту",
31
+ "col": 6,
32
+ "type": "Autocomplete",
33
+ "data": "collection",
34
+ "validators": [
35
+ "required"
36
+ ]
37
+ },
38
+ "status": {
39
+ "ua": "Статус",
40
+ "col": 6,
41
+ "type": "Select",
42
+ "data": "content.status",
43
+ "validators": [
44
+ "required"
45
+ ]
46
+ },
47
+ "published_at": {
48
+ "ua": "Дата публікації",
49
+ "col": 6,
50
+ "type": "Date",
51
+ "mode": "datetime",
52
+ "validators": [
53
+ "required"
54
+ ]
55
+ },
56
+ "locale": {
57
+ "ua": "Локаль",
58
+ "col": 6,
59
+ "type": "Select",
60
+ "defaultValue": "uk",
61
+ "options": [
62
+ {
63
+ "id": "uk",
64
+ "text": "Українська"
65
+ },
66
+ {
67
+ "id": "en",
68
+ "text": "English"
69
+ }
70
+ ]
71
+ },
72
+ "main_image": {
73
+ "ua": "Головне зображення",
74
+ "col": 12,
75
+ "type": "File"
76
+ }
77
+ }
78
+ }
79
+
@@ -0,0 +1,69 @@
1
+ {
2
+ "style": {
3
+ "navigation": true
4
+ },
5
+ "schema": {
6
+ "d0": {
7
+ "type": "HTML",
8
+ "title": "Загальна інформація",
9
+ "text": "<h2 class='text-xl font-bold text-left'>Загальна інформація про меню</h2>",
10
+ "col": 12
11
+ },
12
+ "name": {
13
+ "ua": "Назва меню",
14
+ "col": 12,
15
+ "type": "Text",
16
+ "validators": [
17
+ "required"
18
+ ],
19
+ "i": "Унікальна назва меню"
20
+ },
21
+ "locale": {
22
+ "ua": "Локаль",
23
+ "col": 6,
24
+ "type": "Select",
25
+ "defaultValue": "uk",
26
+ "options": [
27
+ {
28
+ "id": "uk",
29
+ "text": "Українська"
30
+ },
31
+ {
32
+ "id": "en",
33
+ "text": "English"
34
+ }
35
+ ],
36
+ "validators": [
37
+ "required"
38
+ ]
39
+ },
40
+ "description": {
41
+ "ua": "Опис",
42
+ "col": 12,
43
+ "type": "TextArea",
44
+ "i": "Опис меню для адміністратора"
45
+ },
46
+ "d1": {
47
+ "type": "HTML",
48
+ "title": "Структура меню",
49
+ "text": "<h2 class='text-xl font-bold text-left'>Структура меню</h2>",
50
+ "col": 12
51
+ },
52
+ "content": {
53
+ "ua": "Контент меню (YAML)",
54
+ "col": 12,
55
+ "type": "TextArea",
56
+ "syntax": "yaml",
57
+ "i": "Структура меню у форматі YAML"
58
+ },
59
+ "items": {
60
+ "ua": "Елементи меню (JSON)",
61
+ "col": 12,
62
+ "type": "TextArea",
63
+ "syntax": "json",
64
+ "i": "Структура меню у форматі JSON",
65
+ "hidden": true
66
+ }
67
+ }
68
+ }
69
+
@@ -0,0 +1,32 @@
1
+ {
2
+ "style": {
3
+ "navigation": true
4
+ },
5
+ "schema": {
6
+ "d0": {
7
+ "type": "HTML",
8
+ "title": "Налаштування",
9
+ "text": "<h2 class='text-xl font-bold text-left'>Налаштування системи</h2>",
10
+ "col": 12
11
+ },
12
+ "key": {
13
+ "ua": "Ключ",
14
+ "col": 12,
15
+ "type": "Text",
16
+ "validators": [
17
+ "required"
18
+ ],
19
+ "i": "Унікальний ключ налаштування"
20
+ },
21
+ "value": {
22
+ "ua": "Значення",
23
+ "col": 12,
24
+ "type": "TextArea",
25
+ "validators": [
26
+ "required"
27
+ ],
28
+ "i": "Значення налаштування"
29
+ }
30
+ }
31
+ }
32
+
@@ -0,0 +1,24 @@
1
+ [
2
+ {
3
+ "order": 1,
4
+ "ua": "CMS",
5
+ "menu": [
6
+ {
7
+ "path": "cms.content",
8
+ "table": "cms.content.table",
9
+ "ua": "Контент"
10
+ },
11
+ {
12
+ "path": "cms.menu",
13
+ "table": "cms.menu.table",
14
+ "ua": "Меню"
15
+ },
16
+ {
17
+ "path": "cms.settings",
18
+ "table": "cms.settings.table",
19
+ "ua": "Налаштування"
20
+ }
21
+ ]
22
+ }
23
+ ]
24
+
@@ -0,0 +1,154 @@
1
+ /**
2
+ * CMS Module Router Configuration
3
+ *
4
+ * This file provides router routes for CMS module (content, menu, settings).
5
+ * Uses existing CMS components from the project.
6
+ *
7
+ * Usage in your project:
8
+ * ```js
9
+ * import { cmsRoutes } from './module/cms/router.js';
10
+ * import { createRouter, createWebHistory } from 'vue-router';
11
+ *
12
+ * const router = createRouter({
13
+ * history: createWebHistory(),
14
+ * routes: [
15
+ * ...cmsRoutes,
16
+ * // your other routes
17
+ * ]
18
+ * });
19
+ * ```
20
+ */
21
+
22
+ export const cmsRoutes = [
23
+ // Table routes - display list of items
24
+ {
25
+ path: '/cms.content',
26
+ component: () => import('../../src/pages/collections/ArticlesPage.vue'),
27
+ name: 'cms-content',
28
+ meta: {
29
+ title: 'navigation.collections',
30
+ table: 'cms.content.table'
31
+ }
32
+ },
33
+ {
34
+ path: '/cms.menu',
35
+ component: () => import('../../src/pages/menu/MenuPage.vue'),
36
+ name: 'cms-menu',
37
+ meta: {
38
+ title: 'menu.title',
39
+ table: 'cms.menu.table'
40
+ }
41
+ },
42
+ {
43
+ path: '/cms.settings',
44
+ component: () => import('../../src/pages/settings/Settings.vue'),
45
+ name: 'cms-settings',
46
+ meta: {
47
+ title: 'settings.title',
48
+ table: 'cms.settings.table'
49
+ }
50
+ },
51
+ // Card routes - display detailed view (using contentForm for content)
52
+ {
53
+ path: '/cms.content/:id',
54
+ component: () => import('../../src/pages/collections/contentForm.vue'),
55
+ name: 'cms-content-card',
56
+ meta: {
57
+ title: 'articles.title',
58
+ type: 'articles',
59
+ table: 'cms.content.table',
60
+ card: 'cms.content.table'
61
+ }
62
+ },
63
+ {
64
+ path: '/cms.menu/:id',
65
+ component: () => import('../../src/pages/menu/MenuItemPage.vue'),
66
+ name: 'cms-menu-card',
67
+ meta: {
68
+ title: 'menu.editMenu',
69
+ type: 'single',
70
+ table: 'cms.menu.table',
71
+ card: 'cms.menu.table'
72
+ }
73
+ },
74
+ {
75
+ path: '/cms.settings/:id',
76
+ component: () => import('../../src/pages/settings/general.vue'),
77
+ name: 'cms-settings-card',
78
+ meta: {
79
+ title: 'settings.general.general',
80
+ table: 'cms.settings.table',
81
+ card: 'cms.settings.table'
82
+ }
83
+ },
84
+ // Add routes - create new item
85
+ {
86
+ path: '/cms.content/add',
87
+ component: () => import('../../src/pages/collections/contentForm.vue'),
88
+ name: 'cms-content-add',
89
+ meta: {
90
+ title: 'articles.createArticle',
91
+ type: 'articles',
92
+ table: 'cms.content.table',
93
+ form: 'cms.content.form'
94
+ }
95
+ },
96
+ {
97
+ path: '/cms.menu/add',
98
+ component: () => import('../../src/pages/menu/MenuAddPage.vue'),
99
+ name: 'cms-menu-add',
100
+ meta: {
101
+ title: 'menu.menuAdd',
102
+ type: 'single',
103
+ table: 'cms.menu.table',
104
+ form: 'cms.menu.form'
105
+ }
106
+ },
107
+ {
108
+ path: '/cms.settings/add',
109
+ component: () => import('../../src/pages/settings/general.vue'),
110
+ name: 'cms-settings-add',
111
+ meta: {
112
+ title: 'settings.general.general',
113
+ table: 'cms.settings.table',
114
+ form: 'cms.settings.form'
115
+ }
116
+ },
117
+ // Edit routes - edit existing item
118
+ {
119
+ path: '/cms.content/edit/:id',
120
+ component: () => import('../../src/pages/collections/contentForm.vue'),
121
+ name: 'cms-content-edit',
122
+ meta: {
123
+ title: 'articles.title',
124
+ type: 'articles',
125
+ table: 'cms.content.table',
126
+ form: 'cms.content.form'
127
+ }
128
+ },
129
+ {
130
+ path: '/cms.menu/edit/:id',
131
+ component: () => import('../../src/pages/menu/MenuItemPage.vue'),
132
+ name: 'cms-menu-edit',
133
+ meta: {
134
+ title: 'menu.editMenu',
135
+ type: 'single',
136
+ table: 'cms.menu.table',
137
+ form: 'cms.menu.form'
138
+ }
139
+ },
140
+ {
141
+ path: '/cms.settings/edit/:id',
142
+ component: () => import('../../src/pages/settings/general.vue'),
143
+ name: 'cms-settings-edit',
144
+ meta: {
145
+ title: 'settings.general.general',
146
+ table: 'cms.settings.table',
147
+ form: 'cms.settings.form'
148
+ }
149
+ },
150
+ ];
151
+
152
+ // Export default for direct router creation (optional)
153
+ export default cmsRoutes;
154
+
@@ -0,0 +1,2 @@
1
+ select content_type_id, name || ' (' || title || ')' from site.content_types
2
+ WHERE type = 'single'
@@ -0,0 +1 @@
1
+ SELECT content_type_id, name FROM site.content_types where type='collection'
@@ -0,0 +1,17 @@
1
+ SELECT DISTINCT locale as id,
2
+ CASE
3
+ WHEN locale = 'uk' THEN 'Українська'
4
+ WHEN locale = 'en' THEN 'English'
5
+ ELSE locale
6
+ END as text
7
+ FROM site.contents
8
+ UNION
9
+ SELECT DISTINCT locale as id,
10
+ CASE
11
+ WHEN locale = 'uk' THEN 'Українська'
12
+ WHEN locale = 'en' THEN 'English'
13
+ ELSE locale
14
+ END as text
15
+ FROM site.menus
16
+ ORDER BY id
17
+
@@ -0,0 +1,12 @@
1
+ select a.id, a.title, tags from data.news a
2
+ left join lateral(select array_agg(tag_id) as tags from site.tag_data b where a.id=b.data_id)b on 1=1
3
+
4
+ where
5
+ case when '{{parent}}'<> ''
6
+ then '{{parent}}'=any(b.tags)
7
+ else true
8
+ end
9
+
10
+ and status='published'
11
+
12
+ order by a.updated_at
@@ -0,0 +1 @@
1
+ select tag_id, value from site.tags order by value
@@ -0,0 +1,54 @@
1
+ {
2
+ "ua": "Користувачі",
3
+ "key": "uid",
4
+ "order": "cdate desc",
5
+ "access": "admin",
6
+ "sqlColumns": "*",
7
+ "form": "admin.users.form",
8
+ "table": "admin.users",
9
+ "sql": [
10
+ {
11
+ "name": "social_auth_sql",
12
+ "sql": "select social_auth_obj,social_auth_date from admin.users_social_auth where uid=t.uid limit 1"
13
+ },
14
+ {
15
+ "sql": "SELECT coalesce(sur_name, '') || ' ' || coalesce(user_name, '') || ' ' || coalesce(father_name, '') as full_name FROM admin.users WHERE uid = t.uid",
16
+ "name": "full_name_sql"
17
+ }
18
+ ],
19
+ "columns": [
20
+ {
21
+ "ua": "ПІБ",
22
+ "name": "full_name",
23
+ "format": "select",
24
+ "data": "full_name_sql"
25
+ },
26
+ {
27
+ "ua": "Тип користувача",
28
+ "name": "user_type_text",
29
+ "format": "select",
30
+ "data": "user_type_text"
31
+ },
32
+ {
33
+ "ua": "Статус доступу",
34
+ "name": "enabled"
35
+ }
36
+ ],
37
+ "filters": [
38
+ {
39
+ "label": "Тип користувача",
40
+ "type": "Check",
41
+ "name": "user_type",
42
+ "data": "user_type"
43
+ }
44
+ ],
45
+ "meta": {
46
+ "title": "full_name",
47
+ "search": "user_name,user_rnokpp"
48
+ },
49
+ "actions": [
50
+ "edit",
51
+ "del",
52
+ "add"
53
+ ]
54
+ }
@@ -0,0 +1,106 @@
1
+ {
2
+ "key": "content_id",
3
+ "table": "site.contents",
4
+ "public": true,
5
+ "actions": [
6
+ "add",
7
+ "edit",
8
+ "del"
9
+ ],
10
+ "controls": [
11
+ "search",
12
+ "list",
13
+ "add"
14
+ ],
15
+ "access": "user",
16
+ "order": "published_at desc, created_at desc",
17
+ "meta": {
18
+ "title": "title",
19
+ "search": "title,slug"
20
+ },
21
+ "title": "Контент",
22
+ "form": "cms.content.form",
23
+ "sqlColumns": "*",
24
+ "columns": [
25
+ {
26
+ "ua": "Назва",
27
+ "meta": "title",
28
+ "name": "title",
29
+ "format": "slot",
30
+ "slot": "<div><p>{{data?.title}}</p><p class='text-xs text-gray-500'>{{data?.slug}}</p></div>",
31
+ "link": "/collections/{content_type_id}/{content_id}"
32
+ "width": 400
33
+ },
34
+ {
35
+ "ua": "Тип контенту",
36
+ "name": "content_type_id",
37
+ "data": "collection",
38
+ "format": "badge",
39
+ "width": 200
40
+ },
41
+ {
42
+ "ua": "Статус",
43
+ "name": "status",
44
+ "data": "content.status",
45
+ "format": "badge",
46
+ "edit": true,
47
+ "width": 150
48
+ },
49
+ {
50
+ "ua": "Дата публікації",
51
+ "name": "published_at",
52
+ "format": "datetime",
53
+ "width": 180
54
+ },
55
+ {
56
+ "ua": "Створено",
57
+ "name": "created_at",
58
+ "format": "datetime",
59
+ "width": 180
60
+ },
61
+ {
62
+ "ua": "Оновлено",
63
+ "name": "updated_at",
64
+ "format": "datetime",
65
+ "width": 180,
66
+ "hidden": true
67
+ },
68
+ {
69
+ "ua": "Slug",
70
+ "name": "slug",
71
+ "format": "text",
72
+ "width": 250,
73
+ "hidden": true
74
+ }
75
+ ],
76
+ "filterList": [
77
+ {
78
+ "ua": "Пошук",
79
+ "name": "search",
80
+ "type": "Text"
81
+ },
82
+ {
83
+ "ua": "Тип контенту",
84
+ "type": "Check",
85
+ "name": "content_type_id",
86
+ "data": "collection"
87
+ },
88
+ {
89
+ "ua": "Статус",
90
+ "name": "status",
91
+ "data": "content.status",
92
+ "type": "Check"
93
+ },
94
+ {
95
+ "ua": "Дата публікації",
96
+ "name": "published_at",
97
+ "type": "Date"
98
+ },
99
+ {
100
+ "ua": "Дата створення",
101
+ "name": "created_at",
102
+ "type": "Date"
103
+ }
104
+ ]
105
+ }
106
+
@@ -0,0 +1,73 @@
1
+ {
2
+ "key": "menu_id",
3
+ "table": "site.menus",
4
+ "public": true,
5
+ "actions": [
6
+ "add",
7
+ "edit",
8
+ "del"
9
+ ],
10
+ "controls": [
11
+ "search",
12
+ "list",
13
+ "add"
14
+ ],
15
+ "access": "user",
16
+ "order": "created_at desc",
17
+ "meta": {
18
+ "title": "name",
19
+ "search": "name,description"
20
+ },
21
+ "title": "Меню",
22
+ "form": "cms.menu.form",
23
+ "sqlColumns": "*",
24
+ "columns": [
25
+ {
26
+ "ua": "Назва",
27
+ "meta": "title",
28
+ "name": "name",
29
+ "format": "slot",
30
+ "slot": "<div><p>{{data?.name}}</p><p class='text-xs text-gray-500'>{{data?.description}}</p></div>",
31
+ "link": "/menu/{menu_id}",
32
+ "width": 300
33
+ },
34
+ {
35
+ "ua": "Локаль",
36
+ "name": "locale",
37
+ "format": "badge",
38
+ "width": 100
39
+ },
40
+ {
41
+ "ua": "Опис",
42
+ "name": "description",
43
+ "format": "text",
44
+ "width": 300,
45
+ "hidden": true
46
+ },
47
+ {
48
+ "ua": "Створено",
49
+ "name": "created_at",
50
+ "format": "datetime",
51
+ "width": 180
52
+ },
53
+ {
54
+ "ua": "Оновлено",
55
+ "name": "updated_at",
56
+ "format": "datetime",
57
+ "width": 180
58
+ }
59
+ ],
60
+ "filterList": [
61
+ {
62
+ "ua": "Пошук",
63
+ "name": "search",
64
+ "type": "Text"
65
+ },
66
+ {
67
+ "ua": "Локаль",
68
+ "name": "locale",
69
+ "type": "Check"
70
+ }
71
+ ]
72
+ }
73
+
@@ -0,0 +1,57 @@
1
+ {
2
+ "key": "id",
3
+ "table": "site.settings",
4
+ "public": false,
5
+ "actions": [
6
+ "edit"
7
+ ],
8
+ "controls": [
9
+ "search",
10
+ "list"
11
+ ],
12
+ "access": "admin",
13
+ "order": "key asc",
14
+ "meta": {
15
+ "title": "key",
16
+ "search": "key,value"
17
+ },
18
+ "title": "Налаштування",
19
+ "form": "cms.settings.form",
20
+ "sqlColumns": "*",
21
+ "columns": [
22
+ {
23
+ "ua": "Ключ",
24
+ "meta": "title",
25
+ "name": "key",
26
+ "format": "text",
27
+ "width": 250
28
+ },
29
+ {
30
+ "ua": "Значення",
31
+ "name": "value",
32
+ "format": "text",
33
+ "width": 400
34
+ },
35
+ {
36
+ "ua": "Створено",
37
+ "name": "created_at",
38
+ "format": "datetime",
39
+ "width": 180,
40
+ "hidden": true
41
+ },
42
+ {
43
+ "ua": "Оновлено",
44
+ "name": "updated_at",
45
+ "format": "datetime",
46
+ "width": 180
47
+ }
48
+ ],
49
+ "filterList": [
50
+ {
51
+ "ua": "Пошук",
52
+ "name": "search",
53
+ "type": "Text"
54
+ }
55
+ ]
56
+ }
57
+
@@ -0,0 +1,102 @@
1
+ {
2
+ "table": "site.contents",
3
+ "columns": [
4
+ {
5
+ "label": "Slug",
6
+ "name": "slug",
7
+ "parent": "title",
8
+ "required": true,
9
+ "type": "slug"
10
+ },
11
+ {
12
+ "label": "Title",
13
+ "name": "title",
14
+ "required": true,
15
+ "type": "text",
16
+ "localization": true
17
+ },
18
+ {
19
+ "label": "Status",
20
+ "name": "status",
21
+ "type": "select",
22
+ "data": "content.status",
23
+ "options": [
24
+ {
25
+ "id": "draft",
26
+ "text": "Draft"
27
+ },
28
+ {
29
+ "id": "published",
30
+ "text": "Published"
31
+ },
32
+ {
33
+ "id": "archived",
34
+ "text": "Archived"
35
+ },
36
+ {
37
+ "id": "delayPublished",
38
+ "text": "Delay Published"
39
+ }
40
+ ],
41
+ "required": true
42
+ },
43
+ {
44
+ "label": "Publish at",
45
+ "name": "published_at",
46
+ "required": true,
47
+ "type": "datetime"
48
+ },
49
+ {
50
+ "label": "Зображення",
51
+ "name": "main_image",
52
+ "type": "mediaselect"
53
+ }
54
+ ],
55
+ "filters": [
56
+ {
57
+ "extra": false,
58
+ "id": "status",
59
+ "name": "status",
60
+ "title": "Статус",
61
+ "type": "Check",
62
+ "data": "content.status",
63
+ "ua": "Статус"
64
+ },
65
+ {
66
+ "extra": false,
67
+ "label": "Publish at",
68
+ "name": "published_at",
69
+ "type": "Date"
70
+ },
71
+ {
72
+ "extra": false,
73
+ "label": "Закріплені",
74
+ "name": "is_pin",
75
+ "type": "Check"
76
+ },
77
+ {
78
+ "extra": false,
79
+ "name": "tag_list",
80
+ "type": "Tags",
81
+ "sql": "id in (select b.data_id from site.tags a left join site.tag_data b on a.tag_id=b.tag_id where a.tag_id=any($1))",
82
+ "label": "Теги"
83
+ },
84
+ {
85
+ "extra": false,
86
+ "columns": "slug,title",
87
+ "id": "search",
88
+ "name": "search",
89
+ "placeholder": "Пошук по тексту",
90
+ "title": "Пошук по тексту",
91
+ "type": "Text"
92
+ },
93
+ {
94
+ "extra": false,
95
+ "id": "created_at",
96
+ "name": "created_at",
97
+ "title": "Дата створення",
98
+ "type": "Date",
99
+ "ua": "Дата створення"
100
+ }
101
+ ]
102
+ }
@@ -0,0 +1,115 @@
1
+ {
2
+ "table": "site.contents",
3
+ "columns": [
4
+ {
5
+ "label": "Slug",
6
+ "name": "slug",
7
+ "parent": "title",
8
+ "required": true,
9
+ "type": "slug"
10
+ },
11
+ {
12
+ "label": "Title",
13
+ "name": "title",
14
+ "required": true,
15
+ "type": "text",
16
+ "localization": true
17
+ },
18
+ {
19
+ "label": "Status",
20
+ "name": "status",
21
+ "type": "select",
22
+ "data": "content.status",
23
+ "options": [
24
+ {
25
+ "id": "draft",
26
+ "text": "Draft"
27
+ },
28
+ {
29
+ "id": "published",
30
+ "text": "Published"
31
+ },
32
+ {
33
+ "id": "archived",
34
+ "text": "Archived"
35
+ },
36
+ {
37
+ "id": "delayPublished",
38
+ "text": "Delay Published"
39
+ }
40
+ ],
41
+ "required": true
42
+ },
43
+ {
44
+ "label": "Publish at",
45
+ "name": "published_at",
46
+ "required": true,
47
+ "type": "datetime"
48
+ },
49
+ {
50
+ "label": "Контент",
51
+ "name": "single_body",
52
+ "type": "richtext",
53
+ "localization": true
54
+ },
55
+ {
56
+ "name": "single_sections",
57
+ "label": "Секції",
58
+ "type": "reference",
59
+ "localization": true
60
+ },
61
+ {
62
+ "label": "Зображення",
63
+ "name": "main_image",
64
+ "type": "mediaselect"
65
+ }
66
+ ],
67
+ "filters": [
68
+ {
69
+ "extra": false,
70
+ "id": "status",
71
+ "name": "status",
72
+ "title": "Статус",
73
+ "type": "Check",
74
+ "data": "content.status",
75
+ "ua": "Статус"
76
+ },
77
+ {
78
+ "extra": false,
79
+ "label": "Publish at",
80
+ "name": "published_at",
81
+ "type": "Date"
82
+ },
83
+ {
84
+ "extra": false,
85
+ "label": "Контент",
86
+ "name": "single_body",
87
+ "sql": "content_id in (select object_id from site.content_data where field_key='single_body' and field_value ~ $1)",
88
+ "type": "Text"
89
+ },
90
+ {
91
+ "extra": false,
92
+ "name": "tag_list",
93
+ "type": "Tags",
94
+ "sql": "content_id in (select b.data_id from site.tags a left join site.tag_data b on a.tag_id=b.tag_id where a.tag_id=any($1))",
95
+ "label": "Теги"
96
+ },
97
+ {
98
+ "extra": false,
99
+ "columns": "slug,title",
100
+ "id": "search",
101
+ "name": "search",
102
+ "placeholder": "Пошук по тексту",
103
+ "title": "Пошук по тексту",
104
+ "type": "Text"
105
+ },
106
+ {
107
+ "extra": false,
108
+ "id": "created_at",
109
+ "name": "created_at",
110
+ "title": "Дата створення",
111
+ "type": "Date",
112
+ "ua": "Дата створення"
113
+ }
114
+ ]
115
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengis/cms",
3
- "version": "0.0.17",
3
+ "version": "0.0.18",
4
4
  "description": "cms",
5
5
  "type": "module",
6
6
  "author": "Softpro",
@@ -9,6 +9,7 @@
9
9
  "license": "EULA",
10
10
  "files": [
11
11
  "dist/*",
12
+ "module/*",
12
13
  "src/index.ts",
13
14
  "server",
14
15
  "plugin.js"