settings modal minimization API

This commit is contained in:
Henry Jameson 2026-06-11 12:21:21 +03:00
commit e30ff80995
5 changed files with 39 additions and 17 deletions

View file

@ -64,11 +64,6 @@ const SettingsModal = {
}),
}
},
watch: {
$route(r) {
this.peekModal()
}
},
components: {
Modal,
Popover,
@ -98,8 +93,11 @@ const SettingsModal = {
closeModal() {
useInterfaceStore().closeSettingsModal()
},
peekModal() {
useInterfaceStore().togglePeekSettingsModal()
toggleMinimizeModal(state) {
useInterfaceStore().toggleMinimizeSettingsModal()
},
minimizeModal() {
useInterfaceStore().setSettingsModalState('minimized')
},
importValidator(data) {
if (!Array.isArray(data._pleroma_settings_version)) {
@ -256,7 +254,7 @@ const SettingsModal = {
modalMode: (store) => store.settingsModalMode,
modalOpenedOnceUser: (store) => store.settingsModalLoadedUser,
modalOpenedOnceAdmin: (store) => store.settingsModalLoadedAdmin,
modalPeeked: (store) => store.settingsModalState === 'minimized',
modalMinimized: (store) => store.settingsModalState === 'minimized',
}),
expertLevel: {
get() {
@ -276,6 +274,11 @@ const SettingsModal = {
)
},
},
watch: {
$route(r) {
this.minimizeModal()
}
},
}
export default SettingsModal

View file

@ -300,7 +300,7 @@
}
}
&.peek {
&.minimize {
.settings-modal-panel {
/* Explanation:
* Modal is positioned vertically centered.

View file

@ -2,8 +2,8 @@
<Modal
:is-open="modalActivated"
class="settings-modal"
:class="{ peek: modalPeeked }"
:no-background="modalPeeked"
:class="{ minimize: modalMinimized }"
:no-background="modalMinimized"
>
<div class="settings-modal-panel panel">
<div class="panel-heading">
@ -22,8 +22,8 @@
</transition>
<button
class="btn button-default"
:title="$t('general.peek')"
@click="peekModal"
:title="$t('general.minimize')"
@click="toggleMinimizeModal"
>
<FAIcon
:icon="['far', 'window-minimize']"

View file

@ -591,7 +591,7 @@ const statuses = {
pagination,
},
) {
commit('addNewStatuses', {
return commit('addNewStatuses', {
statuses,
showImmediately,
timeline,
@ -683,7 +683,7 @@ const statuses = {
.then((status) => dispatch('addNewStatuses', { statuses: [status] }))
},
unpinStatus({ rootState, dispatch }, statusId) {
rootState.api.backendInteractor
return rootState.api.backendInteractor
.unpinOwnStatus({ id: statusId })
.then((status) => dispatch('addNewStatuses', { statuses: [status] }))
},
@ -822,7 +822,7 @@ const statuses = {
'addNewUsers',
data.statuses.map((s) => s.user).filter((u) => u),
)
store.commit('addNewStatuses', { statuses: data.statuses })
data.statuses = store.commit('addNewStatuses', { statuses: data.statuses })
return data
})
},

View file

@ -133,6 +133,23 @@ export const useInterfaceStore = defineStore('interface', {
}
}
},
setSettingsModalState(newState) {
const oldState = this.settingsModalState
const legal = (() => {
switch (oldState) {
case 'minimized':
return true
case 'visible':
return true
case 'hidden':
return newState === 'visible'
}
})()
if (legal) {
this.settingsModalState = newState
}
},
togglePeekSettingsModal() {
switch (this.settingsModalState) {
case 'minimized':
@ -141,8 +158,10 @@ export const useInterfaceStore = defineStore('interface', {
case 'visible':
this.settingsModalState = 'minimized'
return
case 'hidden':
return
default:
throw new Error('Illegal minimization state of settings modal')
throw new Error(`Illegal minimization state of settings modal: ${this.settingsModalState}`)
}
},
clearSettingsModalTargetTab() {