From 9508dbb89b051171e8bfa1c7b0156909c4b8d2c2 Mon Sep 17 00:00:00 2001 From: Vitalii Kulyk Date: Tue, 18 Mar 2025 11:50:43 +0200 Subject: [PATCH 1/5] feat: Enhance GroupsTable with ColumnValueInputWrapper for Input Handling --- .../components/ColumnValueInputWrapper.vue | 72 +++++++++++++++++++ adminforth/spa/src/components/GroupsTable.vue | 50 +++---------- plugins/install-plugins.sh | 3 +- 3 files changed, 83 insertions(+), 42 deletions(-) create mode 100644 adminforth/spa/src/components/ColumnValueInputWrapper.vue diff --git a/adminforth/spa/src/components/ColumnValueInputWrapper.vue b/adminforth/spa/src/components/ColumnValueInputWrapper.vue new file mode 100644 index 000000000..d28b25f2c --- /dev/null +++ b/adminforth/spa/src/components/ColumnValueInputWrapper.vue @@ -0,0 +1,72 @@ + + + \ No newline at end of file diff --git a/adminforth/spa/src/components/GroupsTable.vue b/adminforth/spa/src/components/GroupsTable.vue index b3c561a3a..c25f81589 100644 --- a/adminforth/spa/src/components/GroupsTable.vue +++ b/adminforth/spa/src/components/GroupsTable.vue @@ -42,50 +42,18 @@ class="px-6 py-4 whitespace-pre-wrap relative block md:table-cell" :class="{'rounded-br-lg': i === group.columns.length - 1}" > - -
{{ columnError(column) }}
{{ column.editingNote[mode] }}
@@ -98,10 +66,10 @@ + \ No newline at end of file diff --git a/plugins/install-plugins.sh b/plugins/install-plugins.sh index 78e0e97b0..b1f6ec6b2 100644 --- a/plugins/install-plugins.sh +++ b/plugins/install-plugins.sh @@ -1,6 +1,7 @@ PLUGINS="adminforth-audit-log adminforth-email-password-reset adminforth-foreign-inline-list \ adminforth-i18n adminforth-import-export adminforth-text-complete adminforth-open-signup \ -adminforth-rich-editor adminforth-two-factors-auth adminforth-upload adminforth-oauth" +adminforth-rich-editor adminforth-two-factors-auth adminforth-upload adminforth-oauth \ +adminforth-list-in-place-edit" # for each plugin for plugin in $PLUGINS; do From 40fe9b946d960329d85cad7e951e79e19ba6a046 Mon Sep 17 00:00:00 2001 From: Vitalii Kulyk Date: Tue, 18 Mar 2025 12:19:04 +0200 Subject: [PATCH 2/5] fix: Add teleportToBody prop to ColumnValueInput for improved dropdown rendering --- adminforth/spa/src/components/ColumnValueInput.vue | 3 +++ 1 file changed, 3 insertions(+) diff --git a/adminforth/spa/src/components/ColumnValueInput.vue b/adminforth/spa/src/components/ColumnValueInput.vue index d327e9797..9996ba4cc 100644 --- a/adminforth/spa/src/components/ColumnValueInput.vue +++ b/adminforth/spa/src/components/ColumnValueInput.vue @@ -18,6 +18,7 @@ ref="input" class="w-full" :options="columnOptions[column.name] || []" + teleportToBody :placeholder = "columnOptions[column.name]?.length ?$t('Select...'): $t('There are no options available')" :modelValue="value" :readonly="column.editReadonly && source === 'edit'" @@ -28,6 +29,7 @@ ref="input" class="w-full" :options="column.enum" + teleportToBody :modelValue="value" :readonly="column.editReadonly && source === 'edit'" @update:modelValue="$emit('update:modelValue', $event)" @@ -37,6 +39,7 @@ ref="input" class="w-full" :options="getBooleanOptions(column)" + teleportToBody :modelValue="value" :readonly="column.editReadonly && source === 'edit'" @update:modelValue="$emit('update:modelValue', $event)" From d4887d7db2e0d0658d7d17b9ad48092fd1973a6b Mon Sep 17 00:00:00 2001 From: Vitalii Kulyk Date: Tue, 18 Mar 2025 12:45:26 +0200 Subject: [PATCH 3/5] fix: Update ColumnValueInputWrapper to focus on the last input after adding an array item --- .../spa/src/components/ColumnValueInputWrapper.vue | 7 ++++--- adminforth/spa/src/components/GroupsTable.vue | 9 --------- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/adminforth/spa/src/components/ColumnValueInputWrapper.vue b/adminforth/spa/src/components/ColumnValueInputWrapper.vue index d28b25f2c..a735f9e6a 100644 --- a/adminforth/spa/src/components/ColumnValueInputWrapper.vue +++ b/adminforth/spa/src/components/ColumnValueInputWrapper.vue @@ -49,7 +49,7 @@ \ No newline at end of file diff --git a/adminforth/spa/src/components/GroupsTable.vue b/adminforth/spa/src/components/GroupsTable.vue index c25f81589..252725bed 100644 --- a/adminforth/spa/src/components/GroupsTable.vue +++ b/adminforth/spa/src/components/GroupsTable.vue @@ -53,7 +53,6 @@ @update:unmasked="unmasked[$event] = !unmasked[$event]" @update:inValidity="customComponentsInValidity[$event.name] = $event.value" @update:emptiness="customComponentsEmptiness[$event.name] = $event.value" - @focus-last-input="focusOnLastInput" />
{{ columnError(column) }}
{{ column.editingNote[mode] }}
@@ -85,8 +84,6 @@ columnOptions: any, }>(); - const arrayItemRefs = ref([]); - const customComponentsInValidity: Ref> = ref({}); const customComponentsEmptiness: Ref> = ref({}); const allColumnsHaveCustomComponent = computed(() => { @@ -98,12 +95,6 @@ const emit = defineEmits(['update:customComponentsInValidity', 'update:customComponentsEmptiness']); - async function focusOnLastInput(column) { - // wait for element to register - await nextTick(); - arrayItemRefs.value[arrayItemRefs.value.length - 1].focus(); - } - watch(customComponentsInValidity.value, (newVal) => { emit('update:customComponentsInValidity', newVal); }); From dbc216042829b6f4297a0fe70ccad746ebb07c42 Mon Sep 17 00:00:00 2001 From: Vitalii Kulyk Date: Tue, 18 Mar 2025 16:44:39 +0200 Subject: [PATCH 4/5] fix: Implement scroll handling for dropdown positioning when teleportToBody is enabled --- adminforth/spa/src/afcl/Select.vue | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/adminforth/spa/src/afcl/Select.vue b/adminforth/spa/src/afcl/Select.vue index 7ab2998d6..c247f4c28 100644 --- a/adminforth/spa/src/afcl/Select.vue +++ b/adminforth/spa/src/afcl/Select.vue @@ -34,7 +34,7 @@
{ + if (showDropdown.value && inputEl.value) { + const rect = inputEl.value.getBoundingClientRect(); + const style = { + left: `${rect.left}px`, + top: isTop.value && dropdownHeight.value + ? `${rect.top - dropdownHeight.value - 8}px` + : `${rect.bottom + 8}px`, + width: `${rect.width}px` + }; + + if (dropdownEl.value) { + Object.assign(dropdownEl.value.style, style); + } + } +}; + onMounted(() => { updateFromProps(); @@ -214,7 +231,11 @@ onMounted(() => { }); addClickListener(); - + + // Add scroll listeners if teleportToBody is true + if (props.teleportToBody) { + window.addEventListener('scroll', handleScroll, true); + } }); const filteredItems = computed(() => { @@ -268,6 +289,10 @@ const toogleItem = (item) => { onUnmounted(() => { removeClickListener(); + // Remove scroll listeners if teleportToBody is true + if (props.teleportToBody) { + window.removeEventListener('scroll', handleScroll, true); + } }); const getDropdownPosition = computed(() => { From bf837ee4c03e4fcd15c4f2cf60bf4a05c93ab241 Mon Sep 17 00:00:00 2001 From: Vitalii Kulyk Date: Wed, 19 Mar 2025 10:58:26 +0200 Subject: [PATCH 5/5] fix: improve layout in ColumnValueInputWrapper component --- .../components/ColumnValueInputWrapper.vue | 40 ++++++++++--------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/adminforth/spa/src/components/ColumnValueInputWrapper.vue b/adminforth/spa/src/components/ColumnValueInputWrapper.vue index a735f9e6a..15f20d0c1 100644 --- a/adminforth/spa/src/components/ColumnValueInputWrapper.vue +++ b/adminforth/spa/src/components/ColumnValueInputWrapper.vue @@ -1,24 +1,26 @@