This commit is contained in:
parent
61427987c2
commit
1a11b43ca8
@ -156,8 +156,8 @@ import {calculateItemPosition} from '@/helpers/calculateItemPosition'
|
||||
import {getNamespaceTitle} from '@/helpers/getNamespaceTitle'
|
||||
import {getListTitle} from '@/helpers/getListTitle'
|
||||
import {useEventListener} from '@vueuse/core'
|
||||
import type { IList } from '@/models/list'
|
||||
import type { INamespace } from '@/models/namespace'
|
||||
import type {IList} from '@/modelTypes/IList'
|
||||
import type {INamespace} from '@/modelTypes/INamespace'
|
||||
|
||||
const drag = ref(false)
|
||||
const dragOptions = {
|
||||
|
@ -83,8 +83,8 @@ import {getSavedFilterIdFromListId} from '@/helpers/savedFilter'
|
||||
import Dropdown from '@/components/misc/dropdown.vue'
|
||||
import DropdownItem from '@/components/misc/dropdown-item.vue'
|
||||
import TaskSubscription from '@/components/misc/subscription.vue'
|
||||
import type {IList} from '@/models/list'
|
||||
import type { ISubscription } from '@/models/subscription'
|
||||
import type {IList} from '@/modelTypes/IList'
|
||||
import type {ISubscription} from '@/modelTypes/ISubscription'
|
||||
|
||||
const props = defineProps({
|
||||
list: {
|
||||
|
@ -45,7 +45,7 @@ import {getBlobFromBlurHash} from '@/helpers/getBlobFromBlurHash'
|
||||
import {colorIsDark} from '@/helpers/color/colorIsDark'
|
||||
|
||||
import BaseButton from '@/components/base/BaseButton.vue'
|
||||
import type { IList } from '@/models/list'
|
||||
import type {IList} from '@/modelTypes/IList'
|
||||
|
||||
const background = ref<string | null>(null)
|
||||
const backgroundLoading = ref(false)
|
||||
|
@ -39,7 +39,8 @@ import BaseButton from '@/components/base/BaseButton.vue'
|
||||
import DropdownItem from '@/components/misc/dropdown-item.vue'
|
||||
|
||||
import SubscriptionService from '@/services/subscription'
|
||||
import SubscriptionModel, { type ISubscription } from '@/models/subscription'
|
||||
import SubscriptionModel from '@/models/subscription'
|
||||
import type {ISubscription} from '@/modelTypes/ISubscription'
|
||||
|
||||
import {success} from '@/message'
|
||||
|
||||
|
@ -59,7 +59,8 @@ import {ref, onMounted, type PropType} from 'vue'
|
||||
import Dropdown from '@/components/misc/dropdown.vue'
|
||||
import DropdownItem from '@/components/misc/dropdown-item.vue'
|
||||
import TaskSubscription from '@/components/misc/subscription.vue'
|
||||
import type { INamespace } from '@/models/namespace'
|
||||
import type {INamespace} from '@/modelTypes/INamespace'
|
||||
import type {ISubscription} from '@/modelTypes/ISubscription'
|
||||
|
||||
const props = defineProps({
|
||||
namespace: {
|
||||
@ -68,7 +69,7 @@ const props = defineProps({
|
||||
},
|
||||
})
|
||||
|
||||
const subscription = ref(null)
|
||||
const subscription = ref<ISubscription | null>(null)
|
||||
onMounted(() => {
|
||||
subscription.value = props.namespace.subscription
|
||||
})
|
||||
|
@ -181,13 +181,15 @@ import {useStore} from '@/store'
|
||||
import {useI18n} from 'vue-i18n'
|
||||
|
||||
import {RIGHTS} from '@/constants/rights'
|
||||
import LinkShareModel, { type ILinkShare } from '@/models/linkShare'
|
||||
import LinkShareModel from '@/models/linkShare'
|
||||
|
||||
import type {ILinkShare} from '@/modelTypes/ILinkShare'
|
||||
import type {IList} from '@/modelTypes/IList'
|
||||
|
||||
import LinkShareService from '@/services/linkShare'
|
||||
|
||||
import {useCopyToClipboard} from '@/composables/useCopyToClipboard'
|
||||
import {success} from '@/message'
|
||||
import type { IList } from '@/models/list'
|
||||
|
||||
const props = defineProps({
|
||||
listId: {
|
||||
|
@ -143,22 +143,29 @@ import {useStore} from '@/store'
|
||||
import {useI18n} from 'vue-i18n'
|
||||
|
||||
import UserNamespaceService from '@/services/userNamespace'
|
||||
import UserNamespaceModel, { type IUserNamespace } from '@/models/userNamespace'
|
||||
import UserNamespaceModel from '@/models/userNamespace'
|
||||
import type {IUserNamespace} from '@/modelTypes/IUserNamespace'
|
||||
|
||||
import UserListService from '@/services/userList'
|
||||
import UserListModel, { type IUserList } from '@/models/userList'
|
||||
import UserListModel from '@/models/userList'
|
||||
import type {IUserList} from '@/modelTypes/IUserList'
|
||||
|
||||
import UserService from '@/services/user'
|
||||
import UserModel, { type IUser } from '@/models/user'
|
||||
import UserModel from '@/models/user'
|
||||
import type {IUser} from '@/modelTypes/IUser'
|
||||
|
||||
import TeamNamespaceService from '@/services/teamNamespace'
|
||||
import TeamNamespaceModel, { type ITeamNamespace } from '@/models/teamNamespace'
|
||||
import TeamNamespaceModel from '@/models/teamNamespace'
|
||||
import type { ITeamNamespace } from '@/modelTypes/ITeamNamespace'
|
||||
|
||||
import TeamListService from '@/services/teamList'
|
||||
import TeamListModel, { type ITeamList } from '@/models/teamList'
|
||||
import TeamListModel from '@/models/teamList'
|
||||
import type { ITeamList } from '@/modelTypes/ITeamList'
|
||||
|
||||
import TeamService from '@/services/team'
|
||||
import TeamModel, { type ITeam } from '@/models/team'
|
||||
import TeamModel from '@/models/team'
|
||||
import type {ITeam} from '@/modelTypes/ITeam'
|
||||
|
||||
|
||||
import {RIGHTS} from '@/constants/rights'
|
||||
import Multiselect from '@/components/input/multiselect.vue'
|
||||
|
@ -83,7 +83,8 @@ import {useI18n} from 'vue-i18n'
|
||||
import Editor from '@/components/input/AsyncEditor'
|
||||
|
||||
import TaskService from '@/services/task'
|
||||
import TaskModel, { type ITask } from '@/models/task'
|
||||
import TaskModel from '@/models/task'
|
||||
import type {ITask} from '@/modelTypes/ITask'
|
||||
import EditLabels from './partials/editLabels.vue'
|
||||
import Reminders from './partials/reminders.vue'
|
||||
import ColorPicker from '../input/colorPicker.vue'
|
||||
|
@ -147,7 +147,8 @@
|
||||
import {defineComponent} from 'vue'
|
||||
|
||||
import AttachmentService from '../../../services/attachment'
|
||||
import AttachmentModel, { type IAttachment } from '@/models/attachment'
|
||||
import AttachmentModel from '@/models/attachment'
|
||||
import type {IAttachment} from '@/modelTypes/IAttachment'
|
||||
import User from '@/components/misc/user.vue'
|
||||
import {mapState} from 'vuex'
|
||||
|
||||
@ -155,8 +156,8 @@ import { useCopyToClipboard } from '@/composables/useCopyToClipboard'
|
||||
import { uploadFiles, generateAttachmentUrl } from '@/helpers/attachments'
|
||||
import {formatDate, formatDateSince, formatDateLong} from '@/helpers/time/formatDate'
|
||||
|
||||
import BaseButton from '@/components/base/BaseButton'
|
||||
import type { IFile } from '@/models/file'
|
||||
import BaseButton from '@/components/base/BaseButton.vue'
|
||||
import type { IFile } from '@/modelTypes/IFile'
|
||||
import { getHumanSize } from '@/helpers/getHumanSize'
|
||||
|
||||
export default defineComponent({
|
||||
|
@ -14,7 +14,7 @@ import {computed, type PropType} from 'vue'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
|
||||
import {getChecklistStatistics} from '@/helpers/checklistFromText'
|
||||
import type {ITask} from '@/models/task'
|
||||
import type {ITask} from '@/modelTypes/ITask'
|
||||
|
||||
const props = defineProps({
|
||||
task: {
|
||||
|
@ -159,12 +159,15 @@ import {useI18n} from 'vue-i18n'
|
||||
import Editor from '@/components/input/AsyncEditor'
|
||||
|
||||
import TaskCommentService from '@/services/taskComment'
|
||||
import TaskCommentModel, { type ITaskComment } from '@/models/taskComment'
|
||||
import TaskCommentModel from '@/models/taskComment'
|
||||
|
||||
import type {ITaskComment} from '@/modelTypes/ITaskComment'
|
||||
import type {ITask} from '@/modelTypes/ITask'
|
||||
|
||||
import {uploadFile} from '@/helpers/attachments'
|
||||
import {success} from '@/message'
|
||||
import {formatDateLong, formatDateSince} from '@/helpers/time/formatDate'
|
||||
|
||||
import type { ITask } from '@/models/task'
|
||||
const props = defineProps({
|
||||
taskId: {
|
||||
type: Number,
|
||||
|
@ -28,7 +28,7 @@
|
||||
|
||||
<script lang="ts" setup>
|
||||
import {computed, toRefs, type PropType} from 'vue'
|
||||
import type { ITask } from '@/models/task'
|
||||
import type {ITask} from '@/modelTypes/ITask'
|
||||
import {formatISO, formatDateLong, formatDateSince} from '@/helpers/time/formatDate'
|
||||
|
||||
const props = defineProps({
|
||||
|
@ -44,7 +44,7 @@ import {useI18n} from 'vue-i18n'
|
||||
import flatPickr from 'vue-flatpickr-component'
|
||||
|
||||
import TaskService from '@/services/task'
|
||||
import { type ITask } from '@/models/task'
|
||||
import type {ITask} from '@/modelTypes/ITask'
|
||||
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
|
@ -36,7 +36,7 @@ import {useStore} from '@/store'
|
||||
|
||||
import Editor from '@/components/input/AsyncEditor'
|
||||
|
||||
import type { ITask } from '@/models/task'
|
||||
import type {ITask} from '@/modelTypes/ITask'
|
||||
|
||||
|
||||
const props = defineProps({
|
||||
|
@ -34,12 +34,14 @@
|
||||
<script setup lang="ts">
|
||||
import {ref, computed, type PropType} from 'vue'
|
||||
import {useStore} from '@/store'
|
||||
import {useRouter} from 'vue-router'
|
||||
|
||||
import BaseButton from '@/components/base/BaseButton.vue'
|
||||
import Done from '@/components/misc/Done.vue'
|
||||
import type {ITask} from '@/models/task'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { useCopyToClipboard } from '@/composables/useCopyToClipboard'
|
||||
|
||||
import {useCopyToClipboard} from '@/composables/useCopyToClipboard'
|
||||
|
||||
import type {ITask} from '@/modelTypes/ITask'
|
||||
|
||||
const props = defineProps({
|
||||
task: {
|
||||
|
@ -74,7 +74,8 @@ import User from '../../../components/misc/user.vue'
|
||||
import Done from '@/components/misc/Done.vue'
|
||||
import Labels from '../../../components/tasks/partials/labels.vue'
|
||||
import ChecklistSummary from './checklist-summary.vue'
|
||||
import {TASK_DEFAULT_COLOR, type ITask} from '@/models/task'
|
||||
import {TASK_DEFAULT_COLOR} from '@/models/task'
|
||||
import type {ITask} from '@/modelTypes/ITask'
|
||||
|
||||
import {formatDateLong, formatISO, formatDateSince} from '@/helpers/time/formatDate'
|
||||
import {colorIsDark} from '@/helpers/color/colorIsDark'
|
||||
|
@ -11,8 +11,8 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { PropType } from 'vue'
|
||||
import type { ILabel } from '@/models/label'
|
||||
import type {PropType} from 'vue'
|
||||
import type {ILabel} from '@/modelTypes/ILabel'
|
||||
|
||||
defineProps({
|
||||
labels: {
|
||||
|
@ -21,7 +21,8 @@ import {reactive, ref, watch} from 'vue'
|
||||
import type {PropType} from 'vue'
|
||||
import {useStore} from '@/store'
|
||||
import {useI18n} from 'vue-i18n'
|
||||
import ListModel, { type IList } from '@/models/list'
|
||||
import ListModel from '@/models/list'
|
||||
import type {IList} from '@/modelTypes/IList'
|
||||
import Multiselect from '@/components/input/multiselect.vue'
|
||||
|
||||
const props = defineProps({
|
||||
|
@ -98,7 +98,8 @@
|
||||
<script lang="ts">
|
||||
import {defineComponent, type PropType} from 'vue'
|
||||
|
||||
import TaskModel, { type ITask } from '../../../models/task'
|
||||
import TaskModel from '@/models/task'
|
||||
import type {ITask} from '@/modelTypes/ITask'
|
||||
import PriorityLabel from './priorityLabel.vue'
|
||||
import TaskService from '../../../services/task'
|
||||
import Labels from '@/components/tasks/partials/labels.vue'
|
||||
|
@ -1,5 +1,6 @@
|
||||
import AttachmentModel, { type IAttachment } from '@/models/attachment'
|
||||
import type {IFile} from '@/models/file'
|
||||
import AttachmentModel from '@/models/attachment'
|
||||
import type {IAttachment} from '@/modelTypes/IAttachment'
|
||||
import type {IFile} from '@/modelTypes/IFile'
|
||||
|
||||
import AttachmentService from '@/services/attachment'
|
||||
import { store } from '@/store'
|
||||
|
@ -1,5 +1,5 @@
|
||||
import {i18n} from '@/i18n'
|
||||
import type { IList } from '@/models/list'
|
||||
import type {IList} from '@/modelTypes/IList'
|
||||
|
||||
export function getListTitle(l: IList) {
|
||||
if (l.id === -1) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
import {i18n} from '@/i18n'
|
||||
import type {INamespace} from '@/models/namespace'
|
||||
import type {INamespace} from '@/modelTypes/INamespace'
|
||||
|
||||
export const getNamespaceTitle = (n: INamespace) => {
|
||||
if (n.id === -1) {
|
||||
|
@ -1,7 +1,7 @@
|
||||
import {createNewIndexer} from '../indexes'
|
||||
|
||||
import type {LabelState} from '@/store/types'
|
||||
import type {ILabel} from '@/models/label'
|
||||
import type {ILabel} from '@/modelTypes/ILabel'
|
||||
|
||||
const {search} = createNewIndexer('labels', ['title', 'description'])
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import type {IList} from '@/models/list'
|
||||
import type {IList} from '@/modelTypes/IList'
|
||||
|
||||
const key = 'collapsedBuckets'
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import type {IList} from '@/models/list'
|
||||
import type {IList} from '@/modelTypes/IList'
|
||||
|
||||
export function getSavedFilterIdFromListId(listId: IList['id']) {
|
||||
let filterId = listId * -1 - 1
|
||||
|
@ -5,7 +5,7 @@ import type { IUser } from '@/modelTypes/IUser'
|
||||
import type { IFile } from '@/modelTypes/IFile'
|
||||
import type { IAttachment } from '@/modelTypes/IAttachment'
|
||||
|
||||
export default class AttachmentModel extends AbstractModel implements IAttachment {
|
||||
export default class AttachmentModel extends AbstractModel<IAttachment> implements IAttachment {
|
||||
id = 0
|
||||
taskId = 0
|
||||
createdBy: IUser = UserModel
|
||||
|
@ -1,7 +1,7 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
import type { IAvatar } from '@/modelTypes/IAvatar'
|
||||
|
||||
export default class AvatarModel extends AbstractModel implements IAvatar {
|
||||
export default class AvatarModel extends AbstractModel<IAvatar> implements IAvatar {
|
||||
avatarProvider: IAvatar['avatarProvider'] = 'default'
|
||||
|
||||
constructor(data: Partial<IAvatar>) {
|
||||
|
@ -1,7 +1,7 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
import type {IBackgroundImage} from '@/modelTypes/IBackgroundImage'
|
||||
|
||||
export default class BackgroundImageModel extends AbstractModel implements IBackgroundImage {
|
||||
export default class BackgroundImageModel extends AbstractModel<IBackgroundImage> implements IBackgroundImage {
|
||||
id = 0
|
||||
url = ''
|
||||
thumb = ''
|
||||
|
@ -6,14 +6,14 @@ import type {IBucket} from '@/modelTypes/IBucket'
|
||||
import type {ITask} from '@/modelTypes/ITask'
|
||||
import type {IUser} from '@/modelTypes/IUser'
|
||||
|
||||
export default class BucketModel extends AbstractModel implements IBucket {
|
||||
export default class BucketModel extends AbstractModel<IBucket> implements IBucket {
|
||||
id = 0
|
||||
title = ''
|
||||
listId = ''
|
||||
limit = 0
|
||||
tasks: ITask[] = []
|
||||
isDoneBucket: false
|
||||
position: 0
|
||||
isDoneBucket = false
|
||||
position = 0
|
||||
|
||||
createdBy: IUser = null
|
||||
created: Date = null
|
||||
|
@ -2,7 +2,7 @@ import AbstractModel from './abstractModel'
|
||||
|
||||
import type {ICaldavToken} from '@/modelTypes/ICaldavToken'
|
||||
|
||||
export default class CaldavTokenModel extends AbstractModel implements ICaldavToken {
|
||||
export default class CaldavTokenModel extends AbstractModel<ICaldavToken> implements ICaldavToken {
|
||||
id: number
|
||||
created: Date
|
||||
|
||||
|
@ -2,7 +2,7 @@ import AbstractModel from './abstractModel'
|
||||
|
||||
import type {IEmailUpdate} from '@/modelTypes/IEmailUpdate'
|
||||
|
||||
export default class EmailUpdateModel extends AbstractModel implements IEmailUpdate {
|
||||
export default class EmailUpdateModel extends AbstractModel<IEmailUpdate> implements IEmailUpdate {
|
||||
newEmail = ''
|
||||
password = ''
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
import type {IFile} from '@/modelTypes/IFile'
|
||||
|
||||
export default class FileModel extends AbstractModel implements IFile {
|
||||
export default class FileModel extends AbstractModel<IFile> implements IFile {
|
||||
id = 0
|
||||
mime = ''
|
||||
name = ''
|
||||
|
@ -8,7 +8,7 @@ import {colorIsDark} from '@/helpers/color/colorIsDark'
|
||||
|
||||
const DEFAULT_LABEL_BACKGROUND_COLOR = 'e8e8e8'
|
||||
|
||||
export default class LabelModel extends AbstractModel implements ILabel {
|
||||
export default class LabelModel extends AbstractModel<ILabel> implements ILabel {
|
||||
id = 0
|
||||
title = ''
|
||||
// FIXME: this should be empty and be definied in the client.
|
||||
|
@ -2,7 +2,7 @@ import AbstractModel from './abstractModel'
|
||||
|
||||
import type { ILabelTask } from '@/modelTypes/ILabelTask'
|
||||
|
||||
export default class LabelTask extends AbstractModel implements ILabelTask {
|
||||
export default class LabelTask extends AbstractModel<ILabelTask> implements ILabelTask {
|
||||
id = 0
|
||||
taskId = 0
|
||||
labelId = 0
|
||||
|
@ -5,7 +5,7 @@ import {RIGHTS, type Right} from '@/constants/rights'
|
||||
import type {ILinkShare} from '@/modelTypes/ILinkShare'
|
||||
import type {IUser} from '@/modelTypes/IUser'
|
||||
|
||||
export default class LinkShareModel extends AbstractModel implements ILinkShare {
|
||||
export default class LinkShareModel extends AbstractModel<ILinkShare> implements ILinkShare {
|
||||
id = 0
|
||||
hash = ''
|
||||
right: Right = RIGHTS.READ
|
||||
|
@ -11,7 +11,7 @@ import type {ISubscription} from '@/modelTypes/ISubscription'
|
||||
|
||||
import {getSavedFilterIdFromListId} from '@/helpers/savedFilter'
|
||||
|
||||
export default class ListModel extends AbstractModel implements IList {
|
||||
export default class ListModel extends AbstractModel<IList> implements IList {
|
||||
id = 0
|
||||
title = ''
|
||||
description = ''
|
||||
@ -30,7 +30,7 @@ export default class ListModel extends AbstractModel implements IList {
|
||||
created: Date = null
|
||||
updated: Date = null
|
||||
|
||||
constructor(data: Partial<IList>) {
|
||||
constructor(data: Partial<IList> = {}) {
|
||||
super()
|
||||
this.assignData(data)
|
||||
|
||||
|
@ -5,7 +5,7 @@ import type {IListDuplicate} from '@/modelTypes/IListDuplicate'
|
||||
import type {INamespace} from '@/modelTypes/INamespace'
|
||||
import type {IList} from '@/modelTypes/IList'
|
||||
|
||||
export default class ListDuplicateModel extends AbstractModel implements IListDuplicate {
|
||||
export default class ListDuplicateModel extends AbstractModel<IListDuplicate> implements IListDuplicate {
|
||||
listId = 0
|
||||
namespaceId: INamespace['id'] = 0
|
||||
list: IList = ListModel
|
||||
|
@ -8,7 +8,7 @@ import type {IUser} from '@/modelTypes/IUser'
|
||||
import type {IList} from '@/modelTypes/IList'
|
||||
import type {ISubscription} from '@/modelTypes/ISubscription'
|
||||
|
||||
export default class NamespaceModel extends AbstractModel implements INamespace {
|
||||
export default class NamespaceModel extends AbstractModel<INamespace> implements INamespace {
|
||||
id = 0
|
||||
title = ''
|
||||
description = ''
|
||||
@ -21,7 +21,7 @@ export default class NamespaceModel extends AbstractModel implements INamespace
|
||||
created: Date = null
|
||||
updated: Date = null
|
||||
|
||||
constructor(data: Partial<INamespace>) {
|
||||
constructor(data: Partial<INamespace> = {}) {
|
||||
super()
|
||||
this.assignData(data)
|
||||
|
||||
|
@ -8,7 +8,7 @@ import TeamModel from '@/models/team'
|
||||
|
||||
import {NOTIFICATION_NAMES, type INotification} from '@/modelTypes/INotification'
|
||||
|
||||
export default class NotificationModel extends AbstractModel implements INotification {
|
||||
export default class NotificationModel extends AbstractModel<INotification> implements INotification {
|
||||
id = 0
|
||||
name = ''
|
||||
notification: INotification['notification'] = null
|
||||
|
@ -2,7 +2,7 @@ import AbstractModel from './abstractModel'
|
||||
|
||||
import type {IPasswordReset} from '@/modelTypes/IPasswordReset'
|
||||
|
||||
export default class PasswordResetModel extends AbstractModel implements IPasswordReset {
|
||||
export default class PasswordResetModel extends AbstractModel<IPasswordReset> implements IPasswordReset {
|
||||
token = ''
|
||||
newPassword = ''
|
||||
email = ''
|
||||
|
@ -2,7 +2,7 @@ import AbstractModel from './abstractModel'
|
||||
|
||||
import type {IPasswordUpdate} from '@/modelTypes/IPasswordUpdate'
|
||||
|
||||
export default class PasswordUpdateModel extends AbstractModel implements IPasswordUpdate {
|
||||
export default class PasswordUpdateModel extends AbstractModel<IPasswordUpdate> implements IPasswordUpdate {
|
||||
newPassword = ''
|
||||
oldPassword = ''
|
||||
|
||||
|
@ -4,7 +4,7 @@ import UserModel from '@/models/user'
|
||||
import type {ISavedFilter} from '@/modelTypes/ISavedFilter'
|
||||
import type {IUser} from '@/modelTypes/IUser'
|
||||
|
||||
export default class SavedFilterModel extends AbstractModel implements ISavedFilter {
|
||||
export default class SavedFilterModel extends AbstractModel<ISavedFilter> implements ISavedFilter {
|
||||
id = 0
|
||||
title = ''
|
||||
description = ''
|
||||
|
@ -4,7 +4,7 @@ import UserModel from '@/models/user'
|
||||
import type {ISubscription} from '@/modelTypes/ISubscription'
|
||||
import type {IUser} from '@/modelTypes/IUser'
|
||||
|
||||
export default class SubscriptionModel extends AbstractModel implements ISubscription {
|
||||
export default class SubscriptionModel extends AbstractModel<ISubscription> implements ISubscription {
|
||||
id = 0
|
||||
entity = ''
|
||||
entityId = 0
|
||||
|
@ -32,7 +32,7 @@ export function getHexColor(hexColor: string) {
|
||||
return hexColor
|
||||
}
|
||||
|
||||
export default class TaskModel extends AbstractModel implements ITask {
|
||||
export default class TaskModel extends AbstractModel<ITask> implements ITask {
|
||||
id = 0
|
||||
title = ''
|
||||
description = ''
|
||||
|
@ -4,7 +4,7 @@ import type {ITaskAssignee} from '@/modelTypes/ITaskAssignee'
|
||||
import type {IUser} from '@/modelTypes/IUser'
|
||||
import type {ITask} from '@/modelTypes/ITask'
|
||||
|
||||
export default class TaskAssigneeModel extends AbstractModel implements ITaskAssignee {
|
||||
export default class TaskAssigneeModel extends AbstractModel<ITaskAssignee> implements ITaskAssignee {
|
||||
created: Date = null
|
||||
userId: IUser['id'] = 0
|
||||
taskId: ITask['id'] = 0
|
||||
|
@ -5,7 +5,7 @@ import type {ITaskComment} from '@/modelTypes/ITaskComment'
|
||||
import type {ITask} from '@/modelTypes/ITask'
|
||||
import type {IUser} from '@/modelTypes/IUser'
|
||||
|
||||
export default class TaskCommentModel extends AbstractModel implements ITaskComment {
|
||||
export default class TaskCommentModel extends AbstractModel<ITaskComment> implements ITaskComment {
|
||||
id = 0
|
||||
taskId: ITask['id'] = 0
|
||||
comment = ''
|
||||
|
@ -6,7 +6,7 @@ import type {ITask} from '@/modelTypes/ITask'
|
||||
import type {IUser} from '@/modelTypes/IUser'
|
||||
|
||||
import type {IRelationKind} from '@/types/IRelationKind'
|
||||
export default class TaskRelationModel extends AbstractModel implements ITaskRelation {
|
||||
export default class TaskRelationModel extends AbstractModel<ITaskRelation> implements ITaskRelation {
|
||||
id = 0
|
||||
otherTaskId: ITask['id'] = 0
|
||||
taskId: ITask['id'] = 0
|
||||
|
@ -7,7 +7,7 @@ import type {ITeam} from '@/modelTypes/ITeam'
|
||||
import type {ITeamMember} from '@/modelTypes/ITeamMember'
|
||||
import type {IUser} from '@/modelTypes/IUser'
|
||||
|
||||
export default class TeamModel extends AbstractModel implements ITeam {
|
||||
export default class TeamModel extends AbstractModel<ITeam> implements ITeam {
|
||||
id = 0
|
||||
name = ''
|
||||
description = ''
|
||||
|
@ -8,7 +8,7 @@ import type {ITeam} from '@/modelTypes/ITeam'
|
||||
* This class is a base class for common team sharing model.
|
||||
* It is extended in a way so it can be used for namespaces as well for lists.
|
||||
*/
|
||||
export default class TeamShareBaseModel extends AbstractModel implements ITeamShareBase {
|
||||
export default class TeamShareBaseModel extends AbstractModel<ITeamShareBase> implements ITeamShareBase {
|
||||
teamId: ITeam['id'] = 0
|
||||
right: Right = RIGHTS.READ
|
||||
|
||||
|
@ -2,7 +2,7 @@ import AbstractModel from './abstractModel'
|
||||
|
||||
import type {ITotp} from '@/modelTypes/ITotp'
|
||||
|
||||
export default class TotpModel extends AbstractModel implements ITotp {
|
||||
export default class TotpModel extends AbstractModel<ITotp> implements ITotp {
|
||||
secret = ''
|
||||
enabled = false
|
||||
url = ''
|
||||
|
@ -4,7 +4,7 @@ import UserSettingsModel from '@/models/userSettings'
|
||||
import type { IUser } from '@/modelTypes/IUser'
|
||||
import type { IUserSettings } from '@/modelTypes/IUserSettings'
|
||||
|
||||
export default class UserModel extends AbstractModel implements IUser {
|
||||
export default class UserModel extends AbstractModel<IUser> implements IUser {
|
||||
id = 0
|
||||
email = ''
|
||||
username = ''
|
||||
|
@ -4,7 +4,7 @@ import AbstractModel from './abstractModel'
|
||||
import type {IUserSettings} from '@/modelTypes/IUserSettings'
|
||||
import type {IList} from '@/modelTypes/IList'
|
||||
|
||||
export default class UserSettingsModel extends AbstractModel implements IUserSettings {
|
||||
export default class UserSettingsModel extends AbstractModel<IUserSettings> implements IUserSettings {
|
||||
name = ''
|
||||
emailRemindersEnabled = true
|
||||
discoverableByName = false
|
||||
|
@ -4,7 +4,7 @@ import {RIGHTS, type Right} from '@/constants/rights'
|
||||
import type {IUserShareBase} from '@/modelTypes/IUserShareBase'
|
||||
import type {IUser} from '@/modelTypes/IUser'
|
||||
|
||||
export default class UserShareBaseModel extends AbstractModel implements IUserShareBase {
|
||||
export default class UserShareBaseModel extends AbstractModel<IUserShareBase> implements IUserShareBase {
|
||||
userId: IUser['id'] = ''
|
||||
right: Right = RIGHTS.READ
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
import {beforeEach, afterEach, describe, it, expect, vi} from 'vitest'
|
||||
|
||||
import {parseTaskText} from './parseTaskText'
|
||||
import {parseTaskText, PrefixMode} from './parseTaskText'
|
||||
import {getDateFromText, getDateFromTextIn} from '../helpers/time/parseDate'
|
||||
import {calculateDayInterval} from '../helpers/time/calculateDayInterval'
|
||||
import {PRIORITIES} from '@/constants/priorities'
|
||||
@ -20,13 +20,13 @@ describe('Parse Task Text', () => {
|
||||
|
||||
it('should not parse text when disabled', () => {
|
||||
const text = 'Lorem Ipsum today *label +list !2 @user'
|
||||
const result = parseTaskText(text, 'disabled')
|
||||
const result = parseTaskText(text, PrefixMode.Disabled)
|
||||
|
||||
expect(result.text).toBe(text)
|
||||
})
|
||||
|
||||
it('should parse text in todoist mode when configured', () => {
|
||||
const result = parseTaskText('Lorem Ipsum today @label #list !2 +user', 'todoist')
|
||||
const result = parseTaskText('Lorem Ipsum today @label #list !2 +user', PrefixMode.Todoist)
|
||||
|
||||
expect(result.text).toBe('Lorem Ipsum')
|
||||
const now = new Date()
|
||||
@ -84,7 +84,7 @@ describe('Parse Task Text', () => {
|
||||
'at 3am': '3:0',
|
||||
'at 3:12 am': '3:12',
|
||||
'at 3:12 pm': '15:12',
|
||||
}
|
||||
} as const
|
||||
|
||||
for (const c in cases) {
|
||||
it(`should recognize today with a time ${c}`, () => {
|
||||
@ -95,7 +95,7 @@ describe('Parse Task Text', () => {
|
||||
expect(result.date.getFullYear()).toBe(now.getFullYear())
|
||||
expect(result.date.getMonth()).toBe(now.getMonth())
|
||||
expect(result.date.getDate()).toBe(now.getDate())
|
||||
expect(`${result.date.getHours()}:${result.date.getMinutes()}`).toBe(cases[c])
|
||||
expect(`${result.date.getHours()}:${result.date.getMinutes()}`).toBe(cases[c as keyof typeof cases])
|
||||
expect(result.date.getSeconds()).toBe(0)
|
||||
})
|
||||
}
|
||||
|
@ -4,7 +4,7 @@ import type {Method} from 'axios'
|
||||
import {objectToSnakeCase} from '@/helpers/case'
|
||||
import AbstractModel, { type IAbstract } from '@/models/abstractModel'
|
||||
import type { Right } from '@/constants/rights'
|
||||
import type { IFile } from '@/models/file'
|
||||
import type {IFile} from '@/modelTypes/IFile'
|
||||
|
||||
interface Paths {
|
||||
create : string
|
||||
|
@ -1,8 +1,12 @@
|
||||
import AbstractService from './abstractService'
|
||||
import AttachmentModel, { type IAttachment } from '../models/attachment'
|
||||
import {formatISO} from 'date-fns'
|
||||
|
||||
import AbstractService from './abstractService'
|
||||
import AttachmentModel from '../models/attachment'
|
||||
|
||||
import type { IAttachment } from '@/modelTypes/IAttachment'
|
||||
import type { IFile } from '@/modelTypes/IFile'
|
||||
|
||||
import {downloadBlob} from '@/helpers/downloadBlob'
|
||||
import type { IFile } from '@/models/file'
|
||||
|
||||
export default class AttachmentService extends AbstractService<AttachmentModel> {
|
||||
constructor() {
|
||||
@ -22,7 +26,7 @@ export default class AttachmentService extends AbstractService<AttachmentModel>
|
||||
return false
|
||||
}
|
||||
|
||||
modelFactory(data) {
|
||||
modelFactory(data: Partial<IAttachment>) {
|
||||
return new AttachmentModel(data)
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
import AbstractService from './abstractService'
|
||||
import AvatarModel, { type IAvatar } from '../models/avatar'
|
||||
import AvatarModel from '@/models/avatar'
|
||||
import type { IAvatar } from '@/modelTypes/IAvatar'
|
||||
|
||||
export default class AvatarService extends AbstractService<IAvatar> {
|
||||
constructor() {
|
||||
@ -10,7 +11,7 @@ export default class AvatarService extends AbstractService<IAvatar> {
|
||||
})
|
||||
}
|
||||
|
||||
modelFactory(data) {
|
||||
modelFactory(data: Partial<IAvatar>) {
|
||||
return new AvatarModel(data)
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
import AbstractService from './abstractService'
|
||||
import BackgroundImageModel, { type IBackgroundImage } from '../models/backgroundImage'
|
||||
import BackgroundImageModel from '../models/backgroundImage'
|
||||
import ListModel from '@/models/list'
|
||||
import type { IBackgroundImage } from '@/modelTypes/IBackgroundImage'
|
||||
|
||||
export default class BackgroundUnsplashService extends AbstractService<IBackgroundImage> {
|
||||
constructor() {
|
||||
@ -10,7 +11,7 @@ export default class BackgroundUnsplashService extends AbstractService<IBackgrou
|
||||
})
|
||||
}
|
||||
|
||||
modelFactory(data) {
|
||||
modelFactory(data: Partial<IBackgroundImage>) {
|
||||
return new BackgroundImageModel(data)
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,8 @@
|
||||
import AbstractService from './abstractService'
|
||||
import ListModel, { type IList } from '../models/list'
|
||||
import type { IFile } from '@/models/file'
|
||||
import ListModel from '@/models/list'
|
||||
|
||||
import type { IList } from '@/modelTypes/IList'
|
||||
import type { IFile } from '@/modelTypes/IFile'
|
||||
|
||||
export default class BackgroundUploadService extends AbstractService {
|
||||
constructor() {
|
||||
@ -13,14 +15,12 @@ export default class BackgroundUploadService extends AbstractService {
|
||||
return false
|
||||
}
|
||||
|
||||
modelCreateFactory(data) {
|
||||
modelCreateFactory(data: Partial<IList>) {
|
||||
return new ListModel(data)
|
||||
}
|
||||
|
||||
/**
|
||||
* Uploads a file to the server
|
||||
* @param file
|
||||
* @returns {Promise<any|never>}
|
||||
*/
|
||||
create(listId: IList['id'], file: IFile) {
|
||||
return this.uploadFile(
|
||||
|
@ -1,6 +1,7 @@
|
||||
import AbstractService from './abstractService'
|
||||
import BucketModel, { type IBucket } from '../models/bucket'
|
||||
import BucketModel from '../models/bucket'
|
||||
import TaskService from '@/services/task'
|
||||
import type { IBucket } from '@/modelTypes/IBucket'
|
||||
|
||||
export default class BucketService extends AbstractService<IBucket> {
|
||||
constructor() {
|
||||
@ -12,7 +13,7 @@ export default class BucketService extends AbstractService<IBucket> {
|
||||
})
|
||||
}
|
||||
|
||||
modelFactory(data) {
|
||||
modelFactory(data: Partial<IBucket>) {
|
||||
return new BucketModel(data)
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
import {formatISO} from 'date-fns'
|
||||
import CaldavTokenModel, {type ICaldavToken} from '../models/caldavToken'
|
||||
import CaldavTokenModel from '@/models/caldavToken'
|
||||
import type {ICaldavToken} from '@/modelTypes/ICaldavToken'
|
||||
import AbstractService from './abstractService'
|
||||
|
||||
export default class CaldavTokenService extends AbstractService<ICaldavToken> {
|
||||
|
@ -1,5 +1,6 @@
|
||||
import AbstractService from './abstractService'
|
||||
import LabelModel, { type ILabel } from '@/models/label'
|
||||
import LabelModel from '@/models/label'
|
||||
import type {ILabel} from '@/modelTypes/ILabel'
|
||||
import {formatISO} from 'date-fns'
|
||||
import {colorFromHex} from '@/helpers/color/colorFromHex'
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
import AbstractService from './abstractService'
|
||||
import LabelTask, {type ILabelTask} from '@/models/labelTask'
|
||||
import LabelTask from '@/models/labelTask'
|
||||
import type {ILabelTask} from '@/modelTypes/ILabelTask'
|
||||
|
||||
export default class LabelTaskService extends AbstractService<ILabelTask> {
|
||||
constructor() {
|
||||
|
@ -1,5 +1,6 @@
|
||||
import AbstractService from './abstractService'
|
||||
import LinkShareModel, { type ILinkShare } from '@/models/linkShare'
|
||||
import LinkShareModel from '@/models/linkShare'
|
||||
import type {ILinkShare} from '@/modelTypes/ILinkShare'
|
||||
import {formatISO} from 'date-fns'
|
||||
|
||||
export default class LinkShareService extends AbstractService<ILinkShare> {
|
||||
|
@ -1,5 +1,6 @@
|
||||
import AbstractService from './abstractService'
|
||||
import ListModel, { type IList } from '@/models/list'
|
||||
import ListModel from '@/models/list'
|
||||
import type {IList} from '@/modelTypes/IList'
|
||||
import TaskService from './task'
|
||||
import {formatISO} from 'date-fns'
|
||||
import {colorFromHex} from '@/helpers/color/colorFromHex'
|
||||
|
@ -1,5 +1,6 @@
|
||||
import AbstractService from './abstractService'
|
||||
import listDuplicateModel, {type IListDuplicate} from '../models/listDuplicateModel'
|
||||
import listDuplicateModel from '@/models/listDuplicateModel'
|
||||
import type {IListDuplicate} from '@/modelTypes/IListDuplicate'
|
||||
|
||||
export default class ListDuplicateService extends AbstractService<IListDuplicate> {
|
||||
constructor() {
|
||||
|
@ -1,3 +1,4 @@
|
||||
import type {IFile} from '@/modelTypes/IFile'
|
||||
import AbstractService from '../abstractService'
|
||||
|
||||
// This service builds on top of the abstract service and basically just hides away method names.
|
||||
@ -5,7 +6,7 @@ import AbstractService from '../abstractService'
|
||||
export default class AbstractMigrationFileService extends AbstractService {
|
||||
serviceUrlKey = ''
|
||||
|
||||
constructor(serviceUrlKey) {
|
||||
constructor(serviceUrlKey: '') {
|
||||
super({
|
||||
create: '/migration/' + serviceUrlKey + '/migrate',
|
||||
})
|
||||
@ -20,7 +21,7 @@ export default class AbstractMigrationFileService extends AbstractService {
|
||||
return false
|
||||
}
|
||||
|
||||
migrate(file) {
|
||||
migrate(file: IFile) {
|
||||
console.log(file)
|
||||
return this.uploadFile(
|
||||
this.paths.create,
|
||||
|
@ -1,5 +1,6 @@
|
||||
import AbstractService from './abstractService'
|
||||
import NamespaceModel, { type INamespace } from '../models/namespace'
|
||||
import NamespaceModel from '../models/namespace'
|
||||
import type {INamespace} from '@/modelTypes/INamespace'
|
||||
import {formatISO} from 'date-fns'
|
||||
import {colorFromHex} from '@/helpers/color/colorFromHex'
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
import AbstractService from '@/services/abstractService'
|
||||
import {formatISO} from 'date-fns'
|
||||
import NotificationModel, { type INotification } from '@/models/notification'
|
||||
import NotificationModel from '@/models/notification'
|
||||
import type {INotification} from '@/modelTypes/INotification'
|
||||
|
||||
export default class NotificationService extends AbstractService<INotification> {
|
||||
constructor() {
|
||||
|
@ -1,5 +1,6 @@
|
||||
import AbstractService from './abstractService'
|
||||
import PasswordResetModel, { type IPasswordReset } from '../models/passwordReset'
|
||||
import PasswordResetModel from '@/models/passwordReset'
|
||||
import type {IPasswordReset} from '@/modelTypes/IPasswordReset'
|
||||
|
||||
export default class PasswordResetService extends AbstractService<IPasswordReset> {
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
import type { IPasswordUpdate } from '@/models/passwordUpdate'
|
||||
import AbstractService from './abstractService'
|
||||
import type {IPasswordUpdate} from '@/modelTypes/IPasswordUpdate'
|
||||
|
||||
export default class PasswordUpdateService extends AbstractService<IPasswordUpdate> {
|
||||
constructor() {
|
||||
|
@ -1,5 +1,6 @@
|
||||