1
0

feat: improve store and model typing

This commit is contained in:
Dominik Pschenitschni
2022-07-21 00:42:36 +02:00
parent c9e85cb52b
commit 3766b5e51b
98 changed files with 1050 additions and 507 deletions

View File

@ -68,11 +68,11 @@ import SavedFilterService from '@/services/savedFilter'
import {objectToSnakeCase} from '@/helpers/case'
import {getSavedFilterIdFromListId} from '@/helpers/savedFilter'
import type ListModel from '@/models/list'
import type { IList } from '@/models/list'
const {t} = useI18n({useScope: 'global'})
function useSavedFilter(listId: MaybeRef<ListModel['id']>) {
function useSavedFilter(listId: MaybeRef<IList['id']>) {
const filterService = shallowRef(new SavedFilterService())
const filter = ref(new SavedFilterModel())

View File

@ -113,7 +113,7 @@
import {defineComponent} from 'vue'
import {mapState} from 'vuex'
import LabelModel from '../../models/label'
import LabelModel, { type ILabel } from '../../models/label'
import {LOADING, LOADING_MODULE} from '@/store/mutation-types'
import BaseButton from '@/components/base/BaseButton.vue'
@ -150,7 +150,7 @@ export default defineComponent({
loading: state => state[LOADING] && state[LOADING_MODULE] === 'labels',
}),
methods: {
deleteLabel(label: LabelModel) {
deleteLabel(label: ILabel) {
this.showDeleteModal = false
this.isLabelEdit = false
return this.$store.dispatch('labels/deleteLabel', label)
@ -158,7 +158,7 @@ export default defineComponent({
editLabelSubmit() {
return this.$store.dispatch('labels/updateLabel', this.labelEditLabel)
},
editLabel(label: LabelModel) {
editLabel(label: ILabel) {
if (label.createdBy.id !== this.userInfo.id) {
return
}
@ -180,7 +180,7 @@ export default defineComponent({
this.editorActive = false
this.$nextTick(() => this.editorActive = true)
},
showDeleteDialoge(label: LabelModel) {
showDeleteDialoge(label: ILabel) {
this.labelToDelete = label
this.showDeleteModal = true
},

View File

@ -153,9 +153,9 @@ import {ALPHABETICAL_SORT} from '@/components/list/partials/filters.vue'
import draggable from 'zhyswan-vuedraggable'
import {calculateItemPosition} from '../../helpers/calculateItemPosition'
import type TaskModel from '@/models/task'
import type { ITask } from '@/models/task'
function sortTasks(tasks: TaskModel[]) {
function sortTasks(tasks: ITask[]) {
if (tasks === null || tasks === []) {
return
}
@ -274,7 +274,7 @@ export default defineComponent({
focusNewTaskInput() {
this.$refs.addTask.focusTaskInput()
},
updateTaskList(task: TaskModel) {
updateTaskList(task: ITask) {
if ( this.isAlphabeticalSorting ) {
// reload tasks with current filter and sorting
this.loadTasks(1, undefined, undefined, true)
@ -288,11 +288,11 @@ export default defineComponent({
this.$store.commit(HAS_TASKS, true)
},
editTask(id: TaskModel['id']) {
editTask(id: ITask['id']) {
this.taskEditTask = {...this.tasks.find(t => t.id === parseInt(id))}
this.isTaskEdit = true
},
updateTasks(updatedTask: TaskModel) {
updateTasks(updatedTask: ITask) {
for (const t in this.tasks) {
if (this.tasks[t].id === updatedTask.id) {
this.tasks[t] = updatedTask

View File

@ -197,7 +197,7 @@ import Pagination from '@/components/misc/pagination.vue'
import Popup from '@/components/misc/popup.vue'
import {useTaskList} from '@/composables/taskList'
import type TaskModel from '@/models/task'
import type { ITask } from '@/models/task'
const ACTIVE_COLUMNS_DEFAULT = {
id: true,
@ -253,7 +253,7 @@ const {
currentPage,
sortByParam,
} = taskList
const tasks: Ref<TaskModel[]> = taskList.tasks
const tasks: Ref<ITask[]> = taskList.tasks
Object.assign(params.value, {
filter_by: [],

View File

@ -30,7 +30,7 @@ import CreateEdit from '@/components/misc/create-edit.vue'
import Multiselect from '@/components/input/multiselect.vue'
import ListDuplicateModel from '@/models/listDuplicateModel'
import NamespaceModel from '@/models/namespace'
import type {INamespace} from '@/models/namespace'
import {success} from '@/message'
import {useTitle} from '@/composables/useTitle'
@ -44,9 +44,9 @@ const {
findNamespaces,
} = useNameSpaceSearch()
const selectedNamespace = ref<NamespaceModel>()
const selectedNamespace = ref<INamespace>()
function selectNamespace(namespace: NamespaceModel) {
function selectNamespace(namespace: INamespace) {
selectedNamespace.value = namespace
}

View File

@ -80,14 +80,14 @@ import ColorPicker from '@/components/input/colorPicker.vue'
import CreateEdit from '@/components/misc/create-edit.vue'
import {CURRENT_LIST} from '@/store/mutation-types'
import type ListModel from '@/models/list'
import type { IList } from '@/models/list'
import { useList } from '@/composables/useList'
import { useTitle } from '@/composables/useTitle'
const props = defineProps({
listId: {
type: Number as PropType<ListModel['id']>,
type: Number as PropType<IList['id']>,
required: true,
},
})

View File

@ -49,7 +49,6 @@ import {useStore} from 'vuex'
import {useRoute, useRouter} from 'vue-router'
import {useI18n} from 'vue-i18n'
import type TaskModel from '@/models/task'
import {formatDate} from '@/helpers/time/formatDate'
import {setTitle} from '@/helpers/setTitle'
@ -59,13 +58,14 @@ import DatepickerWithRange from '@/components/date/datepickerWithRange.vue'
import {DATE_RANGES} from '@/components/date/dateRanges'
import {LOADING, LOADING_MODULE} from '@/store/mutation-types'
import LlamaCool from '@/assets/llama-cool.svg?component'
import type { ITask } from '@/models/task'
const store = useStore()
const route = useRoute()
const router = useRouter()
const {t} = useI18n({useScope: 'global'})
const tasks = ref<TaskModel[]>([])
const tasks = ref<ITask[]>([])
const showNothingToDo = ref<boolean>(false)
setTimeout(() => showNothingToDo.value = true, 100)
@ -182,7 +182,7 @@ async function loadPendingTasks(from: string, to: string) {
}
// FIXME: this modification should happen in the store
function updateTasks(updatedTask: TaskModel) {
function updateTasks(updatedTask: ITask) {
for (const t in tasks.value) {
if (tasks.value[t].id === updatedTask.id) {
tasks.value[t] = updatedTask

View File

@ -425,7 +425,7 @@
import {defineComponent} from 'vue'
import TaskService from '../../services/task'
import TaskModel from '../../models/task'
import TaskModel, { type ITask } from '@/models/task'
import { PRIORITIES as priorites } from '@/models/constants/priorities'
import {RIGHTS as rights} from '@/models/constants/rights'
@ -452,10 +452,10 @@ import {CURRENT_LIST} from '@/store/mutation-types'
import {uploadFile} from '@/helpers/attachments'
import ChecklistSummary from '../../components/tasks/partials/checklist-summary.vue'
import CreatedUpdated from '@/components/tasks/partials/createdUpdated.vue'
import type ListModel from '@/models/list'
import { setTitle } from '@/helpers/setTitle'
import {getNamespaceTitle} from '@/helpers/getNamespaceTitle'
import {getListTitle} from '@/helpers/getListTitle'
import type { IList } from '@/models/list'
function scrollIntoView(el) {
if (!el) {
@ -597,7 +597,7 @@ export default defineComponent({
return uploadFile(this.taskId, ...args)
},
async loadTask(taskId: TaskModel['id']) {
async loadTask(taskId: ITask['id']) {
if (taskId === undefined) {
return
}
@ -703,7 +703,7 @@ export default defineComponent({
this.saveTask(true, this.toggleTaskDone)
},
async changeList(list: ListModel) {
async changeList(list: IList) {
this.$store.commit('kanban/removeTaskInBucket', this.task)
this.task.listId = list.id
await this.saveTask()

View File

@ -162,23 +162,23 @@
<script lang="ts" setup>
import {computed, ref} from 'vue'
import {useI18n} from 'vue-i18n'
import Editor from '@/components/input/AsyncEditor'
import {useStore} from 'vuex'
import TeamService from '../../services/team'
import type TeamModel from '../../models/team'
import TeamMemberService from '../../services/teamMember'
import type TeamMemberModel from '../../models/teamMember'
import type UserModel from '../../models/user'
import UserService from '../../services/user'
import TeamService from '@/services/team'
import TeamMemberService from '@/services/teamMember'
import UserService from '@/services/user'
import {RIGHTS as Rights} from '@/models/constants/rights'
import Multiselect from '@/components/input/multiselect.vue'
import {useRoute, useRouter} from 'vue-router'
import {useTitle} from '@/composables/useTitle'
import {useI18n} from 'vue-i18n'
import {success} from '@/message'
import type { ITeam } from '@/models/team'
import type { IUser } from '@/models/user'
import type { ITeamMember } from '@/models/teamMember'
const store = useStore()
const route = useRoute()
@ -198,11 +198,11 @@ const teamService = ref<TeamService>(new TeamService())
const teamMemberService = ref<TeamMemberService>(new TeamMemberService())
const userService = ref<UserService>(new UserService())
const team = ref<TeamModel>()
const team = ref<ITeam>()
const teamId = computed(() => route.params.id)
const memberToDelete = ref<TeamMemberModel>()
const newMember = ref<UserModel>()
const foundUsers = ref<UserModel[]>()
const memberToDelete = ref<ITeamMember>()
const newMember = ref<IUser>()
const foundUsers = ref<IUser[]>()
const showDeleteModal = ref(false)
const showUserDeleteModal = ref(false)
@ -257,7 +257,7 @@ async function addUser() {
success({message: t('team.edit.userAddedSuccess')})
}
async function toggleUserType(member: TeamMemberModel) {
async function toggleUserType(member: ITeamMember) {
// FIXME: direct manipulation
member.admin = !member.admin
member.teamId = teamId.value
@ -282,7 +282,7 @@ async function findUser(query: string) {
}
const users = await userService.value.getAll({}, {s: query})
foundUsers.value = users.filter((u: UserModel) => u.id !== userInfo.value.id)
foundUsers.value = users.filter((u: IUser) => u.id !== userInfo.value.id)
}
</script>

View File

@ -77,8 +77,8 @@ import {success} from '@/message'
import BaseButton from '@/components/base/BaseButton.vue'
import Message from '@/components/misc/message.vue'
import CaldavTokenService from '@/services/caldavToken'
import type CaldavTokenModel from '@/models/caldavToken'
import { formatDateShort } from '@/helpers/time/formatDate'
import type { ICaldavToken } from '@/models/caldavToken'
const copy = useCopyToClipboard()
@ -86,19 +86,19 @@ const {t} = useI18n({useScope: 'global'})
useTitle(() => `${t('user.settings.caldav.title')} - ${t('user.settings.title')}`)
const service = shallowReactive(new CaldavTokenService())
const tokens = ref<CaldavTokenModel[]>([])
const tokens = ref<ICaldavToken[]>([])
service.getAll().then((result: CaldavTokenModel[]) => {
service.getAll().then((result: ICaldavToken[]) => {
tokens.value = result
})
const newToken = ref<CaldavTokenModel>()
const newToken = ref<ICaldavToken>()
async function createToken() {
newToken.value = await service.create({}) as CaldavTokenModel
newToken.value = await service.create({}) as ICaldavToken
tokens.value.push(newToken.value)
}
async function deleteToken(token: CaldavTokenModel) {
async function deleteToken(token: ICaldavToken) {
const r = await service.delete(token)
tokens.value = tokens.value.filter(({id}) => id !== token.id)
success(r)