Skip to content

Commit a35d59a

Browse files
authored
Merge pull request #7 from devforth/next
Next
2 parents 6021288 + c3ea46a commit a35d59a

File tree

3 files changed

+41
-5
lines changed

3 files changed

+41
-5
lines changed

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# AdminForth ForeignInlineList Plugin
2+
3+
<img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="License: MIT" /> <img src="https://woodpecker.devforth.io/api/badges/3848/status.svg" alt="Build Status" /> <a href="https://www.npmjs.com/package/@adminforth/foreign-inline-list"> <img src="https://img.shields.io/npm/dt/@adminforth/foreign-inline-list" alt="npm downloads" /></a> <a href="https://www.npmjs.com/package/@adminforth/foreign-inline-list"><img src="https://img.shields.io/npm/v/@adminforth/foreign-inline-list" alt="npm version" /></a> <a href="https://www.npmjs.com/package/@adminforth/foreign-inline-list">
4+
5+
Allows to add an inline list of connected foreign resource records on a adminforth show page.
6+
7+
## For usage, see [AdminForth ForeignInlineList Documentation](https://adminforth.dev/docs/tutorial/Plugins/ForeignInlineList/)

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',

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"main": "dist/index.js",
66
"types": "dist/index.d.ts",
77
"type": "module",
8+
"homepage": "https://adminforth.dev/docs/tutorial/Plugins/ForeignInlineList/",
89
"scripts": {
910
"build": "tsc && rsync -av --exclude 'node_modules' custom dist/",
1011
"prepare": "npm link adminforth"

0 commit comments

Comments
 (0)