Skip to content

Commit 05fc9bd

Browse files
authored
Merge pull request #4 from devforth/fix-list-for-polymorphic-resource
fix: adapt plugin to polymorphic foreign resources
2 parents 7d809c6 + e875280 commit 05fc9bd

File tree

1 file changed

+33
-5
lines changed

1 file changed

+33
-5
lines changed

custom/InlineList.vue

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
<Teleport to="body">
33
<!-- todo exclude foreign column-->
44
<Filters
5-
v-if="listResource"
6-
:columns="listResource.columns.filter((c) => c.name !== listResourceRefColumn.name)"
5+
v-if="filterableColumns.length"
6+
:columns="filterableColumns"
77
v-model:filters="filters"
88
:columnsMinMax="columnsMinMax"
99
:show="filtersShow"
@@ -70,7 +70,7 @@
7070
{{ `${action.label} (${checkboxes.length})` }}
7171
</button>
7272

73-
<RouterLink v-if="listResource?.options?.allowedActions?.create"
73+
<RouterLink v-if="createIsAllowed"
7474
:to="{
7575
name: 'resource-create',
7676
params: { resourceId: listResource.resourceId },
@@ -129,7 +129,7 @@ import {
129129
IconFilterOutline,
130130
IconPlusOutline,
131131
} from '@iconify-prerendered/vue-flowbite';
132-
import { showErrorTost } from '@/composables/useFrontendApi';
132+
import { showErrorTost, showWarningTost } from '@/composables/useFrontendApi';
133133
import { getIcon } from '@/utils';
134134
135135
const props = defineProps(['column', 'record', 'meta', 'resource', 'adminUser']);
@@ -153,13 +153,25 @@ const listResourceRefColumn = computed(() => {
153153
if (!listResource.value) {
154154
return null;
155155
}
156-
return listResource.value.columns.find(c => c.foreignResource?.resourceId === props.resource.resourceId);
156+
return listResource.value.columns.find(c => c.foreignResource?.polymorphicResources
157+
? c.foreignResource.polymorphicResources.find((pr) => pr.resourceId === props.resource.resourceId)
158+
: c.foreignResource?.resourceId === props.resource.resourceId);
157159
});
158160
159161
const selfPrimaryKeyColumn = computed(() => {
160162
return props.resource.columns.find(c => c.primaryKey);
161163
});
162164
165+
const filterableColumns = computed(() => {
166+
if (!listResource.value) {
167+
return [];
168+
}
169+
170+
const refColumn = listResourceRefColumn.value;
171+
return listResource.value.columns.filter((c) => c.name !== refColumn.name
172+
&& (refColumn.foreignResource.polymorphicOn ? c.name !== refColumn.foreignResource.polymorphicOn : true));
173+
});
174+
163175
const endFilters = computed(() => {
164176
if (!listResource.value) {
165177
return [];
@@ -183,6 +195,17 @@ const endFilters = computed(() => {
183195
];
184196
});
185197
198+
const createIsAllowed = computed(() => {
199+
if (!listResource.value?.options?.allowedActions?.create) {
200+
return false;
201+
}
202+
203+
if (listResourceRefColumn.value && !listResourceRefColumn.value.showIn.create) {
204+
return false;
205+
}
206+
return true;
207+
});
208+
186209
watch([page], async () => {
187210
await getList();
188211
});
@@ -277,6 +300,11 @@ onMounted( async () => {
277300
method: 'POST',
278301
body: {},
279302
})).resource;
303+
304+
if (listResource.value?.options?.allowedActions?.create && listResourceRefColumn.value && !listResourceRefColumn.value.showIn.create) {
305+
showWarningTost(`Resource '${listResource.value.resourceId}' column '${listResourceRefColumn.value.name}' should be editable on create page for 'create' action to be enabled`, 10000);
306+
}
307+
280308
columnsMinMax.value = await callAdminForthApi({
281309
path: '/get_min_max_for_columns',
282310
method: 'POST',

0 commit comments

Comments
 (0)