@tager/admin-banners 0.1.5 → 0.3.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 (80) hide show
  1. package/CHANGELOG.md +13 -13
  2. package/dist/constants/menu.d.ts +4 -1
  3. package/dist/constants/paths.d.ts +8 -15
  4. package/dist/constants/routes.d.ts +3 -4
  5. package/dist/hooks/index.d.ts +2 -0
  6. package/dist/hooks/useFetchBanner.d.ts +8 -0
  7. package/dist/hooks/useFetchBanners.d.ts +6 -0
  8. package/dist/hooks/useFetchZones.d.ts +6 -0
  9. package/dist/index.esm.js +3200 -875
  10. package/dist/index.umd.js +3213 -886
  11. package/dist/locales/en.d.ts +39 -0
  12. package/dist/locales/ru.d.ts +3 -0
  13. package/dist/{index.d.ts → main.d.ts} +1 -0
  14. package/dist/router/index.d.ts +4 -0
  15. package/dist/services/requests.d.ts +19 -35
  16. package/dist/typings/banners.d.ts +40 -0
  17. package/dist/typings/common.d.ts +1 -0
  18. package/dist/typings/model.d.ts +103 -15
  19. package/dist/typings/zones.d.ts +5 -0
  20. package/dist/utils/common.d.ts +2 -0
  21. package/dist/views/Banners/BannerForm/BannerForm.helpers.d.ts +5 -0
  22. package/dist/views/Banners/BannerForm/BannerForm.vue.d.ts +81 -0
  23. package/dist/views/Banners/BannerForm/index.d.ts +1 -0
  24. package/dist/views/Banners/BannerList/BannerList.helpers.d.ts +5 -0
  25. package/dist/views/Banners/BannerList/BannerList.vue.d.ts +55 -0
  26. package/dist/views/Banners/BannerList/hooks/index.d.ts +1 -0
  27. package/dist/views/Banners/BannerList/hooks/useAdvancedSearch.d.ts +21 -0
  28. package/dist/views/Banners/BannerList/index.d.ts +1 -0
  29. package/dist/views/Zones/ZoneList/ZoneList.helpers.d.ts +5 -0
  30. package/dist/views/Zones/ZoneList/ZoneList.vue.d.ts +28 -0
  31. package/dist/views/Zones/ZoneList/index.d.ts +1 -0
  32. package/package.json +76 -67
  33. package/src/config/config.json +19 -19
  34. package/src/constants/menu.ts +26 -12
  35. package/src/constants/paths.ts +19 -36
  36. package/src/constants/routes.ts +44 -66
  37. package/src/dev.ts +22 -34
  38. package/src/hooks/index.ts +2 -0
  39. package/src/hooks/useFetchBanner.ts +41 -0
  40. package/src/hooks/useFetchBanners.ts +23 -0
  41. package/src/hooks/useFetchZones.ts +23 -0
  42. package/src/locales/en.ts +43 -0
  43. package/src/locales/ru.ts +45 -0
  44. package/src/main.ts +12 -0
  45. package/src/router/index.ts +38 -0
  46. package/src/services/requests.ts +52 -107
  47. package/src/typings/banners.ts +44 -0
  48. package/src/typings/common.ts +1 -0
  49. package/src/typings/model.ts +121 -18
  50. package/src/typings/sfc.d.ts +12 -12
  51. package/src/typings/shims-tsx.d.ts +13 -13
  52. package/src/typings/shims-vue.d.ts +11 -10
  53. package/src/typings/translate.d.ts +10 -0
  54. package/src/typings/zones.ts +5 -0
  55. package/src/utils/common.ts +13 -0
  56. package/src/views/App.vue +22 -22
  57. package/src/views/Banners/BannerForm/BannerForm.helpers.ts +38 -0
  58. package/src/views/Banners/BannerForm/BannerForm.vue +236 -0
  59. package/src/views/Banners/BannerForm/index.ts +1 -0
  60. package/src/views/Banners/BannerList/BannerList.helpers.ts +93 -0
  61. package/src/views/Banners/BannerList/BannerList.vue +233 -0
  62. package/src/views/Banners/BannerList/hooks/index.ts +1 -0
  63. package/src/views/Banners/BannerList/hooks/useAdvancedSearch.ts +152 -0
  64. package/src/views/Banners/BannerList/index.ts +1 -0
  65. package/src/views/Home.vue +37 -0
  66. package/src/views/Zones/ZoneList/ZoneList.helpers.ts +34 -0
  67. package/src/views/Zones/ZoneList/ZoneList.vue +75 -0
  68. package/src/views/Zones/ZoneList/index.ts +1 -0
  69. package/dist/views/BannerAreaForm.vue.d.ts +0 -22
  70. package/dist/views/BannerAreaList.vue.d.ts +0 -17
  71. package/dist/views/BannerItemForm.vue.d.ts +0 -27
  72. package/dist/views/BannerItemList.vue.d.ts +0 -22
  73. package/src/index.ts +0 -3
  74. package/src/locales/en.js +0 -3
  75. package/src/locales/ru.js +0 -3
  76. package/src/views/BannerAreaForm.vue +0 -173
  77. package/src/views/BannerAreaList.vue +0 -176
  78. package/src/views/BannerItemForm.vue +0 -230
  79. package/src/views/BannerItemList.vue +0 -221
  80. package/typings/index.d.ts +0 -15
