@tager/admin-banners 0.3.6 → 1.0.1

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 (74) hide show
  1. package/dist/constants/paths.d.ts +5 -10
  2. package/dist/constants/routes.d.ts +4 -4
  3. package/dist/dev/App.vue.d.ts +5 -0
  4. package/dist/dev/config.d.ts +2 -0
  5. package/dist/dev/env.d.ts +1 -0
  6. package/dist/dev/main.d.ts +3 -0
  7. package/dist/hooks/index.d.ts +2 -2
  8. package/dist/hooks/useFetchBanner.d.ts +7 -8
  9. package/dist/hooks/useFetchBanners.d.ts +3 -6
  10. package/dist/hooks/useFetchZoneFields.d.ts +7 -0
  11. package/dist/hooks/useFetchZones.d.ts +3 -6
  12. package/dist/index.mjs +1008 -0
  13. package/dist/locales/apply.d.ts +1 -0
  14. package/dist/locales/en.d.ts +41 -41
  15. package/dist/locales/ru.d.ts +2 -3
  16. package/dist/main.d.ts +3 -4
  17. package/dist/services/requests.d.ts +25 -24
  18. package/dist/style.css +1 -0
  19. package/dist/typings/banners.d.ts +47 -43
  20. package/dist/typings/common.d.ts +1 -1
  21. package/dist/typings/model.d.ts +104 -104
  22. package/dist/typings/zones.d.ts +9 -5
  23. package/dist/utils/common.d.ts +2 -2
  24. package/dist/utils/paths.d.ts +5 -0
  25. package/dist/views/Banners/BannerForm/BannerForm.helpers.d.ts +5 -5
  26. package/dist/views/Banners/BannerForm/BannerForm.vue.d.ts +2694 -83
  27. package/dist/views/Banners/BannerForm/index.d.ts +1 -1
  28. package/dist/views/Banners/BannerList/BannerList.helpers.d.ts +6 -6
  29. package/dist/views/Banners/BannerList/BannerList.vue.d.ts +25 -55
  30. package/dist/views/Banners/BannerList/hooks/index.d.ts +1 -1
  31. package/dist/views/Banners/BannerList/hooks/useAdvancedSearch.d.ts +22 -21
  32. package/dist/views/Banners/BannerList/index.d.ts +1 -1
  33. package/dist/views/Zones/ZoneList/ZoneList.helpers.d.ts +5 -5
  34. package/dist/views/Zones/ZoneList/ZoneList.vue.d.ts +11 -28
  35. package/dist/views/Zones/ZoneList/index.d.ts +1 -1
  36. package/package.json +51 -49
  37. package/src/constants/paths.ts +1 -15
  38. package/src/constants/routes.ts +7 -7
  39. package/src/dev/App.vue +46 -0
  40. package/src/dev/config.ts +23 -0
  41. package/src/dev/env.ts +17 -0
  42. package/src/dev/main.ts +47 -0
  43. package/src/hooks/useFetchBanner.ts +3 -6
  44. package/src/hooks/useFetchBanners.ts +2 -5
  45. package/src/hooks/useFetchZoneFields.ts +39 -0
  46. package/src/hooks/useFetchZones.ts +2 -5
  47. package/src/locales/apply.ts +9 -0
  48. package/src/locales/en.ts +1 -1
  49. package/src/locales/ru.ts +40 -42
  50. package/src/main.ts +3 -8
  51. package/src/services/requests.ts +7 -1
  52. package/src/typings/banners.ts +10 -1
  53. package/src/typings/zones.ts +6 -0
  54. package/src/utils/paths.ts +15 -0
  55. package/src/views/Banners/BannerForm/BannerForm.helpers.ts +7 -1
  56. package/src/views/Banners/BannerForm/BannerForm.vue +183 -137
  57. package/src/views/Banners/BannerList/BannerList.vue +64 -61
  58. package/src/views/Banners/BannerList/hooks/useAdvancedSearch.ts +36 -16
  59. package/src/views/Zones/ZoneList/ZoneList.helpers.ts +1 -1
  60. package/src/views/Zones/ZoneList/ZoneList.vue +18 -19
  61. package/CHANGELOG.md +0 -13
  62. package/dist/constants/menu.d.ts +0 -5
  63. package/dist/dev.d.ts +0 -1
  64. package/dist/index.esm.js +0 -3660
  65. package/dist/index.umd.js +0 -3679
  66. package/dist/router/index.d.ts +0 -4
  67. package/src/constants/menu.ts +0 -26
  68. package/src/dev.ts +0 -34
  69. package/src/router/index.ts +0 -38
  70. package/src/typings/sfc.d.ts +0 -12
  71. package/src/typings/shims-tsx.d.ts +0 -13
  72. package/src/typings/shims-vue.d.ts +0 -11
  73. package/src/views/App.vue +0 -22
  74. package/src/views/Home.vue +0 -37
