Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
ab0984c
feat(link): add line height prop to link component
WANZARGEN Mar 4, 2025
4f57e38
fix(text-editor): add white-space pre-wrap to code blocks
WANZARGEN Mar 4, 2025
239fab9
fix(board-task): add line height classes to task name field
WANZARGEN Mar 4, 2025
a91808f
refactor(ops-flow): update import paths for task-related schemas
WANZARGEN Mar 4, 2025
52953e9
feat(ops-flow): add category and task type descriptions to task creat…
WANZARGEN Mar 4, 2025
50f6e67
feat(task-fields): add text field options and improve field configura…
WANZARGEN Mar 4, 2025
b02ce4a
feat(opsflow): add composable API clients for task, task category, an…
WANZARGEN Mar 4, 2025
4da90a1
refactor(board-task): migrate to vue-query and improve task list loading
WANZARGEN Mar 4, 2025
8b2e9eb
refactor(task-detail): migrate to vue-query and improve task loading …
WANZARGEN Mar 4, 2025
8cf959e
refactor(task-assign): update task API import and method signature
WANZARGEN Mar 4, 2025
9647011
refactor(ops-flow): remove unused imports and task loading logic from…
WANZARGEN Mar 4, 2025
183b76f
refactor(task-content-form): update task API import and status change…
WANZARGEN Mar 4, 2025
def0034
refactor(task-type-delete): migrate to vue-query for associated tasks…
WANZARGEN Mar 4, 2025
d60f9b0
refactor(task-category-delete): add use-associated-tasks-query
WANZARGEN Mar 5, 2025
a1f446b
fix(collapsible-panel): update display style for text clamping to inl…
WANZARGEN Mar 5, 2025
b350693
refactor(task-category-delete): optimize workspace-based task filtering
WANZARGEN Mar 5, 2025
96c7841
refactor(task-create): migrate to vue-query for task creation with im…
WANZARGEN Mar 5, 2025
92ae5c9
refactor(task-detail): migrate task update to vue-query and remove de…
WANZARGEN Mar 5, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion apps/web/src/api-clients/opsflow/_types/task-field-type.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ export interface TaskFieldOptions { // union of all task field options
}

