@pragmr/baas-sdk
v1.2.1
Published
React SDK
Maintainers
Readme
BaaS SDK
React SDK for pragmr_baas - Authentication and GraphQL client
Installation
npm install @pragmr/baas-sdkUsage
Create the unified client
import { UnifiedBaasClient } from './src/core/unified-client';
const client = new UnifiedBaasClient({
baseUrl: 'http://127.0.0.1:8080',
graphqlUrl: 'http://127.0.0.1:8080/graphql',
});
// After login, set the auth token
client.setToken('<JWT_TOKEN>');Ticket SDK (Core)
Basic ticket CRUD is already available:
// List project tickets
const tickets = await client.getProjectTickets(tenantProductID, projectID, {
statusID,
priorityID,
assigneeID,
trackerIDs: [trackerID],
parentID,
search: 'login bug',
});
// Get single ticket
const ticket = await client.getProjectTicket(ticketID);
// Create ticket
const created = await client.createProjectTicket({
subject: 'My ticket',
description: 'Details…',
projectID,
trackerID,
tenantProductID,
});
// Update ticket (optionally with notes)
const updated = await client.updateProjectTicket({
id: ticketID,
subject: 'Updated subject',
description: 'Updated description',
notes: 'This note will be added to the ticket journal',
});
// Delete ticket
await client.deleteProjectTicket(ticketID, tenantProductID, projectID);Ticket Time Logs & Timers
Get time logs for a ticket
const { timeLogs, totalDuration } = await client.getTicketTimeLogs(ticketID);
console.log('Total time spent:', totalDuration);
timeLogs.forEach((log) => {
console.log(log.startTime, log.endTime, log.duration);
});Get active timers
// All active timers for the current user in the token
const timers = await client.getActiveTimers();
// Or explicitly for a user/tenantUser ID
const timersForUser = await client.getActiveTimers(userID);Start / Stop timer on a ticket
// Start timer
const startResult = await client.startTicketTimer(ticketID);
console.log('Started timer log:', startResult.timeLog);
console.log('Ticket after start:', startResult.ticket);
// Stop timer
const stopResult = await client.stopTicketTimer(ticketID);
console.log('Stopped timer log:', stopResult.timeLog);
console.log('Ticket after stop:', stopResult.ticket);Ticket Notes
List notes
const notes = await client.getTicketNotes(ticketID);
notes.forEach((note) => {
console.log(note.author, note.content, note.createdAt);
});Create a note
const note = await client.createTicketNote({
ticketID,
content: 'This is a new note added from the SDK',
});Update a note
const updatedNote = await client.updateTicketNote({
id: noteID,
content: 'Updated note content',
});Delete a note
await client.deleteTicketNote(noteID);Ticket Relations
List relations for a ticket
const relations = await client.getTicketRelations(ticketID);
relations.forEach((rel) => {
console.log(rel.relationType, rel.ticketID, rel.relatedID);
});Create a relation
const relation = await client.createTicketRelation({
ticketID, // current ticket ID
relatedTicketNumber: 123, // human ticket number (not UUID)
relationType: 'relates', // e.g. 'relates', 'blocks', etc.
tenantProductID,
tenantID,
projectID,
});Delete a relation
await client.deleteTicketRelation(relationID);React Hook: useTickets
If you are using the React integration, the same functionality is exposed via the useTickets hook:
import { useTickets } from './src/modules/project-management/tickets';
function TicketExample({ ticketID, tenantProductID, projectID }: Props) {
const {
getProjectTickets,
getProjectTicket,
createProjectTicket,
updateProjectTicket,
deleteProjectTicket,
getTicketTimeLogs,
getActiveTimers,
startTicketTimer,
stopTicketTimer,
getTicketNotes,
createTicketNote,
updateTicketNote,
deleteTicketNote,
getTicketRelations,
createTicketRelation,
deleteTicketRelation,
} = useTickets();
// You can call the same methods here inside effects, callbacks, etc.
}