@@ -1,122 +1,142 @@
1
1
  <template>
2
- <page
3
- :title="
4
- isCreation ? $t('banners:createBanner') : $t('banners:updateBanner')
2
+ <Page
3
+ :title="
4
+ isCreation
5
+ ? $i18n.t('banners:createBanner')
6
+ : $i18n.t('banners:updateBanner')
5
7
  "
6
- :is-content-loading="isContentLoading"
8
+ :is-content-loading="isContentLoading"
7
9
  >
8
- <template v-slot:content>
10
+ <template #content>
9
11
  <form novalidate @submit.prevent="submitForm">
10
12
  <div class="zone">
11
- <form-field-select
12
- v-model="values.bannerZone"
13
- name="bannerZone"
14
- :label="$t('banners:zone')"
15
- :options="zonesOptionList"
16
- :error="errors.bannerZone"
13
+ <FormFieldSelect
14
+ v-model:value="values.bannerZone"
15
+ name="bannerZone"
16
+ :label="$i18n.t('banners:zone')"
17
+ :options="zonesOptionList"
18
+ :error="errors.bannerZone"
17
19
  />
18
20
 
19
- <form-field
20
- v-model="values.priority"
21
- name="priority"
22
- :label="$t('banners:priority')"
23
- :error="errors.priority"
21
+ <FormField
22
+ v-model:value="values.priority"
23
+ name="priority"
24
+ :label="$i18n.t('banners:priority')"
25
+ :error="errors.priority"
24
26
  />
25
27
  </div>
26
28
 
27
- <input-label>{{ $t('banners:period') }}</input-label>
29
+ <InputLabel>{{ $i18n.t('banners:period') }}</InputLabel>
28
30
 
29
31
  <div class="date">
30
- <form-field
31
- v-model="values.dateStart"
32
- :label="$t('banners:from')"
33
- name="dateStart"
34
- type="date"
35
- :max="values.dateEnd"
32
+ <FormField
33
+ v-model:value="values.dateStart"
34
+ :label="$i18n.t('banners:from')"
35
+ name="dateStart"
36
+ type="date"
37
+ :max="values.dateEnd"
36
38
  />
37
39
 
38
- <form-field
39
- v-model="values.dateEnd"
40
- :label="$t('banners:to')"
41
- name="dateEnd"
42
- type="date"
43
- :min="values.dateStart"
40
+ <FormField
41
+ v-model:value="values.dateEnd"
42
+ :label="$i18n.t('banners:to')"
43
+ name="dateEnd"
44
+ type="date"
45
+ :min="values.dateStart"
44
46
  />
45
47
  </div>
46
48
 
47
- <form-field-checkbox
48
- v-model="values.disabled"
49
- name="disabled"
50
- :label="$t('banners:disabled')"
51
- :error="errors.disabled"
49
+ <FormFieldCheckbox
50
+ v-model:checked="values.disabled"
51
+ name="disabled"
52
+ :label="$i18n.t('banners:disabled')"
53
+ :error="errors.disabled"
52
54
  />
