1
0

feat: rename list to project everywhere

fix: project table view

fix: e2e tests

fix: typo in readme

fix: list view route

fix: don't wait until background is loaded for list to show

fix: rename component imports

fix: lint

fix: parse task text

fix: use list card grid

fix: use correct class names

fix: i18n keys

fix: load project

fix: task overview

fix: list view spacing

fix: find project

fix: setLoading when updating a project

fix: loading saved filter

fix: project store loading

fix: color picker import

fix: cypress tests

feat: migrate old list settings

chore: add const for project settings

fix: wrong projecten rename from lists

chore: rename unused variable

fix: editor list

fix: shortcut list class name

fix: pagination list class name

fix: notifications list class name

fix: list view variable name

chore: clarify comment

fix: i18n keys

fix: router imports

fix: comment

chore: remove debugging leftover

fix: remove duplicate variables

fix: change comment

fix: list view variable name

fix: list view css class name

fix: list item property name

fix: name update tasks function correctly

fix: update comment

fix: project create route

fix: list view class names

fix: list view component name

fix: result list class name

fix: animation class list name

fix: change debug log

fix: revert a few navigation changes

fix: use @ for imports of all views

fix: rename link share list class

fix: remove unused css class

fix: dynamically import project components again
This commit is contained in:
kolaente
2022-11-13 22:04:57 +01:00
committed by Gitea
parent b9d3b5c756
commit befa6f27bb
133 changed files with 1873 additions and 1881 deletions

View File

