mirror of
https://akkoma.dev/AkkomaGang/akkoma-fe
synced 2025-06-15 18:59:14 +08:00
refactor: extract scope logic into shared module
This commit is contained in:
parent
9787f43343
commit
4734e9668d
3 changed files with 52 additions and 30 deletions
|
@ -10,6 +10,7 @@ import fileTypeService from '../../services/file_type/file_type.service.js'
|
|||
import { findOffset } from '../../services/offset_finder/offset_finder.service.js'
|
||||
import { reject, map, uniqBy, debounce } from 'lodash'
|
||||
import { usePostLanguageOptions } from 'src/lib/post_language'
|
||||
import scopeUtils from 'src/lib/scope_utils.js'
|
||||
import suggestor from '../emoji_input/suggestor.js'
|
||||
import { mapGetters, mapState } from 'vuex'
|
||||
import Checkbox from '../checkbox/checkbox.vue'
|
||||
|
@ -762,15 +763,9 @@ const PostStatusForm = {
|
|||
this.$store.dispatch('openSettingsModalTab', 'profile')
|
||||
},
|
||||
suggestedVisibility () {
|
||||
if (this.copyMessageScope) {
|
||||
if (this.copyMessageScope === 'direct') {
|
||||
return this.copyMessageScope
|
||||
}
|
||||
if (this.copyMessageScope !== 'public' && this.$store.state.users.currentUser.default_scope !== 'private') {
|
||||
return this.copyMessageScope
|
||||
}
|
||||
}
|
||||
return this.$store.state.users.currentUser.default_scope
|
||||
const maxScope = this.copyMessageScope
|
||||
const defaultScope = this.$store.state.users.currentUser.default_scope
|
||||
return scopeUtils.negotiate(defaultScope, maxScope)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,6 +6,8 @@ import {
|
|||
faGlobe
|
||||
} from '@fortawesome/free-solid-svg-icons'
|
||||
|
||||
import scopeUtils from 'src/lib/scope_utils.js'
|
||||
|
||||
library.add(
|
||||
faEnvelope,
|
||||
faGlobe,
|
||||
|
@ -13,25 +15,18 @@ library.add(
|
|||
faLockOpen
|
||||
)
|
||||
|
||||
const SCOPE_LEVELS = {
|
||||
'direct': 0,
|
||||
'private': 1,
|
||||
'local': 2,
|
||||
'unlisted': 2,
|
||||
'public': 3
|
||||
}
|
||||
|
||||
const ScopeSelector = {
|
||||
props: [
|
||||
'showAll',
|
||||
'userDefault',
|
||||
// scope of parent object
|
||||
'originalScope',
|
||||
'initialScope',
|
||||
'onScopeChange'
|
||||
],
|
||||
data () {
|
||||
return {
|
||||
currentScope: this.initialScope
|
||||
currentScope: this.initialscope;
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
@ -39,16 +34,16 @@ const ScopeSelector = {
|
|||
return !this.showPublic && !this.showUnlisted && !this.showPrivate && !this.showDirect
|
||||
},
|
||||
showPublic () {
|
||||
return this.originalScope !== 'direct' && this.shouldShow('public')
|
||||
return this.shouldShow('public')
|
||||
},
|
||||
showLocal () {
|
||||
return this.originalScope !== 'direct' && this.shouldShow('local')
|
||||
return this.shouldShow('local')
|
||||
},
|
||||
showUnlisted () {
|
||||
return this.originalScope !== 'direct' && this.shouldShow('unlisted')
|
||||
return this.shouldShow('unlisted')
|
||||
},
|
||||
showPrivate () {
|
||||
return this.originalScope !== 'direct' && this.shouldShow('private')
|
||||
return this.shouldShow('private')
|
||||
},
|
||||
showDirect () {
|
||||
return this.shouldShow('direct')
|
||||
|
@ -65,15 +60,10 @@ const ScopeSelector = {
|
|||
},
|
||||
methods: {
|
||||
shouldShow (scope) {
|
||||
if (!this.originalScope) {
|
||||
if (!this.originalScope)
|
||||
return true
|
||||
}
|
||||
|
||||
if (this.originalScope === 'local') {
|
||||
return scope === 'direct' || scope === 'local'
|
||||
}
|
||||
|
||||
return SCOPE_LEVELS[scope] <= SCOPE_LEVELS[this.originalScope]
|
||||
else
|
||||
return scopeUtils.compare(scope, this.originalScope) <= 0
|
||||
},
|
||||
changeVis (scope) {
|
||||
this.currentScope = scope
|
||||
|
|
37
src/lib/scope_utils.js
Normal file
37
src/lib/scope_utils.js
Normal file
|
@ -0,0 +1,37 @@
|
|||
const SCOPE_LEVELS = {
|
||||
'direct': 0,
|
||||
'private': 1,
|
||||
'unlisted': 2,
|
||||
'local': 3,
|
||||
'public': 3
|
||||
}
|
||||
|
||||
export default {
|
||||
negotiate: (defaultScope, maxScope) => {
|
||||
if (!maxScope)
|
||||
return defaultScope;
|
||||
|
||||
if (maxScope === 'local')
|
||||
return defaultScope === 'direct' ? defaultScope : 'local';
|
||||
|
||||
if (SCOPE_LEVELS[defaultScope] <= SCOPE_LEVELS[maxScope])
|
||||
return defaultScope;
|
||||
else
|
||||
return maxScope;
|
||||
},
|
||||
compare: (sa, sb) => {
|
||||
if (sa === 'local') {
|
||||
if (sb === 'direct')
|
||||
return 1;
|
||||
else if (sb === sa)
|
||||
return 0;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (sa === sb)
|
||||
return 0;
|
||||
|
||||
return SCOPE_LEVELS[sa] < SCOPE_LEVELS[sb] ? -1 : 1;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue