Redesign ticket details with inline editing
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
import type { AcceptanceCriteriaModel } from '@/types/models/acceptance-criteria-model';
|
||||
|
||||
export type AcceptanceCriteriaCommitSource =
|
||||
| 'check'
|
||||
| 'delete'
|
||||
| 'indent'
|
||||
| 'move'
|
||||
| 'text';
|
||||
|
||||
export type AcceptanceCriteriaEditorCommit = {
|
||||
items: AcceptanceCriteriaModel;
|
||||
source: AcceptanceCriteriaCommitSource;
|
||||
};
|
||||
|
||||
export type AcceptanceCriteriaSaveState = 'error' | 'idle' | 'saved' | 'saving';
|
||||
|
||||
export type AcceptanceCriteriaEditorProps = {
|
||||
disabled?: boolean;
|
||||
editable: boolean;
|
||||
error?: string;
|
||||
modelValue: AcceptanceCriteriaModel;
|
||||
saveState?: AcceptanceCriteriaSaveState;
|
||||
};
|
||||
|
||||
export type AcceptanceCriteriaEditorEmits = {
|
||||
(event: 'commit', value: AcceptanceCriteriaEditorCommit): void;
|
||||
(event: 'update:modelValue', value: AcceptanceCriteriaModel): void;
|
||||
};
|
||||
@@ -1,7 +1,9 @@
|
||||
export * from './auth';
|
||||
export * from './acceptance-criteria-editor';
|
||||
export * from './layout';
|
||||
export * from './navigation';
|
||||
export * from './notification-settings';
|
||||
export * from './page-props';
|
||||
export * from './project-navigation';
|
||||
export * from './ticket-inline-edit';
|
||||
export * from './ui';
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
import type { AcceptanceCriteriaModel } from '@/types/models/acceptance-criteria-model';
|
||||
|
||||
export type InlineTextEditorValue = number | string | null;
|
||||
|
||||
export type InlineTextEditorProps = {
|
||||
disabled?: boolean;
|
||||
editable: boolean;
|
||||
error?: string;
|
||||
inputType?: 'number' | 'text';
|
||||
multiline?: boolean;
|
||||
placeholder: string;
|
||||
saveState?: 'error' | 'idle' | 'saved' | 'saving';
|
||||
value: InlineTextEditorValue;
|
||||
variant?: 'body' | 'property' | 'title';
|
||||
};
|
||||
|
||||
export type InlineTextEditorEmits = {
|
||||
(event: 'commit'): void;
|
||||
(event: 'update:value', value: InlineTextEditorValue): void;
|
||||
};
|
||||
|
||||
export type InlineSaveStatusProps = {
|
||||
error?: string;
|
||||
state: 'error' | 'idle' | 'saved' | 'saving';
|
||||
};
|
||||
|
||||
export type TicketEditableField =
|
||||
| 'acceptance_criteria'
|
||||
| 'assignee_user_id'
|
||||
| 'author_user_id'
|
||||
| 'blocked_comment'
|
||||
| 'description'
|
||||
| 'is_blocked'
|
||||
| 'parent_ticket_id'
|
||||
| 'story_points'
|
||||
| 'ticket_priority_id'
|
||||
| 'ticket_type_id'
|
||||
| 'title'
|
||||
| `field-${number}`;
|
||||
|
||||
export type ProjectTicketFieldValuePayload = {
|
||||
ticket_field_definition_id: number;
|
||||
value_number: number | string | null;
|
||||
value_user_id: number | string | null;
|
||||
};
|
||||
|
||||
export type ProjectTicketUpdatePayload = {
|
||||
acceptance_criteria: AcceptanceCriteriaModel;
|
||||
assignee_user_id: number | string | null;
|
||||
author_user_id: number | string | null;
|
||||
blocked_comment: string;
|
||||
description: string;
|
||||
field_values: ProjectTicketFieldValuePayload[];
|
||||
is_blocked: boolean;
|
||||
parent_ticket_id: number | string | null;
|
||||
story_points: number | string | null;
|
||||
ticket_priority_id: number | string;
|
||||
ticket_type_id: number | string;
|
||||
title: string;
|
||||
};
|
||||
|
||||
export type TicketAutosaveResponse = {
|
||||
acceptance_criteria: AcceptanceCriteriaModel;
|
||||
message: string;
|
||||
updated: boolean;
|
||||
};
|
||||
|
||||
export type TicketAutosaveErrorResponse = {
|
||||
errors?: Record<string, string[]>;
|
||||
message?: string;
|
||||
};
|
||||
|
||||
export type QueuedTicketAutosave = {
|
||||
field: TicketEditableField;
|
||||
payload: ProjectTicketUpdatePayload;
|
||||
};
|
||||
Reference in New Issue
Block a user