@ -1,13 +1,13 @@
import AbstractService from './abstractService'
import BackgroundImageModel from '../models/backgroundImage'
import ListModel from '@/models/list'
import ProjectModel from '@/models/project'
import type { IBackgroundImage } from '@/modelTypes/IBackgroundImage'
export default class BackgroundUnsplashService extends AbstractService<IBackgroundImage> {
constructor() {
super({
getAll: '/backgrounds/unsplash/search',
update: '/lists/{listId}/backgrounds/unsplash',
update: '/projects/{projectId}/backgrounds/unsplash',
})
}
@ -16,7 +16,7 @@ export default class BackgroundUnsplashService extends AbstractService<IBackgrou
}
modelUpdateFactory(data) {
return new ListModel(data)
return new ProjectModel(data)
}
async thumb(model) {

View File

@ -1,13 +1,13 @@
import AbstractService from './abstractService'
import ListModel from '@/models/list'
import ProjectModel from '@/models/project'
import type { IList } from '@/modelTypes/IList'
import type { IProject } from '@/modelTypes/IProject'
import type { IFile } from '@/modelTypes/IFile'
export default class BackgroundUploadService extends AbstractService {
constructor() {
super({
create: '/lists/{listId}/backgrounds/upload',
create: '/projects/{projectId}/backgrounds/upload',
})
}
@ -15,16 +15,16 @@ export default class BackgroundUploadService extends AbstractService {
return false
}
modelCreateFactory(data: Partial<IList>) {
return new ListModel(data)
modelCreateFactory(data: Partial<IProject>) {
return new ProjectModel(data)
}
/**
* Uploads a file to the server
*/
create(listId: IList['id'], file: IFile) {
create(projectId: IProject['id'], file: IFile) {
return this.uploadFile(
this.getReplacedRoute(this.paths.create, {listId}),
this.getReplacedRoute(this.paths.create, {projectId}),
file,
'background',
)

View File

@ -6,10 +6,10 @@ import type { IBucket } from '@/modelTypes/IBucket'
export default class BucketService extends AbstractService<IBucket> {
constructor() {
super({
getAll: '/lists/{listId}/buckets',
create: '/lists/{listId}/buckets',
update: '/lists/{listId}/buckets/{id}',
delete: '/lists/{listId}/buckets/{id}',
getAll: '/projects/{projectId}/buckets',
create: '/projects/{projectId}/buckets',
update: '/projects/{projectId}/buckets/{id}',
delete: '/projects/{projectId}/buckets/{id}',
})
}

View File

@ -5,10 +5,10 @@ import type {ILinkShare} from '@/modelTypes/ILinkShare'
export default class LinkShareService extends AbstractService<ILinkShare> {
constructor() {
super({
getAll: '/lists/{listId}/shares',
get: '/lists/{listId}/shares/{id}',
create: '/lists/{listId}/shares',
delete: '/lists/{listId}/shares/{id}',
getAll: '/projects/{projectId}/shares',
get: '/projects/{projectId}/shares/{id}',
create: '/projects/{projectId}/shares',
delete: '/projects/{projectId}/shares/{id}',
})
}

View File

@ -1,22 +1,22 @@
import AbstractService from './abstractService'
import ListModel from '@/models/list'
import type {IList} from '@/modelTypes/IList'
import ProjectModel from '@/models/project'
import type {IProject} from '@/modelTypes/IProject'
import TaskService from './task'
import {colorFromHex} from '@/helpers/color/colorFromHex'
export default class ListService extends AbstractService<IList> {
export default class ProjectService extends AbstractService<IProject> {
constructor() {
super({
create: '/namespaces/{namespaceId}/lists',
get: '/lists/{id}',
getAll: '/lists',
update: '/lists/{id}',
delete: '/lists/{id}',
create: '/namespaces/{namespaceId}/projects',
get: '/projects/{id}',
getAll: '/projects',
update: '/projects/{id}',
delete: '/projects/{id}',
})
}
modelFactory(data) {
return new ListModel(data)
return new ProjectModel(data)
}
beforeUpdate(model) {
@ -34,29 +34,29 @@ export default class ListService extends AbstractService<IList> {
return model
}
beforeCreate(list) {
list.hexColor = colorFromHex(list.hexColor)
return list
beforeCreate(project) {
project.hexColor = colorFromHex(project.hexColor)
return project
}
async background(list: Pick<IList, 'id' | 'backgroundInformation'>) {
if (list.backgroundInformation === null) {
async background(project: Pick<IProject, 'id' | 'backgroundInformation'>) {
if (project.backgroundInformation === null) {
return ''
}
const response = await this.http({
url: `/lists/${list.id}/background`,
url: `/projects/${project.id}/background`,
method: 'GET',
responseType: 'blob',
})
return window.URL.createObjectURL(new Blob([response.data]))
}
async removeBackground(list: Pick<IList, 'id'>) {
async removeBackground(project: Pick<IProject, 'id'>) {
const cancel = this.setLoading()
try {
const response = await this.http.delete(`/lists/${list.id}/background`, list)
const response = await this.http.delete(`/projects/${project.id}/background`, project)
return response.data
} finally {
cancel()

View File

@ -1,21 +1,21 @@
import AbstractService from './abstractService'
import listDuplicateModel from '@/models/listDuplicateModel'
import type {IListDuplicate} from '@/modelTypes/IListDuplicate'
import projectDuplicateModel from '@/models/projectDuplicateModel'
import type {IProjectDuplicate} from '@/modelTypes/IProjectDuplicate'
export default class ListDuplicateService extends AbstractService<IListDuplicate> {
export default class ProjectDuplicateService extends AbstractService<IProjectDuplicate> {
constructor() {
super({
create: '/lists/{listId}/duplicate',
create: '/projects/{projectId}/duplicate',
})
}
beforeCreate(model) {
model.list = null
model.project = null
return model
}
modelFactory(data) {
return new listDuplicateModel(data)
return new projectDuplicateModel(data)
}
}

View File

@ -1,10 +1,10 @@
import AbstractService from './abstractService'
import UserModel from '../models/user'
export default class ListUserService extends AbstractService {
export default class ProjectUserService extends AbstractService {
constructor() {
super({
getAll: '/lists/{listId}/listusers',
getAll: '/projects/{projectId}/projectusers',
})
}

View File

@ -4,7 +4,7 @@ import {useI18n} from 'vue-i18n'
import type {MaybeRef} from '@vueuse/core'
import {useDebounceFn} from '@vueuse/core'
import type {IList} from '@/modelTypes/IList'
import type {IProject} from '@/modelTypes/IProject'
import type {ISavedFilter} from '@/modelTypes/ISavedFilter'
import AbstractService from '@/services/abstractService'
@ -16,31 +16,31 @@ import {useNamespaceStore} from '@/stores/namespaces'
import {objectToSnakeCase, objectToCamelCase} from '@/helpers/case'
import {success} from '@/message'
import ListModel from '@/models/list'
import ProjectModel from '@/models/project'
/**
* Calculates the corresponding list id to this saved filter.
* Calculates the corresponding project id to this saved filter.
* This function matches the one in the api.
*/
function getListId(savedFilter: ISavedFilter) {
let listId = savedFilter.id * -1 - 1
if (listId > 0) {
listId = 0
function getProjectId(savedFilter: ISavedFilter) {
let projectId = savedFilter.id * -1 - 1
if (projectId > 0) {
projectId = 0
}
return listId
return projectId
}
export function getSavedFilterIdFromListId(listId: IList['id']) {
let filterId = listId * -1 - 1
// FilterIds from listIds are always positive
export function getSavedFilterIdFromProjectId(projectId: IProject['id']) {
let filterId = projectId * -1 - 1
// FilterIds from projectIds are always positive
if (filterId < 0) {
filterId = 0
}
return filterId
}
export function isSavedFilter(list: IList) {
return getSavedFilterIdFromListId(list.id) > 0
export function isSavedFilter(project: IProject) {
return getSavedFilterIdFromProjectId(project.id) > 0
}
export default class SavedFilterService extends AbstractService<ISavedFilter> {
@ -78,7 +78,7 @@ export default class SavedFilterService extends AbstractService<ISavedFilter> {
}
}
export function useSavedFilter(listId?: MaybeRef<IList['id']>) {
export function useSavedFilter(projectId?: MaybeRef<IProject['id']>) {
const router = useRouter()
const {t} = useI18n({useScope:'global'})
const namespaceStore = useNamespaceStore()
@ -94,13 +94,13 @@ export function useSavedFilter(listId?: MaybeRef<IList['id']>) {
})
// load SavedFilter
watch(() => unref(listId), async (watchedListId) => {
if (watchedListId === undefined) {
watch(() => unref(projectId), async (watchedProjectId) => {
if (watchedProjectId === undefined) {
return
}
// We assume the listId in the route is the pseudolist
const savedFilterId = getSavedFilterIdFromListId(watchedListId)
// We assume the projectId in the route is the pseudoproject
const savedFilterId = getSavedFilterIdFromProjectId(watchedProjectId)
filter.value = new SavedFilterModel({id: savedFilterId})
const response = await filterService.get(filter.value)
@ -111,7 +111,7 @@ export function useSavedFilter(listId?: MaybeRef<IList['id']>) {
async function createFilter() {
filter.value = await filterService.create(filter.value)
await namespaceStore.loadNamespaces()
router.push({name: 'list.index', params: {listId: getListId(filter.value)}})
router.push({name: 'project.index', params: {projectId: getProjectId(filter.value)}})
}
async function saveFilter() {
@ -120,8 +120,8 @@ export function useSavedFilter(listId?: MaybeRef<IList['id']>) {
success({message: t('filters.edit.success')})
response.filters = objectToSnakeCase(response.filters)
filter.value = response
await useBaseStore().setCurrentList(new ListModel({
id: getListId(filter.value),
await useBaseStore().setCurrentProject(new ProjectModel({
id: getProjectId(filter.value),
title: filter.value.title,
}))
router.back()

View File

@ -18,7 +18,7 @@ const parseDate = date => {
export default class TaskService extends AbstractService<ITask> {
constructor() {
super({
create: '/lists/{listId}',
create: '/projects/{projectId}',
getAll: '/tasks/all',
get: '/tasks/{id}',
update: '/tasks/{id}',
@ -43,8 +43,8 @@ export default class TaskService extends AbstractService<ITask> {
model.title = model.title?.trim()
// Ensure that listId is an int
model.listId = Number(model.listId)
// Ensure that projectId is an int
model.projectId = Number(model.projectId)
// Convert dates into an iso string
model.dueDate = parseDate(model.dueDate)

View File

@ -17,7 +17,7 @@ export interface GetAllTasksParams {
export default class TaskCollectionService extends AbstractService<ITask> {
constructor() {
super({
getAll: '/lists/{listId}/tasks',
getAll: '/projects/{projectId}/tasks',
})
}

View File

@ -1,20 +1,20 @@
import AbstractService from './abstractService'
import TeamListModel from '@/models/teamList'
import type {ITeamList} from '@/modelTypes/ITeamList'
import TeamProjectModel from '@/models/teamProject'
import type {ITeamProject} from '@/modelTypes/ITeamProject'
import TeamModel from '@/models/team'
export default class TeamListService extends AbstractService<ITeamList> {
export default class TeamProjectService extends AbstractService<ITeamProject> {
constructor() {
super({
create: '/lists/{listId}/teams',
getAll: '/lists/{listId}/teams',
update: '/lists/{listId}/teams/{teamId}',
delete: '/lists/{listId}/teams/{teamId}',
create: '/projects/{projectId}/teams',
getAll: '/projects/{projectId}/teams',
update: '/projects/{projectId}/teams/{teamId}',
delete: '/projects/{projectId}/teams/{teamId}',
})
}
modelFactory(data) {
return new TeamListModel(data)
return new TeamProjectModel(data)
}
modelGetAllFactory(data) {

View File

@ -1,20 +1,20 @@
import AbstractService from './abstractService'
import UserListModel from '@/models/userList'
import type {IUserList} from '@/modelTypes/IUserList'
import UserProjectModel from '@/models/userProject'
import type {IUserProject} from '@/modelTypes/IUserProject'
import UserModel from '@/models/user'
export default class UserListService extends AbstractService<IUserList> {
export default class UserProjectService extends AbstractService<IUserProject> {
constructor() {
super({
create: '/lists/{listId}/users',
getAll: '/lists/{listId}/users',
update: '/lists/{listId}/users/{userId}',
delete: '/lists/{listId}/users/{userId}',
create: '/projects/{projectId}/users',
getAll: '/projects/{projectId}/users',
update: '/projects/{projectId}/users/{userId}',
delete: '/projects/{projectId}/users/{userId}',
})
}
modelFactory(data) {
return new UserListModel(data)
return new UserProjectModel(data)
}
modelGetAllFactory(data) {