antDesignIcons |
Default value : AllIcons as {
[key: string]: IconDefinition;
}
|
icons |
Type : IconDefinition[]
|
Default value : Object.keys(antDesignIcons).map((key) => antDesignIcons[key])
|
toasterConfig |
Type : Partial<GlobalConfig>
|
Default value : {
maxOpened: 4,
autoDismiss: true
}
|
basic |
Default value : setContext((operation, context) => ({
headers: {
Accept: 'charset=utf-8'
}
}))
|
CACHE_FAST_DEBOUNCE_TIME_MS |
Type : number
|
Default value : 200
|
How long DataQuery will wait to debounce requests until actually sending a request, in milliseconds. |
CACHE_INTERACTIVE_DEBOUNCE_TIME_MS |
Type : number
|
Default value : 500
|
CACHE_STALE_TIME_MS |
Type : number
|
Default value : 5000
|
Number of milliseconds beyond which cached data will be considered stale, and will be reloaded if a new subscriber is added. |
colorTestCanvas |
Default value : document.createElement('canvas')
|
colorTestCtx |
Default value : colorTestCanvas.getContext('2d')
|
COMPONENT_CONTEXT_MENU_DATA |
Default value : new InjectionToken<ComponentContextMenuData>('COMPONENT_CONTEXT_MENU_DATA')
|
CURRENT_USER_NODE |
Type : object
|
Default value : {type: NodeType.User, id: 'self'}
|
The special ID of the current user node. |
ROOT_NODE |
Type : miscellaneous
|
Default value : {type: NodeType.Root, id: ''}
|
The ID of the root node. |
environment |
Type : object
|
Default value : {
production: true,
apiUrl: `${host}/api`,
signUpUrl: `${host}/api/public`,
loginUrl: `${host}/login`,
publicClientName: 'publicClient'
}
|
host |
Type : string
|
Default value : 'http://localhost:8080'
|
environment |
Type : object
|
Default value : {
production: false,
apiUrl: `${host}/api`,
// url for public api endpoint offering signup
signUpUrl: `${host}/api/public`,
loginUrl: `${host}/login`,
publicClientName: 'publicClient'
}
|
host |
Type : string
|
Default value : 'http://localhost:8080'
|
PREDICATES |
Type : object
|
Default value : {
isOpen: {type: 'bool', label: 'Is open'},
isDuplicate: {type: 'bool', label: 'Is duplicate'},
category: {
type: 'enum',
label: 'Category',
options: [
[IssueCategory.Unclassified, 'Unclassified'],
[IssueCategory.Bug, 'Bug'],
[IssueCategory.FeatureRequest, 'Feature Request']
]
},
labels: {
type: 'ids',
label: 'Labels',
dataType: 'label',
scoreKeys: ['name'],
listAll: (self: IssueFilterComponent): ListId => self.allLabelsList,
makeFilter: (query: string): {name: string} => ({name: query}),
ifEmpty: 'No labels selected'
},
linksIssues: {type: 'bool', label: 'Has linked issues'},
linkedIssues: {
type: 'ids',
label: 'Linked issues',
dataType: 'issue',
scoreKeys: ['title'],
listAll: listAllIssues,
makeFilter: (query: string): {title: string} => ({title: query}),
ifEmpty: 'No issues selected'
},
isLinkedByIssues: {type: 'bool', label: 'Is linked by issues'},
linkedByIssues: {
type: 'ids',
label: 'Linked by issues',
dataType: 'issue',
scoreKeys: ['title'],
listAll: listAllIssues,
makeFilter: (query: string): {title: string} => ({title: query}),
ifEmpty: 'No issues selected'
},
participants: {
type: 'ids',
label: 'Participants',
dataType: 'user',
scoreKeys: ['username', 'displayName'],
listAll: (): {node: {id: string; type: NodeType}; type: ListType} => ({node: ROOT_NODE, type: ListType.SearchUsers}),
makeFilter: (query: string): {username: string} => ({username: query}),
ifEmpty: 'No users selected'
},
locations: {
type: 'ids',
label: 'Locations',
dataType: 'location',
scoreKeys: ['name'],
listAll: (
self: IssueFilterComponent
): {
staticSources: ({node: {id: string; type: NodeType}; type: ListType} | {node: {id: string; type: NodeType}; type: ListType})[];
} => ({
staticSources: [
{
node: {type: NodeType.Project, id: self.projectId},
type: ListType.Components
},
{
node: {type: NodeType.Project, id: self.projectId},
type: ListType.ComponentInterfaces
}
]
}),
makeFilter: (query: string): {title: string} => ({title: query}),
ifEmpty: 'No locations selected'
}
}
|
List of all possible issue filter predicates. Keyed by their name, each predicate has a type, label, and possibly additional options depending on their type. |
listQueries |
Type : ListQueries
|
Default value : {
[ListType.Projects]: {
[NodeType.Root]: (i, list, params) =>
i.q.projects.listProjects(listParams(params)).then((data) => ({
totalCount: data.projects.totalCount,
pageInfo: data.projects.pageInfo,
items: i.c.insertNodes(data.projects.nodes)
}))
},
[ListType.Components]: {
[NodeType.Project]: (i, list, params) =>
i.q.components.listProjectComponents(list.node.id, listParams(params)).then((data) => ({
totalCount: data.node.components.totalCount,
pageInfo: data.node.components.pageInfo,
items: i.c.insertNodes(data.node.components.nodes)
})),
[NodeType.Issue]: (i, list, params) =>
i.q.issues.listIssueComponents(list.node.id, listParams(params)).then((data) => ({
totalCount: data.node.components.totalCount,
pageInfo: data.node.components.pageInfo,
items: i.c.insertNodes(data.node.components.nodes)
})),
[NodeType.Label]: (i, list, params) =>
i.q.issues.listLabelComponents(list.node.id, listParams(params)).then((data) => ({
totalCount: data.node.components.totalCount,
pageInfo: data.node.components.pageInfo,
items: i.c.insertNodes(data.node.components.nodes)
}))
},
[ListType.ComponentInterfaces]: {
[NodeType.Project]: (i, list, params) =>
i.q.components.listProjectInterfaces(list.node.id, listParams(params)).then((data) => ({
totalCount: data.node.interfaces.totalCount,
pageInfo: data.node.interfaces.pageInfo,
items: i.c.insertNodes(data.node.interfaces.nodes)
}))
},
[ListType.Issues]: {
[NodeType.Project]: (i, list, params) =>
i.q.issues.listProjectIssues(list.node.id, listParams(params)).then((data) => ({
totalCount: data.node.issues.totalCount,
pageInfo: data.node.issues.pageInfo,
items: i.c.insertNodes(data.node.issues.nodes)
})),
[NodeType.Component]: (i, list, params) =>
i.q.issues.listComponentIssues(list.node.id, listParams(params)).then((data) => ({
totalCount: data.node.issues.totalCount,
pageInfo: data.node.issues.pageInfo,
items: i.c.insertNodes(data.node.issues.nodes)
}))
},
[ListType.IssuesOnLocation]: {
[NodeType.Component]: (i, list, params) =>
i.q.issues.listComponentIssuesOnLocation(list.node.id, listParams(params)).then((data) => ({
totalCount: data.node.issuesOnLocation.totalCount,
pageInfo: data.node.issuesOnLocation.pageInfo,
items: i.c.insertNodes(data.node.issuesOnLocation.nodes)
})),
[NodeType.ComponentInterface]: (i, list, params) =>
i.q.issues.listComponentInterfaceIssuesOnLocation(list.node.id, listParams(params)).then((data) => ({
totalCount: data.node.issuesOnLocation.totalCount,
pageInfo: data.node.issuesOnLocation.pageInfo,
items: i.c.insertNodes(data.node.issuesOnLocation.nodes)
}))
},
[ListType.TimelineItems]: {
[NodeType.Issue]: (i, list, params) =>
i.q.issues.listIssueTimelineItems(list.node.id, listParams(params)).then((data) => ({
totalCount: data.node.timeline.totalCount,
pageInfo: data.node.timeline.pageInfo,
items: i.c.insertNodes(data.node.timeline.nodes)
}))
},
[ListType.IssueLocations]: {
[NodeType.Issue]: (i, list, params) =>
i.q.issues.listIssueLocations(list.node.id, listParams(params)).then((data) => ({
totalCount: data.node.locations.totalCount,
pageInfo: data.node.locations.pageInfo,
items: i.c.insertNodes(data.node.locations.nodes)
}))
},
[ListType.Labels]: {
[NodeType.Project]: (i, list, params) =>
i.q.issues.listProjectLabels(list.node.id, listParams(params)).then((data) => ({
totalCount: data.node.labels.totalCount,
pageInfo: data.node.labels.pageInfo,
items: i.c.insertNodes(data.node.labels.nodes)
})),
[NodeType.Component]: (i, list, params) =>
i.q.issues.listComponentLabels(list.node.id, listParams(params)).then((data) => ({
totalCount: data.node.labels.totalCount,
pageInfo: data.node.labels.pageInfo,
items: i.c.insertNodes(data.node.labels.nodes)
})),
[NodeType.Issue]: (i, list, params) =>
i.q.issues.listIssueLabels(list.node.id, listParams(params)).then((data) => ({
totalCount: data.node.labels.totalCount,
pageInfo: data.node.labels.pageInfo,
items: i.c.insertNodes(data.node.labels.nodes)
}))
},
[ListType.Assignees]: {
[NodeType.Issue]: (i, list, params) =>
i.q.issues.listIssueAssignees(list.node.id, listParams(params)).then((data) => ({
totalCount: data.node.assignees.totalCount,
pageInfo: data.node.assignees.pageInfo,
items: i.c.insertNodes(data.node.assignees.nodes)
}))
},
[ListType.LinkedIssues]: {
[NodeType.Issue]: (i, list, params) =>
i.q.issues.listIssueLinksToIssues(list.node.id, listParams(params)).then((data) => ({
totalCount: data.node.linksToIssues.totalCount,
pageInfo: data.node.linksToIssues.pageInfo,
items: i.c.insertNodes(data.node.linksToIssues.nodes)
}))
},
[ListType.LinkedByIssues]: {
[NodeType.Issue]: (i, list, params) =>
i.q.issues.listIssueLinkedByIssues(list.node.id, listParams(params)).then((data) => ({
totalCount: data.node.linkedByIssues.totalCount,
pageInfo: data.node.linkedByIssues.pageInfo,
items: i.c.insertNodes(data.node.linkedByIssues.nodes)
}))
},
[ListType.SearchUsers]: {
[NodeType.Root]: (i, list, params) =>
i.q.users.searchUsers(params.filter as {username: string}).then((data) => ({
totalCount: data.length,
pageInfo: {
startCursor: data[0]?.id || null,
endCursor: data[data.length - 1]?.id || null,
hasNextPage: false,
hasPreviousPage: false
},
items: i.c.insertNodes(data)
}))
}
}
|
Available list queries. |
nodeQueries |
Type : NodeQueries
|
Default value : {
[NodeType.Project]: (i, id) => i.q.projects.getProject(id).then((data) => data.node),
[NodeType.Component]: (i, id) => i.q.components.getComponent(id).then((data) => data.node),
[NodeType.ComponentInterface]: (i, id) => i.q.components.getInterface(id).then((data) => data.node),
[NodeType.Issue]: (i, id) => i.q.issues.getIssueHeader(id).then((data) => data.node),
[NodeType.User]: (i, id) =>
id === CURRENT_USER_NODE.id ? i.q.users.currentUser().then((data) => data.currentUser) : Promise.reject(new Error('not implemented')),
[NodeType.Label]: (i, id) => i.q.issues.getLabel(id).then((data) => data.node)
}
|
Types of nodes that can be loaded directly. |
zeroPosition |
Type : object
|
Default value : {x: 0, y: 0}
|
The zero position on the graph |