@@ -1,176 +0,0 @@
1
- <template>
2
- <page
3
- title="Banner Areas"
4
- :header-buttons="[
5
- { text: 'New banner area', href: getBannerAreaUrl('create') },
6
- ]"
7
- >
8
- <template v-slot:content>
9
- <base-table
10
- :column-defs="columnDefs"
11
- :row-data="rowData"
12
- :loading="isRowDataLoading"
13
- :error-message="errorMessage"
14
- >
15
- <template v-slot:cell(link-to-banner-items)="{ row }">
16
- <base-button
17
- :href="getLinkToBannerItems(row.alias)"
18
- variant="outline-secondary"
19
- >
20
- Banner Items
21
- </base-button>
22
- </template>
23
-
24
- <template v-slot:cell(actions)="{ row }">
25
- <base-button
26
- variant="icon"
27
- title="Edit"
28
- :disabled="deletingBannerAreaIdList.includes(row.id)"
29
- :href="getBannerAreaUrl(row.id)"
30
- >
31
- <svg-icon name="edit"></svg-icon>
32
- </base-button>
33
- <base-button
34
- variant="icon"
35
- title="Remove"
36
- :disabled="deletingBannerAreaIdList.includes(row.id)"
37
- @click="handleBannerAreaDelete(row)"
38
- >
39
- <svg-icon name="delete"></svg-icon>
40
- </base-button>
41
- </template>
42
- </base-table>
43
- </template>
44
- </page>
45
- </template>
46
-
47
- <script lang="ts">
48
- import Vue from 'vue';
49
- import { ColumnDefinition } from '@tager/admin-ui';
50
- import { getMessageFromError, Nullable } from '@tager/admin-services';
51
-
52
- import { BannerArea } from '../typings/model';
53
- import { deleteBannerArea, getBannerAreaList } from '../services/requests';
54
- import { getBannerAreaFormUrl, getBannerItemListUrl } from '../constants/paths';
55
-
56
- const COLUMN_DEFS: Array<ColumnDefinition<BannerArea>> = [
57
- {
58
- id: 1,
59
- name: 'ID',
60
- field: 'id',
61
- style: { width: '50px', textAlign: 'center' },
62
- headStyle: { width: '50px', textAlign: 'center' },
63
- },
64
- { id: 2, name: 'Alias', field: 'alias' },
65
- { id: 3, name: 'Label', field: 'label' },
66
- { id: 4, name: 'Scenario', field: 'scenario' },
67
- {
68
- id: 6,
69
- name: 'Banner Items',
70
- field: 'linkToBannerItems',
71
- style: { whiteSpace: 'nowrap', width: '120px', textAlign: 'center' },
72
- headStyle: { whiteSpace: 'nowrap', width: '120px', textAlign: 'center' },
73
- },
74
- {
75
- id: 8,
76
- name: 'Actions',
77
- field: 'actions',
78
- style: { whiteSpace: 'nowrap', width: '110px', textAlign: 'center' },
79
- headStyle: { whiteSpace: 'nowrap', width: '110px', textAlign: 'center' },
80
- },
81
- ];
82
-
83
- export default Vue.extend({
84
- name: 'BannerAreaList',
85
- data(): {
86
- columnDefs: Array<ColumnDefinition<BannerArea>>;
87
- rowData: Array<BannerArea>;
88
- deletingBannerAreaIdList: Array<number>;
89
- isRowDataLoading: boolean;
90
- errorMessage: Nullable<string>;
91
- } {
92
- return {
93
- columnDefs: COLUMN_DEFS,
94
- rowData: [],
95
- deletingBannerAreaIdList: [],
96
- isRowDataLoading: false,
97
- errorMessage: null,
98
- };
99
- },
100
- mounted(): void {
101
- this.refreshBannerAreaList();
102
- },
103
- methods: {
104
- getBannerAreaUrl(areaId: number | string): string {
105
- return getBannerAreaFormUrl({ areaId });
106
- },
107
- refreshBannerAreaList(): Promise<void> {
108
- this.isRowDataLoading = true;
109
-
110
- return getBannerAreaList()
111
- .then((response) => {
112
- this.rowData = response.data;
113
- this.errorMessage = null;
114
- })
115
- .catch((error) => {
116
- console.error(error);
117
- this.rowData = [];
118
- this.errorMessage = getMessageFromError(error);
119
- })
120
- .finally(() => {
121
- this.isRowDataLoading = false;
122
- });
123
- },
124
- handleBannerAreaDelete(bannerArea: BannerArea) {
125
- const shouldDeleteBannerArea = confirm(
126
- `Are you sure you want to delete banner area "${bannerArea.label}"`
127
- );
128
-
129
- if (!shouldDeleteBannerArea) return;
130
-
131
- this.deletingBannerAreaIdList.push(bannerArea.id);
132
-
133
- deleteBannerArea(bannerArea.id)
134
- .then((response) => {
135
- if (response.success) {
136
- this.refreshBannerAreaList().then(() => {
137
- this.deletingBannerAreaIdList.filter(
138
- (id) => id !== bannerArea.id
139
- );
140
- });
141
- this.$toast({
142
- variant: 'success',
143
- title: 'Success',
144
- body: 'Banner area was successfully removed',
145
- });
146
- } else {
147
- this.$toast({
148
- variant: 'danger',
149
- title: 'Error',
150
- body: 'Banner area deletion was failed',
151
- });
152
- }
153
- })
154
- .catch((error) => {
155
- console.error(error);
156
- this.$toast({
157
- variant: 'danger',
158
- title: 'Error',
159
- body: 'Banner area deletion was failed',
160
- });
161
- });
162
- },
163
- getLinkToBannerItems(areaAlias: string) {
164
- return getBannerItemListUrl({ areaAlias });
165
- },
166
- },
167
- });
168
- </script>
169
-
170
- <style scoped lang="scss">
171
- .actions-cell {
172
- button:not(:last-child) {
173
- margin-right: 0.5rem;
174
- }
175
- }
176
- </style>
@@ -1,230 +0,0 @@
1
- <template>
2
- <page
3
- :title="isCreation ? 'Create Banner Item' : 'Update Banner Item'"
4
- :is-content-loading="isContentLoading"
5
- :footer="{ onSubmit: submitForm, backHref: bannerItemListUrl }"
6
- >
7
- <template v-slot:content>
8
- <form novalidate @submit.prevent>
9
- <form-field
10
- v-model="values.title"
11
- name="title"
12
- label="Title"
13
- :error="errors.title"
14
- />
15
-
16
- <form-field-rich-text-input
17
- v-model="values.text"
18
- name="text"
19
- label="Text"
20
- :error="errors.text"
21
- />
22
-
23
- <form-field-file-input
24
- v-model="values.image"
25
- label="Image"
26
- name="image"
27
- file-type="image"
28
- />
29
-
30
- <form-field
31
- v-model="values.buttonLabel"
32
- name="buttonLabel"
33
- label="Button: Label"
34
- :error="errors.buttonLabel"
35
- />
36
-
37
- <form-field
38
- v-model="values.buttonLink"
39
- name="buttonLink"
40
- label="Button: Link"
41
- :error="errors.buttonLink"
42
- />
43
-
44
- <form-field-checkbox
45
- v-model="values.buttonIsNewTab"
46
- name="buttonIsNewTab"
47
- label="Button: Is new tab?"
48
- :error="errors.buttonIsNewTab"
49
- />
50
- </form>
51
- </template>
52
- </page>
53
- </template>
54
-
55
- <script lang="ts">
56
- import Vue from 'vue';
57
- import {
58
- convertRequestErrorToMap,
59
- FileType,
60
- Nullable,
61
- } from '@tager/admin-services';
62
-
63
- import {
64
- BannerItemCreatePayload,
65
- createBannerItem,
66
- getBannerAreaByAlias,
67
- getBannerItemById,
68
- updateBannerItem,
69
- } from '../services/requests';
70
- import { BannerArea, BannerItem } from '../typings/model';
71
- import { getBannerItemListUrl } from '../constants/paths';
72
-
73
- type FormValues = {
74
- title: string;
75
- text: string;
76
- buttonLink: string;
77
- buttonLabel: string;
78
- buttonIsNewTab: boolean;
79
- image: Nullable<FileType>;
80
- };
81
-
82
- const INITIAL_VALUES: FormValues = {
83
- title: '',
84
- text: '',
85
- buttonLink: '',
86
- buttonLabel: '',
87
- buttonIsNewTab: false,
88
- image: null,
89
- };
90
-
91
- export default Vue.extend({
92
- name: 'BannerItemForm',
93
- data(): {
94
- values: FormValues;
95
- errors: Record<string, string>;
96
- isContentLoading: boolean;
97
- bannerArea: Nullable<BannerArea>;
98
- } {
99
- return {
100
- values: { ...INITIAL_VALUES },
101
- errors: {},
102
- isContentLoading: false,
103
- bannerArea: null,
104
- };
105
- },
106
- computed: {
107
- itemId(): string {
108
- return this.$route.params.itemId;
109
- },
110
- areaAlias(): string {
111
- return this.$route.params.areaAlias;
112
- },
113
- isCreation(): boolean {
114
- return this.itemId === 'create';
115
- },
116
- bannerItemListUrl(): string {
117
- return getBannerItemListUrl({
118
- areaAlias: this.bannerArea?.alias ?? 'unknown',
119
- });
120
- },
121
- },
122
- watch: {
123
- itemId() {
124
- this.updateValues();
125
- },
126
- areaAlias() {
127
- this.updateValues();
128
- },
129
- },
130
- mounted(): void {
131
- this.updateValues();
132
- },
133
- methods: {
134
- updateValues(): void {
135
- this.isContentLoading = true;
136
-
137
- Promise.all([
138
- getBannerAreaByAlias(this.areaAlias)
139
- .then((response) => {
140
- this.bannerArea = response.data;
141
- })
142
- .catch(console.error),
143
- this.isCreation
144
- ? new Promise((resolve) => {
145
- this.values = { ...INITIAL_VALUES };
146
- resolve();
147
- })
148
- : getBannerItemById(this.itemId)
149
- .then((response) => {
150
- this.values = this.convertReviewToInitialValues(response.data);
151
- })
152
- .catch(console.error),
153
- ]).finally(() => {
154
- this.isContentLoading = false;
155
- });
156
- },
157
- convertReviewToInitialValues(bannerItem: BannerItem): FormValues {
158
- return {
159
- title: bannerItem.title,
160
- text: bannerItem.text,
161
- buttonLink: bannerItem.buttonLink ?? '',
162
- buttonLabel: bannerItem.buttonLabel,
163
- buttonIsNewTab: bannerItem.buttonIsNewTab,
164
- image: bannerItem.image,
165
- };
166
- },
167
- submitForm() {
168
- const creationBody: BannerItemCreatePayload = {
169
- title: this.values.title,
170
- text: this.values.text,
171
- buttonLink: this.values.buttonLink.trim() || null,
172
- buttonLabel: this.values.buttonLabel,
173
- buttonIsNewTab: this.values.buttonIsNewTab,
174
- image: this.values.image?.id ?? null,
175
- };
176
-
177
- const requestPromise = this.isCreation
178
- ? createBannerItem(this.bannerArea?.id ?? 'unknown', creationBody)
179
- : updateBannerItem(this.itemId, creationBody);
180
-
181
- requestPromise
182
- .then(() => {
183
- this.errors = {};
184
- this.$router.push(this.bannerItemListUrl);
185
-
186
- this.$toast({
187
- variant: 'success',
188
- title: 'Success',
189
- body: `Banner item has been successfully ${
190
- this.isCreation ? 'created' : 'updated'
191
- }`,
192
- });
193
- })
194
- .catch((error) => {
195
- console.error(error);
196
- this.errors = convertRequestErrorToMap(error);
197
- this.$toast({
198
- variant: 'danger',
199
- title: 'Error',
200
- body: `Banner item ${
201
- this.isCreation ? 'creation' : 'update'
202
- } has been failed`,
203
- });
204
- });
205
- },
206
- },
207
- });
208
- </script>
209
-
210
- <style scoped lang="scss">
211
- .bottom {
212
- display: flex;
213
- justify-content: space-between;
214
- align-items: center;
215
- }
216
-
217
- .save-button {
218
- min-width: 100px;
219
- }
220
-
221
- .alias-field-inner {
222
- display: flex;
223
- align-items: center;
224
-
225
- span {
226
- font-size: 0.9em;
227
- margin-right: 10px;
228
- }
229
- }
230
- </style>
@@ -1,221 +0,0 @@
1
- <template>
2
- <page
3
- :title="pageTitle"
4
- :header-buttons="[
5
- { text: 'New Banner Item', href: getLinkToBannerItemForm('create') },
6
- ]"
7
- >
8
- <template v-slot:content>
9
- <base-table
10
- :column-defs="columnDefs"
11
- :row-data="rowData"
12
- :loading="isRowDataLoading"
13
- :error-message="errorMessage"
14
- enumerable
15
- >
16
- <template v-slot:cell(actions)="{ row, rowIndex }">
17
- <base-button
18
- variant="icon"
19
- title="Edit"
20
- :disabled="deletingBannerItemIdList.includes(row.id)"
21
- :href="getLinkToBannerItemForm(row.id)"
22
- >
23
- <svg-icon name="edit"></svg-icon>
24
- </base-button>
25
-
26
- <base-button
27
- variant="icon"
28
- title="Move up"
29
- :disabled="rowIndex === 0 || isBannerItemMoving"
30
- @click="moveBannerItem(row.id, 'up')"
31
- >
32
- <svg-icon name="north"></svg-icon>
33
- </base-button>
34
-
35
- <base-button
36
- variant="icon"
37
- title="Move down"
38
- :disabled="rowIndex === rowData.length - 1 || isBannerItemMoving"
39
- @click="moveBannerItem(row.id, 'down')"
40
- >
41
- <svg-icon name="south"></svg-icon>
42
- </base-button>
43
-
44
- <base-button
45
- variant="icon"
46
- title="Remove"
47
- :disabled="deletingBannerItemIdList.includes(row.id)"
48
- @click="handleBannerItemDelete(row)"
49
- >
50
- <svg-icon name="delete"></svg-icon>
51
- </base-button>
52
- </template>
53
- </base-table>
54
- </template>
55
- </page>
56
- </template>
57
-
58
- <script lang="ts">
59
- import Vue from 'vue';
60
- import { ColumnDefinition, formatBoolean } from '@tager/admin-ui';
61
- import { getMessageFromError, Nullable } from '@tager/admin-services';
62
- import { BannerArea, BannerItem } from '../typings/model';
63
- import {
64
- deleteBannerItem,
65
- getBannerAreaByAlias,
66
- getBannerItemList,
67
- moveBannerItem,
68
- } from '../services/requests';
69
- import { getBannerItemFormUrl } from '../constants/paths';
70
-
71
- const COLUMN_DEFS: Array<ColumnDefinition<BannerItem>> = [
72
- {
73
- id: 2,
74
- name: 'Image',
75
- field: 'image',
76
- type: 'image',
77
- },
78
- {
79
- id: 1,
80
- name: 'Title',
81
- field: 'title',
82
- },
83
- { id: 3, name: 'Text', field: 'text', type: 'html' },
84
- { id: 4, name: 'Button: Label', field: 'buttonLabel' },
85
- { id: 5, name: 'Button: Link', field: 'buttonLink' },
86
- {
87
- id: 6,
88
- name: 'Button: Is new tab?',
89
- field: 'buttonIsNewTab',
90
- format: ({ row }) => formatBoolean(row.buttonIsNewTab),
91
- },
92
- {
93
- id: 7,
94
- name: 'Actions',
95
- field: 'actions',
96
- style: { whiteSpace: 'nowrap', width: '205px' },
97
- headStyle: { whiteSpace: 'nowrap', width: '205px' },
98
- },
99
- ];
100
-
101
- export default Vue.extend({
102
- name: 'BannerItemList',
103
- data(): {
104
- columnDefs: Array<ColumnDefinition<BannerItem>>;
105
- rowData: Array<BannerItem>;
106
- deletingBannerItemIdList: Array<number>;
107
- isBannerItemMoving: boolean;
108
- isRowDataLoading: boolean;
109
- errorMessage: Nullable<string>;
110
- bannerArea: Nullable<BannerArea>;
111
- } {
112
- return {
113
- bannerArea: null,
114
- columnDefs: COLUMN_DEFS,
115
- rowData: [],
116
- deletingBannerItemIdList: [],
117
- isBannerItemMoving: false,
118
- isRowDataLoading: false,
119
- errorMessage: null,
120
- };
121
- },
122
- computed: {
123
- areaAlias(): string {
124
- return this.$route.params.areaAlias;
125
- },
126
- pageTitle(): string {
127
- return this.bannerArea ? `"${this.bannerArea.label}" banners` : 'Banners';
128
- },
129
- },
130
- watch: {
131
- areaAlias() {
132
- this.refreshBannerItemList();
133
- },
134
- },
135
- mounted(): void {
136
- this.refreshBannerItemList();
137
- },
138
- methods: {
139
- refreshBannerItemList(): Promise<void> {
140
- this.isRowDataLoading = true;
141
- return getBannerAreaByAlias(this.areaAlias)
142
- .then((response) => {
143
- this.bannerArea = response.data;
144
- return getBannerItemList(this.bannerArea.id);
145
- })
146
- .then((response) => {
147
- this.rowData = response.data;
148
- this.errorMessage = null;
149
- })
150
- .catch((error) => {
151
- console.error(error);
152
- this.rowData = [];
153
- this.errorMessage = getMessageFromError(error);
154
- })
155
- .finally(() => {
156
- this.isRowDataLoading = false;
157
- });
158
- },
159
- moveBannerItem(bannerItemId: number, direction: 'up' | 'down') {
160
- this.isBannerItemMoving = true;
161
-
162
- moveBannerItem(bannerItemId, direction)
163
- .then((response) => {
164
- if (response.success) {
165
- return this.refreshBannerItemList();
166
- }
167
- })
168
- .catch(console.error)
169
- .finally(() => {
170
- this.isBannerItemMoving = false;
171
- });
172
- },
173
- handleBannerItemDelete(bannerItem: BannerItem) {
174
- const shouldDeleteBannerItem = confirm(
175
- `Are you sure you want to delete banner item "${bannerItem.title}"`
176
- );
177
-
178
- if (shouldDeleteBannerItem) {
179
- this.deletingBannerItemIdList.push(bannerItem.id);
180
- deleteBannerItem(bannerItem.id)
181
- .then((response) => {
182
- if (response.success) {
183
- this.refreshBannerItemList().then(() => {
184
- this.deletingBannerItemIdList.filter(
185
- (id) => id !== bannerItem.id
186
- );
187
- });
188
- this.$toast({
189
- variant: 'success',
190
- title: 'Success',
191
- body: 'Banner Item was successfully removed',
192
- });
193
- } else {
194
- this.$toast({
195
- variant: 'danger',
196
- title: 'Error',
197
- body: 'Banner Item deletion was failed',
198
- });
199
- }
200
- })
201
- .catch((error) => {
202
- console.error(error);
203
- this.$toast({
204
- variant: 'danger',
205
- title: 'Error',
206
- body: 'Banner Item deletion was failed',
207
- });
208
- });
209
- }
210
- },
211
- getLinkToBannerItemForm(bannerItemId: number | string) {
212
- return getBannerItemFormUrl({
213
- areaAlias: this.bannerArea?.alias ?? 'unknowm',
214
- itemId: bannerItemId,
215
- });
216
- },
217
- },
218
- });
219
- </script>
220
-
221
- <style scoped lang="scss"></style>
@@ -1,15 +0,0 @@
1
- import { CustomRouteConfig, MenuItemType } from '@tager/admin-layout';
2
-
3
- export declare const BLOG_POST_LIST_ROUTE: CustomRouteConfig;
4
- export declare const BLOG_POST_FORM_ROUTE: CustomRouteConfig;
5
- export declare const BLOG_CATEGORY_LIST_ROUTE: CustomRouteConfig;
6
- export declare const BLOG_CATEGORY_FORM_ROUTE: CustomRouteConfig;
7
-
8
- export declare const BLOG_MENU_ITEM: MenuItemType;
9
-
10
- export declare const BLOG_ROUTE_PATHS: {
11
- POST_LIST: string;
12
- POST_FORM: string;
13
- CATEGORY_LIST: string;
14
- CATEGORY_FORM: string;
15
- };