fix: introduce a ListView type to properly type all available list views
This commit is contained in:
parent
d91d1fecf1
commit
23598dd2ee
3 changed files with 20 additions and 13 deletions
|
@ -201,13 +201,16 @@ import {useStore} from '@/store'
|
||||||
import {useI18n} from 'vue-i18n'
|
import {useI18n} from 'vue-i18n'
|
||||||
|
|
||||||
import {RIGHTS} from '@/constants/rights'
|
import {RIGHTS} from '@/constants/rights'
|
||||||
import LinkShareModel, {type ILinkShare} from '@/models/linkShare'
|
import LinkShareModel from '@/models/linkShare'
|
||||||
|
import type {ILinkShare} from '@/modelTypes/ILinkShare'
|
||||||
|
|
||||||
import LinkShareService from '@/services/linkShare'
|
import LinkShareService from '@/services/linkShare'
|
||||||
|
|
||||||
import {useCopyToClipboard} from '@/composables/useCopyToClipboard'
|
import {useCopyToClipboard} from '@/composables/useCopyToClipboard'
|
||||||
import {success} from '@/message'
|
import {success} from '@/message'
|
||||||
import type {IList} from '@/models/list'
|
import type {IList} from '@/modelTypes/IList'
|
||||||
|
import type {ListView} from '@/types/ListView'
|
||||||
|
import {LIST_VIEWS} from '@/types/ListView'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
listId: {
|
listId: {
|
||||||
|
@ -227,9 +230,7 @@ const showDeleteModal = ref(false)
|
||||||
const linkIdToDelete = ref(0)
|
const linkIdToDelete = ref(0)
|
||||||
const showNewForm = ref(false)
|
const showNewForm = ref(false)
|
||||||
|
|
||||||
interface SelectedViewMapper {
|
type SelectedViewMapper = Record<IList['id'], ListView>
|
||||||
[listId: number]: string,
|
|
||||||
}
|
|
||||||
|
|
||||||
const selectedView = ref<SelectedViewMapper>({})
|
const selectedView = ref<SelectedViewMapper>({})
|
||||||
|
|
||||||
|
@ -285,7 +286,7 @@ async function remove(listId: IList['id']) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getShareLink(hash: string, view: string = 'list') {
|
function getShareLink(hash: string, view: ListView = LIST_VIEWS.LIST) {
|
||||||
return frontendUrl.value + 'share/' + hash + '/auth?view=' + view
|
return frontendUrl.value + 'share/' + hash + '/auth?view=' + view
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
8
src/types/ListView.ts
Normal file
8
src/types/ListView.ts
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
export const LIST_VIEWS = {
|
||||||
|
LIST: 'list',
|
||||||
|
GANTT: 'gantt',
|
||||||
|
TABLE: 'table',
|
||||||
|
KANBAN: 'kanban',
|
||||||
|
} as const
|
||||||
|
|
||||||
|
export type ListView = typeof LIST_VIEWS[keyof typeof LIST_VIEWS]
|
|
@ -41,6 +41,7 @@ import {useTitle} from '@vueuse/core'
|
||||||
|
|
||||||
import Message from '@/components/misc/message.vue'
|
import Message from '@/components/misc/message.vue'
|
||||||
import {LOGO_VISIBLE} from '@/store/mutation-types'
|
import {LOGO_VISIBLE} from '@/store/mutation-types'
|
||||||
|
import {LIST_VIEWS, type ListView} from '@/types/ListView'
|
||||||
|
|
||||||
const {t} = useI18n({useScope: 'global'})
|
const {t} = useI18n({useScope: 'global'})
|
||||||
useTitle(t('sharing.authenticating'))
|
useTitle(t('sharing.authenticating'))
|
||||||
|
@ -80,13 +81,10 @@ function useAuth() {
|
||||||
: true
|
: true
|
||||||
store.commit(LOGO_VISIBLE, logoVisible)
|
store.commit(LOGO_VISIBLE, logoVisible)
|
||||||
|
|
||||||
let view = 'list'
|
const view = route.query.view && Object.values(LIST_VIEWS).includes(route.query.view as ListView)
|
||||||
if (route.query.view &&
|
? route.query.view
|
||||||
(route.query.view === 'gantt' ||
|
: 'list'
|
||||||
route.query.view === 'kanban' ||
|
|
||||||
route.query.view === 'table')) {
|
|
||||||
view = route.query.view
|
|
||||||
}
|
|
||||||
router.push({name: `list.${view}`, params: {listId}})
|
router.push({name: `list.${view}`, params: {listId}})
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
if (e.response?.data?.code === 13001) {
|
if (e.response?.data?.code === 13001) {
|
||||||
|
|
Loading…
Reference in a new issue