53
55
 
54
56
  <div class="link">
55
- <form-field
56
- v-model="values.link"
57
- name="link"
58
- :label="$t('banners:link')"
59
- :error="errors.name"
57
+ <FormField
58
+ v-model:value="values.link"
59
+ name="link"
60
+ :label="$i18n.t('banners:link')"
61
+ :error="errors.name"
60
62
  />
61
63
 
62
- <form-field-checkbox
63
- v-model="values.openNewTab"
64
- name="openNewTab"
65
- :label="$t('banners:openNewTab')"
66
- :error="errors.openNewTab"
64
+ <FormFieldCheckbox
65
+ v-model:checked="values.openNewTab"
66
+ name="openNewTab"
67
+ :label="$i18n.t('banners:openNewTab')"
68
+ :error="errors.openNewTab"
67
69
  />
68
70
  </div>
69
71
 
70
- <form-field-file-input
71
- v-model="values.image"
72
- name="image"
73
- file-type="image"
74
- :label="$t('banners:image')"
75
- :error="errors.file"
72
+ <FormFieldFileInput
73
+ v-model:value="values.image"
74
+ name="image"
75
+ file-type="image"
76
+ :label="$i18n.t('banners:image')"
77
+ :error="errors.file"
76
78
  />
77
79
 
78
- <form-field
79
- v-model="values.comment"
80
- name="comment"
81
- type="textarea"
82
- :label="$t('banners:comment')"
83
- :error="errors.comment"
80
+ <DynamicField
81
+ v-for="field of values.fields"
82
+ :key="field.name"
83
+ :field="field"
84
+ />
85
+
86
+ <FormField
87
+ v-model:value="values.comment"
88
+ name="comment"
89
+ type="textarea"
90
+ :label="$i18n.t('banners:comment')"
91
+ :error="errors.comment"
84
92
  />
85
93
  </form>
86
94
  </template>
87
95
 
88
- <template v-slot:footer>
96
+ <template #footer>
89
97
  <FormFooter
90
- :back-href="bannerListUrl"
91
- :on-submit="submitForm"
92
- :is-submitting="isSubmitting"
93
- :is-creation="isCreation"
94
- :can-create-another="isCreation"
98
+ :back-href="bannerListUrl"
99
+ :is-submitting="isSubmitting"
100
+ :is-creation="isCreation"
101
+ :can-create-another="isCreation"
102
+ @submit="submitForm"
95
103
  />
96
104
  </template>
97
- </page>
105
+ </Page>
98
106
  </template>
99
107
 
100
108
  <script lang="ts">
109
+ import { computed, defineComponent, ref, SetupContext, watch } from 'vue';
110
+ import { useRoute, useRouter } from 'vue-router';
111
+
112
+ import {
113
+ FormField,
114
+ FormFieldCheckbox,
115
+ FormFieldFileInput,
116
+ FormFieldSelect,
117
+ FormFooter,
118
+ InputLabel,
119
+ OptionType,
120
+ TagerFormSubmitEvent,
121
+ } from '@tager/admin-ui';
122
+ import { DynamicField, universalFieldUtils } from '@tager/admin-dynamic-field';
101
123
  import {
102
- computed,
103
- defineComponent,
104
- ref,
105
- SetupContext,
106
- watch,
107
- } from '@vue/composition-api';
108
-
109
- import {FormFooter, OptionType, TagerFormSubmitEvent} from '@tager/admin-ui';
110
- import {convertRequestErrorToMap} from '@tager/admin-services';
111
-
112
- import {useFetchZones} from '../../../hooks';
113
- import {BannerFormValues} from '../../../typings/banners';
114
- import {useFetchBanner} from '../../../hooks/useFetchBanner';
124
+ convertRequestErrorToMap,
125
+ navigateBack,
126
+ useI18n,
127
+ useToast,
128
+ } from '@tager/admin-services';
129
+ import { Page } from '@tager/admin-layout';
130
+
131
+ import { useFetchZones } from '../../../hooks';
132
+ import { BannerFormValues } from '../../../typings/banners';
133
+ import { useFetchBanner } from '../../../hooks/useFetchBanner';
115
134
  import {
116
135
  getBannersBannerFormUrl,
117
136
  getBannersBannerListUrl,
118
- } from '../../../constants/paths';
119
- import {createBanner, updateBanner} from '../../../services/requests';
137
+ } from '../../../utils/paths';
138
+ import { createBanner, updateBanner } from '../../../services/requests';
139
+ import { useFetchZoneFields } from '../../../hooks/useFetchZoneFields';
120
140
 
