Skip to content

Commit 4086d43

Browse files
authored
fix: loaders are not visible on some pages (#190)
1 parent 5a85e7c commit 4086d43

File tree

8 files changed

+60
-28
lines changed

8 files changed

+60
-28
lines changed

app/frontend/js/components/Button.vue

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,15 @@
99
:href="realHref"
1010
@click="$emit('click')"
1111
>
12-
<div class="text-center w-full" v-if="fullWidth">
12+
<span class="text-center w-full" v-if="fullWidth">
1313
<slot />
14-
</div>
14+
</span>
1515
<slot v-else />
1616
</button>
1717
</template>
1818

1919
<script>
2020
export default {
21-
data: () => ({}),
2221
props: [
2322
'to',
2423
'exact',

app/frontend/js/components/Index/ResourceFilters.vue

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<div class="relative w-full flex justify-between z-30" v-if="hasFilters">
2+
<div class="relative w-full flex justify-between z-30">
33
<a-button color="gray" class="focus:outline-none" @click="togglePanel">
44
<filter-icon class="h-4 mr-2" data-button="resource-filters" /> {{ $t('avo.filters') }}
55
</a-button>
@@ -34,14 +34,13 @@
3434
></component>
3535
</template>
3636
<div class="p-4 border-gray-300 border-t">
37-
<a-button color="gray"
37+
<a-button
38+
color="gray"
3839
class="w-full"
3940
:disabled="resetDisabled"
4041
@click="resetFilters"
41-
v-text="'Reset filters'"
42-
/>
42+
>Reset filters</a-button>
4343
</div>
44-
4544
</div>
4645
</div>
4746
</template>
@@ -66,9 +65,6 @@ export default {
6665
perPageSteps: {},
6766
},
6867
computed: {
69-
hasFilters() {
70-
return this.filters.length > 0
71-
},
7268
resetDisabled() {
7369
if (this.$route.query.filters === undefined) return true
7470

app/frontend/js/mixins/loads-resource.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import Bus from '@/js/Bus'
44
import Resource from '@/js/models/Resource'
55
import hasLoadingBus from '@/js/mixins/has-loading-bus'
66
import pluralize from 'pluralize'
7+
import replace from 'lodash/replace'
78

89
export default {
910
mixins: [hasLoadingBus],
@@ -22,6 +23,11 @@ export default {
2223

2324
return `${Avo.rootPath}/avo-api/${this.resourceName}/new`
2425
},
26+
resourceNameFromURL() {
27+
if (!this.resource) return replace(pluralize(this.resourceName, 1), '_', ' ')
28+
29+
return this.resource.singular_name
30+
},
2531
},
2632
methods: {
2733
hydrateRelatedResources(resource) {

app/frontend/js/views/ResourceEdit.vue

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<template>
2-
<div v-if="resource" :resource-id="resourceId">
3-
<div v-for="panel in resource.panels" :key="panel.name">
2+
<div :resource-id="resourceId">
3+
<div v-for="panel in panels" :key="panel.name">
44
<panel>
55
<template #heading>
6-
{{ $t('avo.edit_item', { item: resourceNameSingular.toLowerCase() }) | upperFirst() }}
6+
{{panel.name}}
77
</template>
88

99
<template #tools>
@@ -48,6 +48,7 @@ import HasForms from '@/js/mixins/has-forms'
4848
import HasUniqueKey from '@/js/mixins/has-unique-key'
4949
import LoadsResource from '@/js/mixins/loads-resource'
5050
import hasUpperFirstFilter from '@/js/mixins/has-upper-first-filter'
51+
import upperFirst from 'lodash/upperFirst'
5152
5253
export default {
5354
mixins: [HasForms, LoadsResource, DealsWithResourceLabels, HasUniqueKey, hasUpperFirstFilter],
@@ -62,12 +63,17 @@ export default {
6263
'viaResourceId',
6364
],
6465
computed: {
66+
panels() {
67+
if (!this.resource) return [{ name: upperFirst(this.$t('avo.edit_item', { item: this.resourceNameFromURL })) }]
68+
69+
return this.resource.panels
70+
},
6571
cancelActionParams() {
6672
const action = {
6773
name: 'show',
6874
params: {
6975
resourceName: this.resourceName,
70-
resourceId: this.resource.id,
76+
resourceId: this.resourceId,
7177
},
7278
}
7379
@@ -79,6 +85,8 @@ export default {
7985
return action
8086
},
8187
canUpdate() {
88+
if (!this.resource) return false
89+
8290
return this.resource.authorization.update
8391
},
8492
},

app/frontend/js/views/ResourceIndex.vue

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@
5050
:resource-name="resourceName"
5151
:via-resource-name="viaResourceName"
5252
:via-resource-id="viaResourceId"
53-
v-if="resources.length > 0"
5453
/>
5554
</div>
5655
<div class="flex justify-end items-center px-6 space-x-3">
@@ -83,8 +82,7 @@
8382
<loading-overlay class="relative" v-if="viewType === '' && isLoading"/>
8483

8584
<div class="w-full overflow-auto min-h-28 flex flex-col" v-if="viewType === 'table'">
86-
<loading-overlay class="relative" v-if="resources.length === 0 && isLoading"/>
87-
<div class="relative flex-1 flex" v-else>
85+
<div class="relative flex-1 flex">
8886
<loading-overlay v-if="isLoading" />
8987

9088
<resource-table

app/frontend/js/views/ResourceNew.vue

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<template>
2-
<div v-if="resource">
3-
<div v-for="panel in resource.panels" :key="panel.name">
2+
<div>
3+
<div v-for="panel in panels" :key="panel.name">
44
<panel>
55
<template #heading>
6-
{{ $t('avo.create_new_item', { item: resourceNameSingular.toLowerCase() }) | upperFirst() }}
6+
{{panel.name}}
77
</template>
88

99
<template #tools>
@@ -14,7 +14,11 @@
1414
resourceName: resourceName,
1515
},
1616
}"><arrow-left-icon class="h-4 mr-1"/> {{ $t('avo.cancel') }}</a-button>
17-
<a-button color="green" @click="submitResource"><save-icon class="h-4 mr-1"/> {{ $t('avo.save') }}</a-button>
17+
<a-button
18+
color="green"
19+
@click="submitResource"
20+
v-if="resource"
21+
><save-icon class="h-4 mr-1"/> {{ $t('avo.save') }}</a-button>
1822
</div>
1923
</template>
2024

@@ -55,13 +59,20 @@ import LoadsResource from '@/js/mixins/loads-resource'
5559
export default {
5660
mixins: [HasForms, LoadsResource, DealsWithResourceLabels, HasUniqueKey],
5761
data: () => ({
58-
resource: {},
62+
resource: null,
5963
form: {},
6064
}),
6165
props: [
6266
'resourceName',
6367
'viaResourceName',
6468
'viaResourceId',
6569
],
70+
computed: {
71+
panels() {
72+
if (!this.resource) return [{ name: (this.$t('avo.create_new_item', { item: this.resourceNameFromURL })) }]
73+
74+
return this.resource.panels
75+
},
76+
},
6677
}
6778
</script>

app/frontend/js/views/ResourceShow.vue

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<div v-if="resource" :resource-id="resourceId">
2+
<div :resource-id="resourceId">
33
<div v-for="panel in panels" :key="panel.name">
44
<panel>
55
<template #heading>
@@ -75,6 +75,7 @@ import HasUpperFirstFilter from '@/js/mixins/has-upper-first-filter'
7575
import LoadsActions from '@/js/mixins/loads-actions'
7676
import LoadsResource from '@/js/mixins/loads-resource'
7777
import Modal from '@/js/components/Modal.vue'
78+
import upperFirst from 'lodash/upperFirst'
7879
7980
export default {
8081
name: 'ResourceShow',
@@ -107,20 +108,26 @@ export default {
107108
return action
108109
},
109110
fields() {
111+
if (!this.resource) return []
112+
110113
return this.resource.fields
111114
},
112115
panels() {
113-
if (!this.resource) return []
116+
if (!this.resource) return [{ name: this.$t('avo.resource_details', { name: upperFirst(this.resourceNameFromURL) }) }]
114117
115118
return this.resource.panels
116119
},
117120
hasManyRelations() {
118121
return this.fields.filter((field) => ['has_and_belongs_to_many', 'has_many'].indexOf(field.relationship) > -1)
119122
},
120123
canEdit() {
124+
if (!this.resource) return false
125+
121126
return this.resource.authorization.edit
122127
},
123128
canDelete() {
129+
if (!this.resource) return false
130+
124131
return this.resource.authorization.destroy
125132
},
126133
},

lib/avo/app/resource.rb

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,14 @@ class Resource
1313

1414
class << self
1515
def hydrate_resource(model:, resource:, view: :index, user:)
16-
default_panel_name = I18n.t 'avo.resource_details', name: resource.name
16+
case view
17+
when :show
18+
panel_name = I18n.t 'avo.resource_details', name: resource.name.downcase.upcase_first
19+
when :edit
20+
panel_name = I18n.t('avo.edit_item', item: resource.name.downcase).upcase_first
21+
when :create
22+
panel_name = I18n.t('avo.create_new_item', item: resource.name.downcase).upcase_first
23+
end
1724

1825
resource_with_fields = {
1926
id: model.id,
@@ -26,7 +33,7 @@ def hydrate_resource(model:, resource:, view: :index, user:)
2633
fields: [],
2734
grid_fields: {},
2835
panels: [{
29-
name: default_panel_name,
36+
name: panel_name,
3037
component: 'panel',
3138
}]
3239
}
@@ -46,7 +53,7 @@ def hydrate_resource(model:, resource:, view: :index, user:)
4653

4754
next if furnished_field.blank?
4855

49-
furnished_field[:panel_name] = default_panel_name
56+
furnished_field[:panel_name] = panel_name
5057
furnished_field[:show_on_show] = field.show_on_show
5158

5259
if field.has_own_panel?

0 commit comments

Comments
 (0)