* feat(ui): some design mocks * fix(ui): some fixes for stuff * feat(ui): test overview page layout * feat(ui): fix placeholder * feat(ui): answers table modal * feat(tracker): user testing module in tracker * fix(tracker): add "thank you" section, refactor file to make it readable * fix(tracker): naming * fix(tracker): naming * fix(tracker): some refactorings for user testing modd * feat(tracker): export assist vers to window obj, add recorder manager for user testing * feat(tracker): refactor UT file * feat(tracker): add recording delay for UT module * feat(tracker): dnd for UT widget * fix(tracker): changelog for assist * fix(tracker): cover ut with tests * fix(tracker): update package scripts to include testing before releasing packages * fix(UI): fix uxt routes * feat(ui): uxt store * feat(ui): uxt store connection * feat(ui): some api connections for utx * feat(ui): some api connections for utx * feat(ui): some api connections for utx * feat(ui): api connections * feat(ui): api connections * feat(ui): api connections * feat(ui): api connections * feat(ui): utx components for replay * feat(ui): utx components for replay * feat(ui): make events shared * feat(ui): final fixes
110 lines
2.7 KiB
TypeScript
110 lines
2.7 KiB
TypeScript
import BaseService from "./BaseService";
|
|
|
|
type Nullable<T> = T | null;
|
|
|
|
export interface UxTSearchFilters {
|
|
query: Nullable<string>;
|
|
page: Nullable<number>;
|
|
limit: Nullable<number>;
|
|
sortBy: Nullable<string>;
|
|
sortOrder: Nullable<"asc" | "desc">;
|
|
isActive: Nullable<boolean>;
|
|
userId: Nullable<number>;
|
|
}
|
|
|
|
export interface UxTask {
|
|
title: string;
|
|
description: Nullable<string>;
|
|
allowTyping: boolean;
|
|
taskId?: number;
|
|
}
|
|
|
|
export interface UxTest {
|
|
title: string;
|
|
startingPath: string;
|
|
requireMic: boolean;
|
|
requireCamera: boolean;
|
|
description: Nullable<string>;
|
|
guidelines: Nullable<string>;
|
|
conclusionMessage: Nullable<string>;
|
|
visibility: boolean;
|
|
tasks: UxTask[];
|
|
status: string;
|
|
}
|
|
|
|
|
|
export interface UxTListEntry {
|
|
createdAt: string;
|
|
status: 'preview' | 'in-progress' | 'paused' | 'completed';
|
|
createdBy: {
|
|
userId: number;
|
|
name: string;
|
|
};
|
|
description: string;
|
|
testId: number;
|
|
title: string;
|
|
updatedAt: string;
|
|
}
|
|
|
|
export default class UxtestingService extends BaseService {
|
|
private readonly prefix = '/usability-tests';
|
|
|
|
async fetchTestsList(
|
|
filters: Partial<UxTSearchFilters>
|
|
): Promise<{ list: UxTListEntry[]; total: number }> {
|
|
const r = await this.client.post(this.prefix + '/search', filters);
|
|
const j = await r.json();
|
|
return j.data || [];
|
|
}
|
|
|
|
async createTest(test: UxTest) {
|
|
const r = await this.client.post(this.prefix, test);
|
|
const j = await r.json();
|
|
return j.data || [];
|
|
}
|
|
|
|
async deleteTest(id: number) {
|
|
const r = await this.client.delete(`${this.prefix}/${id}`);
|
|
return await r.json();
|
|
}
|
|
|
|
updateTest(id: number, test: UxTest) {
|
|
return this.client
|
|
.put(`${this.prefix}/${id}`, test)
|
|
.then((r) => r.json())
|
|
.then((j) => j.data || []);
|
|
}
|
|
|
|
async fetchTest(id: string) {
|
|
const r = await this.client.get(`${this.prefix}/${id}`);
|
|
const j = await r.json();
|
|
return j.data || [];
|
|
}
|
|
|
|
async fetchTestSessions(id: string, page: number, limit: number) {
|
|
const r = await this.client.get(`${this.prefix}/${id}/sessions`, { page, limit });
|
|
return await r.json();
|
|
}
|
|
|
|
async fetchTaskResponses(id: number, task: number, page: number, limit: number) {
|
|
const r = await this.client.get(`${this.prefix}/${id}/responses/${task}`, {
|
|
page,
|
|
limit,
|
|
// query: 'comment',
|
|
});
|
|
const j = await r.json();
|
|
return j.data || [];
|
|
}
|
|
|
|
async fetchTestStats(id: string) {
|
|
const r = await this.client.get(`${this.prefix}/${id}/statistics`);
|
|
const j = await r.json();
|
|
return j.data || [];
|
|
}
|
|
|
|
async fetchTestTaskStats(id: string) {
|
|
const r = await this.client.get(`${this.prefix}/${id}/task-statistics`);
|
|
const j = await r.json();
|
|
return j.data || [];
|
|
}
|
|
}
|