logo

pleroma-fe

My custom branche(s) on git.pleroma.social/pleroma/pleroma-fe git clone https://anongit.hacktivis.me/git/pleroma-fe.git/
commit: eb472e2d76b5eb7307b96f94a5cff6e0d9940543
parent ec1f069515148fa9cd164a27e865140931662164
Author: Henry Jameson <me@hjkos.com>
Date:   Wed, 30 Oct 2024 22:33:50 +0200

wait a tick before emitting new Id in SelectMotion

Diffstat:

Msrc/components/select/select_motion.vue34++++++++++++++++++++++++++++------
Msrc/components/settings_modal/tabs/style_tab/virtual_directives_tab.vue148++++++++++++++++++++++++++++++++++++++++----------------------------------------
2 files changed, 102 insertions(+), 80 deletions(-)

diff --git a/src/components/select/select_motion.vue b/src/components/select/select_motion.vue @@ -49,9 +49,27 @@ </template> <script setup> -import { computed, defineEmits, defineProps } from 'vue' +import { computed, defineEmits, defineProps, nextTick } from 'vue' + +const props = defineProps({ + modelValue: { + type: Array, + required: true + }, + selectedId: { + type: Number, + required: true + }, + disabled: { + type: Boolean, + default: false + }, + getAddValue: { + type: Function, + required: true + } +}) -const props = defineProps(['modelValue', 'selectedId', 'disabled', 'getAddValue']) const emit = defineEmits(['update:modelValue', 'update:selectedId']) const moveUpValid = computed(() => { @@ -60,12 +78,13 @@ const moveUpValid = computed(() => { const present = computed(() => props.modelValue[props.selectedId] != null) -const moveUp = () => { +const moveUp = async () => { const newModel = [...props.modelValue] const movable = newModel.splice(props.selectedId, 1)[0] newModel.splice(props.selectedId - 1, 0, movable) emit('update:modelValue', newModel) + await nextTick() emit('update:selectedId', props.selectedId - 1) } @@ -73,27 +92,30 @@ const moveDnValid = computed(() => { return props.selectedId < props.modelValue.length - 1 }) -const moveDn = () => { +const moveDn = async () => { const newModel = [...props.modelValue] const movable = newModel.splice(props.selectedId.value, 1)[0] newModel.splice(props.selectedId + 1, 0, movable) emit('update:modelValue', newModel) + await nextTick() emit('update:selectedId', props.selectedId + 1) } -const add = () => { +const add = async () => { const newModel = [...props.modelValue, props.getAddValue()] emit('update:modelValue', newModel) + await nextTick() emit('update:selectedId', Math.max(newModel.length - 1, 0)) } -const del = () => { +const del = async () => { const newModel = [...props.modelValue] newModel.splice(props.selectedId, 1) emit('update:modelValue', newModel) + await nextTick() emit('update:selectedId', newModel.length === 0 ? undefined : Math.max(props.selectedId - 1, 0)) } </script> diff --git a/src/components/settings_modal/tabs/style_tab/virtual_directives_tab.vue b/src/components/settings_modal/tabs/style_tab/virtual_directives_tab.vue @@ -1,83 +1,83 @@ <script src="./virtual_directives_tab.js"></script> <template> -<div class="setting-item list-editor variables-editor"> - <label - class="list-select-label" - for="variables-selector" - > - {{ $t('settings.style.themes3.editor.variables.label') }} - {{ ' ' }} - </label> - <Select - id="variables-selector" - v-model="selectedVirtualDirectiveId" - class="list-select" - size="20" + <div class="setting-item list-editor variables-editor"> + <label + class="list-select-label" + for="variables-selector" > - <option - v-for="(p, index) in modelValue" - :key="p.name" - :value="index" + {{ $t('settings.style.themes3.editor.variables.label') }} + {{ ' ' }} + </label> + <Select + id="variables-selector" + v-model="selectedVirtualDirectiveId" + class="list-select" + size="20" > - {{ p.name }} - </option> - </Select> - <SelectMotion - class="list-select-movement" - :model-value="modelValue" - @update:modelValue="e => emit('update:modelValue', e)" - :selected-id="selectedVirtualDirectiveId" - @update:selectedId="e => selectedVirtualDirectiveId = e" - :get-add-value="getNewVirtualDirective" - /> - <div class="list-edit-area"> - <div class="variable-selector"> - <label - class="variable-name-label" - for="variables-selector" - > - {{ $t('settings.style.themes3.editor.variables.name_label') }} - {{ ' ' }} - </label> - <input - class="input" - v-model="selectedVirtualDirective.name" - > - <label - class="variable-type-label" - for="variables-selector" + <option + v-for="(p, index) in modelValue" + :key="p.name" + :value="index" > - {{ $t('settings.style.themes3.editor.variables.type_label') }} - {{ ' ' }} - </label> - <Select - v-model="selectedVirtualDirectiveValType" - > - <option value='shadow'> - {{ $t('settings.style.themes3.editor.variables.type_shadow') }} - </option> - <option value='color'> - {{ $t('settings.style.themes3.editor.variables.type_color') }} - </option> - <option value='generic'> - {{ $t('settings.style.themes3.editor.variables.type_generic') }} - </option> - </Select> - </div> - <ShadowControl - v-if="selectedVirtualDirectiveValType === 'shadow'" - v-model="draftVirtualDirective" - :static-vars="staticVars" - :compact="true" - /> - <ColorInput - v-if="selectedVirtualDirectiveValType === 'color'" - v-model="draftVirtualDirective" - :fallback="computeColor(draftVirtualDirective)" - :label="$t('settings.style.themes3.editor.variables.virtual_color')" - :hide-optional-checkbox="true" + {{ p.name }} + </option> + </Select> + <SelectMotion + class="list-select-movement" + :model-value="modelValue" + @update:modelValue="e => emit('update:modelValue', e)" + :selected-id="selectedVirtualDirectiveId" + @update:selectedId="e => selectedVirtualDirectiveId = e" + :get-add-value="getNewVirtualDirective" /> + <div class="list-edit-area"> + <div class="variable-selector"> + <label + class="variable-name-label" + for="variables-selector" + > + {{ $t('settings.style.themes3.editor.variables.name_label') }} + {{ ' ' }} + </label> + <input + class="input" + v-model="selectedVirtualDirective.name" + > + <label + class="variable-type-label" + for="variables-selector" + > + {{ $t('settings.style.themes3.editor.variables.type_label') }} + {{ ' ' }} + </label> + <Select + v-model="selectedVirtualDirectiveValType" + > + <option value='shadow'> + {{ $t('settings.style.themes3.editor.variables.type_shadow') }} + </option> + <option value='color'> + {{ $t('settings.style.themes3.editor.variables.type_color') }} + </option> + <option value='generic'> + {{ $t('settings.style.themes3.editor.variables.type_generic') }} + </option> + </Select> + </div> + <ShadowControl + v-if="selectedVirtualDirectiveValType === 'shadow'" + v-model="draftVirtualDirective" + :static-vars="staticVars" + :compact="true" + /> + <ColorInput + v-if="selectedVirtualDirectiveValType === 'color'" + v-model="draftVirtualDirective" + :fallback="computeColor(draftVirtualDirective)" + :label="$t('settings.style.themes3.editor.variables.virtual_color')" + :hide-optional-checkbox="true" + /> + </div> </div> -</div> </template>