121
141
  import {
122
142
  convertBannerFormValuesToPayload,
@@ -125,28 +145,39 @@ import {
125
145
 
126
146
  export default defineComponent({
127
147
  name: 'BannerForm',
128
- components: {FormFooter},
129
- setup(props, context: SetupContext) {
130
- const bannerId = computed<string>(
131
- () => context.root.$route.params.bannerId
132
- );
148
+ components: {
149
+ FormFieldFileInput,
150
+ FormFieldCheckbox,
151
+ InputLabel,
152
+ FormField,
153
+ FormFieldSelect,
154
+ Page,
155
+ FormFooter,
156
+ DynamicField,
157
+ },
158
+ setup() {
159
+ const route = useRoute();
160
+ const router = useRouter();
161
+ const toast = useToast();
162
+ const { t } = useI18n();
163
+
164
+ const bannerId = computed<string>(() => route.params.bannerId as string);
133
165
  const isCreation = computed<boolean>(() => bannerId.value === 'create');
134
166
 
135
167
  /** Zones **/
136
168
 
137
- const {data: zones, loading: isZonesLoading} = useFetchZones({context});
169
+ const { data: zones, loading: isZonesLoading } = useFetchZones();
138
170
 
139
171
  const zonesOptionList = computed<OptionType[]>(() =>
140
- zones.value.map<OptionType>((zone) => ({
141
- value: zone.id,
142
- label: zone.name,
143
- }))
172
+ zones.value.map<OptionType>((zone) => ({
173
+ value: zone.id,
174
+ label: zone.name,
175
+ }))
144
176
  );
145
177
 
146
178
  /** Banner **/
147
179
 
148
- const {data: banner, loading: isBannerLoading} = useFetchBanner({
149
- context,
180
+ const { data: banner, loading: isBannerLoading } = useFetchBanner({
150
181
  bannerId,
151
182
  isCreation,
152
183
  });
@@ -155,14 +186,29 @@ export default defineComponent({
155
186
 
156
187
  const isSubmitting = ref<boolean>(false);
157
188
  const values = ref<BannerFormValues>(
158
- convertBannerToFormValues(banner.value, zonesOptionList.value)
189
+ convertBannerToFormValues(banner.value, zonesOptionList.value)
159
190
  );
160
191
  const errors = ref<Record<string, string>>({});
161
192
 
162
193
  watch([banner, zones], () => {
163
194
  values.value = convertBannerToFormValues(
164
- banner.value,
165
- zonesOptionList.value
195
+ banner.value,
196
+ zonesOptionList.value
197
+ );
198
+ });
199
+
200
+ /** Zone Fields **/
201
+
202
+ const { loading: isZoneFieldsLoading, data: zoneFields } =
203
+ useFetchZoneFields({ values });
204
+
205
+ watch(zoneFields, () => {
206
+ values.value.fields = (zoneFields.value?.fields ?? []).map(
207
+ (fieldConfig, index) =>
208
+ universalFieldUtils.createFormField(
209
+ fieldConfig,
210
+ banner.value ? banner.value.fields[index].value ?? null : null
211
+ )
166
212
  );
167
213
  });
168
214
 
@@ -172,56 +218,56 @@ export default defineComponent({
172
218
  const body = convertBannerFormValuesToPayload(values.value);
173
219
 
174
220
  const requestPromise = isCreation.value
175
- ? createBanner(body)
176
- : updateBanner(bannerId.value, body);
221
+ ? createBanner(body)
222
+ : updateBanner(bannerId.value, body);
177
223
 
178
224
  requestPromise
179
- .then(({data}) => {
180
- errors.value = {};
181
-
182
- if (event.type === 'create') {
183
- context.root.$router.push(
184
- getBannersBannerFormUrl({bannerId: String(data.id)})
185
- );
186
- }
187
-
188
- if (event.type === 'create_exit' || event.type === 'save_exit') {
189
- context.root.$router.push(getBannersBannerListUrl());
190
- }
191
-
192
- if (event.type === 'create_create-another') {
193
- values.value = convertBannerToFormValues(
194
- null,
195
- zonesOptionList.value
196
- );
197
- }
198
-
199
- context.root.$toast({
200
- variant: 'success',
201
- title: context.root.$t('banners:success'),
202
- body: isCreation.value
203
- ? context.root.$t('banners:bannerWasSuccessfullyCreated')
204
- : context.root.$t('banners:bannerWasSuccessfullyUpdated'),
205
- });
206
- })
207
- .catch((error) => {
208
- console.error(error);
209
- errors.value = convertRequestErrorToMap(error);
210
- context.root.$toast({
211
- variant: 'danger',
212
- title: context.root.$t('banners:error'),
213
- body: isCreation.value
214
- ? context.root.$t('banners:bannerCreationWasFailed')
215
- : context.root.$t('banners:bannerUpdateWasFailed'),
216
- });
217
- })
218
- .finally(() => {
219
- isSubmitting.value = false;
225
+ .then(({ data }) => {
226
+ errors.value = {};
227
+
228
+ if (event.type === 'create') {
229
+ router.push(getBannersBannerFormUrl({ bannerId: String(data.id) }));
230
+ } else if (
231
+ event.type === 'create_exit' ||
232
+ event.type === 'save_exit'
233
+ ) {
234
+ navigateBack(router, getBannersBannerListUrl());
235
+ } else if (event.type === 'create_create-another') {
236
+ values.value = convertBannerToFormValues(
237
+ null,
238
+ zonesOptionList.value
239
+ );
240
+ }
241
+
242
+ toast.show({
243
+ variant: 'success',
244
+ title: t('banners:success'),
245
+ body: isCreation.value
246
+ ? t('banners:bannerWasSuccessfullyCreated')
247
+ : t('banners:bannerWasSuccessfullyUpdated'),
248
+ });
249
+ })
250
+ .catch((error) => {
251
+ console.error(error);
252
+ errors.value = convertRequestErrorToMap(error);
253
+ toast.show({
254
+ variant: 'danger',
255
+ title: t('banners:error'),
256
+ body: isCreation.value
257
+ ? t('banners:bannerCreationWasFailed')
258
+ : t('banners:bannerUpdateWasFailed'),
220
259
  });
260
+ })
261
+ .finally(() => {
262
+ isSubmitting.value = false;
263
+ });
221
264
  };
222
265
 
223
266
  const isContentLoading = computed<boolean>(
224
- () => isBannerLoading.value || isZonesLoading.value
267
+ () =>
268
+ isBannerLoading.value ||
269
+ isZonesLoading.value ||
270
+ isZoneFieldsLoading.value
225
271
  );
226
272
 
227
273
  return {
@@ -1,15 +1,15 @@
1
1
  <template>
2
- <page
3
- :title="$t('banners:banners')"
2
+ <Page
3
+ :title="$i18n.t('banners:banners')"
4
4
  :header-buttons="[
5
5
  {
6
- text: $t('banners:createBanner'),
6
+ text: $i18n.t('banners:createBanner'),
7
7
  href: getBannersBannerFormUrl({ bannerId: 'create' }),
8
8
  },
9
9
  ]"
10
10
  >
11
- <template v-slot:content>
12
- <data-table
11
+ <template #content>
12
+ <DataTable
13
13
  :column-defs="columnDefs"
14
14
  :row-data="rowData"
15
15
  :loading="isRowDataLoading"
@@ -26,82 +26,85 @@
26
26
  }"
27
27
  @change="handleChange"
28
28
  >
29
- <template v-slot:filters>
30
- <advanced-search :tags="tags" @click:tag="tagRemovalHandler">
29
+ <template #filters>
30
+ <AdvancedSearch :tags="tags" @click:tag="tagRemovalHandler">
31
31
  <div class="filters">
32
- <form-field-multi-select
33
- v-model="zoneFilter"
32
+ <FormFieldMultiSelect
33
+ v-model:selected-options="zoneFilter"
34
34
  :options="zonesOptionList"
35
35
  name="zoneFilter"
36
36
  :searchable="true"
37
- :label="$t('banners:zone')"
37
+ :label="$i18n.t('banners:zone')"
38
38
  class="filter"
39
39
  />
40
40
 
41
- <form-field
42
- v-model="dateFilter"
43
- :label="$t('banners:date')"
41
+ <FormField
42
+ v-model:value="dateFilter"
43
+ :label="$i18n.t('banners:date')"
44
44
  name="dateFilter"
45
45
  type="date"
46
46
  class="filter"
47
47
  />
48
48
 
49
- <form-field-multi-select
50
- v-model="statusFilter"
49
+ <FormFieldMultiSelect
50
+ v-model:selected-options="statusFilter"
51
51
  :options="statusesOptionList"
52
52
  name="statusFilter"
53
53
  :searchable="true"
54
- :label="$t('banners:status')"
54
+ :label="$i18n.t('banners:status')"
55
55
  class="filter"
56
56
  />
57
57
  </div>
58
- </advanced-search>
58
+ </AdvancedSearch>
59
59
  </template>
60
60
 
61
- <template v-slot:cell(actions)="{ row }">
62
- <base-button
61
+ <template #cell(actions)="{ row }">
62
+ <BaseButton
63
63
  variant="icon"
64
- :title="$t('banners:edit')"
64
+ :title="$i18n.t('banners:edit')"
65
65
  :disabled="isBusy(row.id)"
66
66
  :href="getBannersBannerFormUrl({ bannerId: row.id })"
67
67
  >
68
- <svg-icon name="edit" />
69
- </base-button>
68
+ <EditIcon />
69
+ </BaseButton>
70
70
 
71
- <base-button
71
+ <BaseButton
72
72
  variant="icon"
73
- :title="$t('banners:remove')"
73
+ :title="$i18n.t('banners:remove')"
74
74
  :disabled="isBusy(row.id)"
75
75
  @click="handleResourceDelete(row.id)"
76
76
  >
77
- <svg-icon name="delete" />
78
- </base-button>
77
+ <DeleteIcon />
78
+ </BaseButton>
79
79
  </template>
80
- </data-table>
80
+ </DataTable>
81
81
  </template>
82
- </page>
82
+ </Page>
83
83
  </template>
84
84
 
85
85
  <script lang="ts">
86
- import {
87
- computed,
88
- defineComponent,
89
- SetupContext,
90
- watch,
91
- } from '@vue/composition-api';
86
+ import { computed, defineComponent, SetupContext, watch } from 'vue';
92
87
  import isEqual from 'lodash.isequal';
93
88
  import pick from 'lodash.pick';
89
+ import { useRoute, useRouter } from 'vue-router';
94
90
 
95
91
  import {
96
92
  ColumnDefinition,
97
93
  useDataTable,
98
- useTranslation,
94
+ DataTable,
95
+ AdvancedSearch,
96
+ FormFieldMultiSelect,
97
+ FormField,
98
+ BaseButton,
99
+ EditIcon,
100
+ DeleteIcon,
99
101
  } from '@tager/admin-ui';
100
- import { useResourceDelete } from '@tager/admin-services';
102
+ import { useI18n, useResourceDelete } from '@tager/admin-services';
103
+ import { Page } from '@tager/admin-layout';
101
104
 
102
105
  import { deleteBanner, getBanners } from '../../../services/requests';
103
106
  import { Banner } from '../../../typings/banners';
104
- import { getBannersBannerFormUrl } from '../../../constants/paths';
107
+ import { getBannersBannerFormUrl } from '../../../utils/paths';
105
108
  import { useFetchZones } from '../../../hooks';
106
109
 
107
110
  import { getColumnDefs } from './BannerList.helpers';
@@ -109,11 +112,22 @@ import { useAdvancedSearch } from './hooks';
109
112
 
110
113
  export default defineComponent({
111
114
  name: 'BannerList',
112
- setup(props, context: SetupContext) {
113
- const { t } = useTranslation(context);
114
- const { loading: isZonesLoading, data: zoneList } = useFetchZones({
115
- context,
116
- });
115
+ components: {
116
+ DeleteIcon,
117
+ EditIcon,
118
+ BaseButton,
119
+ FormField,
120
+ FormFieldMultiSelect,
121
+ AdvancedSearch,
122
+ Page,
123
+ DataTable,
124
+ },
125
+ setup() {
126
+ const route = useRoute();
127
+ const router = useRouter();
128
+ const { t } = useI18n();
129
+
130
+ const { loading: isZonesLoading, data: zoneList } = useFetchZones();
117
131
 
118
132
  const {
119
133
  zoneFilter,
@@ -125,9 +139,9 @@ export default defineComponent({
125
139
  tags,
126
140
  tagRemovalHandler,
127
141
  } = useAdvancedSearch({
128
- context,
129
142
  t,
130
143
  zoneList,
144
+ route,
131
145
  });
132
146
 
133
147
  const {
@@ -149,7 +163,6 @@ export default defineComponent({
149
163
  ...filterParams.value,
150
164
  }),
151
165
  initialValue: [],
152
- context,
153
166
  resourceName: 'Banners',
154
167
  });
155
168
 
@@ -159,12 +172,12 @@ export default defineComponent({
159
172
  }
160
173
 
161
174
  const newQuery = {
162
- ...pick(context.root.$route.query, ['query', 'pageNumber']),
175
+ ...pick(route.query, ['query', 'pageNumber']),
163
176
  ...filterParams.value,
164
177
  };
165
178
 
166
- if (!isEqual(context.root.$route.query, newQuery)) {
167
- context.root.$router.replace({ query: newQuery });
179
+ if (!isEqual(route.query, newQuery)) {
180
+ router.replace({ query: newQuery });
168
181
  fetchBanners();
169
182
  }
170
183
  });
@@ -173,7 +186,6 @@ export default defineComponent({
173
186
  deleteResource: deleteBanner,
174
187
  resourceName: 'Banner',
175
188
  onSuccess: fetchBanners,
176
- context,
177
189
  });
178
190
 
179
191
  const isBusy = (bannerId: number): boolean => {
@@ -181,7 +193,7 @@ export default defineComponent({
181
193
  };
182
194
 
183
195
  const columnDefs = computed<ColumnDefinition<Banner>[]>(() =>
184
- getColumnDefs(zoneList.value, context.root.$t)
196
+ getColumnDefs(zoneList.value, t)
185
197
  );
186
198
 
187
199
  const isRowDataLoading = computed<boolean>(
@@ -217,17 +229,8 @@ export default defineComponent({
217
229
 
218
230
  <style lang="scss">
219
231
  .filters {
220
- display: flex;
221
- margin: 0 -10px;
222
-
223
- &:not(:first-child) {
224
- margin-top: 10px;
225
- }
226
-
227
- .filter {
228
- padding: 10px 10px 0;
229
- width: 50%;
230
- margin: 0;
231
- }
232
+ display: grid;
233
+ gap: 1rem;
234
+ grid-template-columns: 1fr 1fr 1fr;
232
235
  }
233
236
  </style>