/* task field options by type */
interface TextTaskFieldOptions {
export interface TextTaskFieldOptions {
description?: string;
example?: string;
max_length?: number;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import type { ComputedRef } from 'vue';

import type { QueryKey } from '@tanstack/vue-query';

import { SpaceConnector } from '@cloudforet/core-lib/space-connector';

import { useAPIQueryKey } from '@/api-clients/_common/composables/use-query-key';
import type { ListResponse } from '@/api-clients/_common/schema/api-verbs/list';
import type { TaskCategoryCreateParameters } from '@/api-clients/opsflow/task-category/schema/api-verbs/create';
import type { TaskCategoryDeleteParameters } from '@/api-clients/opsflow/task-category/schema/api-verbs/delete';
import type { TaskCategoryGetParameters } from '@/api-clients/opsflow/task-category/schema/api-verbs/get';
import type { TaskCategoryListParameters } from '@/api-clients/opsflow/task-category/schema/api-verbs/list';
import type { TaskCategoryUpdateParameters } from '@/api-clients/opsflow/task-category/schema/api-verbs/update';
import type { TaskCategoryModel } from '@/api-clients/opsflow/task-category/schema/model';

interface UseTaskCategoryApiReturn {
taskCategoryQueryKey: ComputedRef<QueryKey>;
taskCategoryListQueryKey: ComputedRef<QueryKey>;
taskCategoryAPI: {
create: (params: TaskCategoryCreateParameters) => Promise<TaskCategoryModel>;
update: (params: TaskCategoryUpdateParameters) => Promise<TaskCategoryModel>;
delete: (params: TaskCategoryDeleteParameters) => Promise<void>;
get: (params: TaskCategoryGetParameters) => Promise<TaskCategoryModel>;
list: (params: TaskCategoryListParameters) => Promise<ListResponse<TaskCategoryModel>>;
}
}

export const useTaskCategoryApi = (): UseTaskCategoryApiReturn => {
const taskCategoryQueryKey = useAPIQueryKey('opsflow/task-category/get');
const taskCategoryListQueryKey = useAPIQueryKey('opsflow/task-category/list');

const actions = {
async create(params: TaskCategoryCreateParameters) {
return SpaceConnector.clientV2.opsflow.taskCategory.create<TaskCategoryCreateParameters, TaskCategoryModel>(params);
},
async update(params: TaskCategoryUpdateParameters) {
return SpaceConnector.clientV2.opsflow.taskCategory.update<TaskCategoryUpdateParameters, TaskCategoryModel>(params);
},
async delete(params: TaskCategoryDeleteParameters) {
return SpaceConnector.clientV2.opsflow.taskCategory.delete<TaskCategoryDeleteParameters>(params);
},
async get(params: TaskCategoryGetParameters) {
return SpaceConnector.clientV2.opsflow.taskCategory.get<TaskCategoryGetParameters, TaskCategoryModel>(params);
},
async list(params: TaskCategoryListParameters) {
return SpaceConnector.clientV2.opsflow.taskCategory.list<TaskCategoryListParameters, ListResponse<TaskCategoryModel>>(params);
},
};

return {
taskCategoryQueryKey,
taskCategoryListQueryKey,
taskCategoryAPI: actions,
};
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import type { ComputedRef } from 'vue';

import type { QueryKey } from '@tanstack/vue-query';

import { SpaceConnector } from '@cloudforet/core-lib/space-connector';

import { useAPIQueryKey } from '@/api-clients/_common/composables/use-query-key';
import type { ListResponse } from '@/api-clients/_common/schema/api-verbs/list';
import type { TaskTypeCreateParameters } from '@/api-clients/opsflow/task-type/schema/api-verbs/create';
import type { TaskTypeDeleteParameters } from '@/api-clients/opsflow/task-type/schema/api-verbs/delete';
import type { TaskTypeGetParameters } from '@/api-clients/opsflow/task-type/schema/api-verbs/get';
import type { TaskTypeListParameters } from '@/api-clients/opsflow/task-type/schema/api-verbs/list';
import type { TaskTypeUpdateParameters } from '@/api-clients/opsflow/task-type/schema/api-verbs/update';
import type { TaskTypeUpdateFieldsParameters } from '@/api-clients/opsflow/task-type/schema/api-verbs/update-fields';
import type { TaskTypeModel } from '@/api-clients/opsflow/task-type/schema/model';

interface UseTaskTypeApiReturn {
taskTypeQueryKey: ComputedRef<QueryKey>;
taskTypeListQueryKey: ComputedRef<QueryKey>;
taskTypeAPI: {
create: (params: TaskTypeCreateParameters) => Promise<TaskTypeModel>;
update: (params: TaskTypeUpdateParameters) => Promise<TaskTypeModel>;
delete: (params: TaskTypeDeleteParameters) => Promise<void>;
get: (params: TaskTypeGetParameters) => Promise<TaskTypeModel>;
list: (params: TaskTypeListParameters) => Promise<ListResponse<TaskTypeModel>>;
updateFields: (params: TaskTypeUpdateFieldsParameters) => Promise<TaskTypeModel>;
}
}

export const useTaskTypeApi = (): UseTaskTypeApiReturn => {
const taskTypeQueryKey = useAPIQueryKey('opsflow/task-type/get');
const taskTypeListQueryKey = useAPIQueryKey('opsflow/task-type/list');

const actions = {
async create(params: TaskTypeCreateParameters) {
return SpaceConnector.clientV2.opsflow.taskType.create<TaskTypeCreateParameters, TaskTypeModel>(params);
},
async update(params: TaskTypeUpdateParameters) {
return SpaceConnector.clientV2.opsflow.taskType.update<TaskTypeUpdateParameters, TaskTypeModel>(params);
},
async delete(params: TaskTypeDeleteParameters) {
return SpaceConnector.clientV2.opsflow.taskType.delete<TaskTypeDeleteParameters>(params);
},
async get(params: TaskTypeGetParameters) {
return SpaceConnector.clientV2.opsflow.taskType.get<TaskTypeGetParameters, TaskTypeModel>(params);
},
async list(params: TaskTypeListParameters) {
return SpaceConnector.clientV2.opsflow.taskType.list<TaskTypeListParameters, ListResponse<TaskTypeModel>>(params);
},
async updateFields(params: TaskTypeUpdateFieldsParameters) {
return SpaceConnector.clientV2.opsflow.taskType.updateFields<TaskTypeUpdateFieldsParameters, TaskTypeModel>(params);
},
};

return {
taskTypeQueryKey,
taskTypeListQueryKey,
taskTypeAPI: actions,
};
};
70 changes: 70 additions & 0 deletions apps/web/src/api-clients/opsflow/task/composables/use-task-api.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import type { ComputedRef } from 'vue';

import type { QueryKey } from '@tanstack/vue-query';

import { SpaceConnector } from '@cloudforet/core-lib/space-connector';

import { useAPIQueryKey } from '@/api-clients/_common/composables/use-query-key';
import type { ListResponse } from '@/api-clients/_common/schema/api-verbs/list';
import type { TaskChangeAssigneeParameters } from '@/api-clients/opsflow/task/schema/api-verbs/change-assignee';
import type { TaskChangeStatusParameters } from '@/api-clients/opsflow/task/schema/api-verbs/change-status';
import type { TaskCreateParameters } from '@/api-clients/opsflow/task/schema/api-verbs/create';
import type { TaskDeleteParameters } from '@/api-clients/opsflow/task/schema/api-verbs/delete';
import type { TaskGetParameters } from '@/api-clients/opsflow/task/schema/api-verbs/get';
import type { TaskListParameters } from '@/api-clients/opsflow/task/schema/api-verbs/list';
import type { TaskUpdateParameters } from '@/api-clients/opsflow/task/schema/api-verbs/update';
import type { TaskUpdateDescriptionParameters } from '@/api-clients/opsflow/task/schema/api-verbs/update-description';
import type { TaskModel } from '@/api-clients/opsflow/task/schema/model';

interface UseTaskApiReturn {
taskQueryKey: ComputedRef<QueryKey>;
taskListQueryKey: ComputedRef<QueryKey>;
taskAPI: {
create: (params: TaskCreateParameters) => Promise<TaskModel>;
update: (params: TaskUpdateParameters) => Promise<TaskModel>;
delete: (params: TaskDeleteParameters) => Promise<void>;
get: (params: TaskGetParameters) => Promise<TaskModel>;
list: (params: TaskListParameters) => Promise<ListResponse<TaskModel>>;
changeAssignee: (params: TaskChangeAssigneeParameters) => Promise<TaskModel>;
changeStatus: (params: TaskChangeStatusParameters) => Promise<TaskModel>;
updateDescription: (params: TaskUpdateDescriptionParameters) => Promise<TaskModel>;
}
}

export const useTaskApi = (): UseTaskApiReturn => {
const taskQueryKey = useAPIQueryKey('opsflow/task/get');
const taskListQueryKey = useAPIQueryKey('opsflow/task/list');

const actions = {
async create(params: TaskCreateParameters) {
return SpaceConnector.clientV2.opsflow.task.create<TaskCreateParameters, TaskModel>(params);
},
async update(params: TaskUpdateParameters) {
return SpaceConnector.clientV2.opsflow.task.update<TaskUpdateParameters, TaskModel>(params);
},
async delete(params: TaskDeleteParameters) {
return SpaceConnector.clientV2.opsflow.task.delete<TaskDeleteParameters>(params);
},
async get(params: TaskGetParameters) {
return SpaceConnector.clientV2.opsflow.task.get<TaskGetParameters, TaskModel>(params);
},
async list(params: TaskListParameters) {
return SpaceConnector.clientV2.opsflow.task.list<TaskListParameters, ListResponse<TaskModel>>(params);
},
async changeAssignee(params: TaskChangeAssigneeParameters) {
return SpaceConnector.clientV2.opsflow.task.changeAssignee<TaskChangeAssigneeParameters, TaskModel>(params);
},
async changeStatus(params: TaskChangeStatusParameters) {
return SpaceConnector.clientV2.opsflow.task.changeStatus<TaskChangeStatusParameters, TaskModel>(params);
},
async updateDescription(params: TaskUpdateDescriptionParameters) {
return SpaceConnector.clientV2.opsflow.task.updateDescription<TaskUpdateDescriptionParameters, TaskModel>(params);
},
};

return {
taskQueryKey,
taskListQueryKey,
taskAPI: actions,
};
};
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@
@apply bg-gray-100 rounded-lg;
margin-top: 0.75rem;
padding: 0.5rem 1rem;
white-space: pre-wrap;
> code {
font-family: $font-code;
font-size: 0.875rem;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,11 @@ const props = defineProps<{
taskId: props.taskId,
},
}"
class="leading-lg"
:highlight="!props.linkNewTab"
:action-icon="props.linkNewTab ? 'internal-link' : 'none'"
:new-tab="props.linkNewTab"
line-height="1.25"
/>
</p-collapsible-panel>
</template>
Expand Down
Loading
Loading