Index

src/app/app.module.ts

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 }

src/app/graphql.module.ts

basic
Default value : setContext((operation, context) => ({ headers: { Accept: 'charset=utf-8' } }))
defaultOptions
Type : DefaultOptions
Default value : { query: { fetchPolicy: 'no-cache', errorPolicy: 'all' } }

This modules purpose is to provide define functions returning configurations for the automatic creation of ApolloClients for graphql communication with the backend. The key functions are providePublicApollo and provideDefaultApollo. The apollo instance constructed from providePublicApollo is only used for registering.

networkErrorToast
Type : Partial<IndividualConfig>
Default value : { timeOut: 5000, closeButton: true, positionClass: 'toast-top-center', enableHtml: true }

Congiuration for network error toast on register page.

src/app/data-dgql/query.ts

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

How long DataQuery will wait to debounce requests, if the undefined flag is set, in milliseconds.

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.

src/app/components/issue-label/issue-label.component.ts

colorTestCanvas
Default value : document.createElement('canvas')
colorTestCtx
Default value : colorTestCanvas.getContext('2d')

src/app/graphs/component-context-menu/component-context-menu.component.ts

COMPONENT_CONTEXT_MENU_DATA
Default value : new InjectionToken<ComponentContextMenuData>('COMPONENT_CONTEXT_MENU_DATA')

src/app/data-dgql/id.ts

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.

src/environments/environment.prod.ts

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'

src/environments/environment.ts

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'

src/app/issue-list/issue-filter.component.ts

listAllIssues
Default value : (self: IssueFilterComponent): {node: {id: string; type: NodeType}; type: ListType} => ({ node: {type: NodeType.Project, id: self.projectId}, type: ListType.Issues })

Returns the ListId for listing all project issues.

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.

src/app/data-dgql/load.ts

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.

queryList
Default value : (q: QueriesService, c: NodeCache) => async <T, F>(listId: ListId, params: ListParams<F>): Promise<ListResult<T>> => { const {node, type} = listId; if (!listQueries[type] || !listQueries[type][node.type]) { throw new Error(`${NodeType[node.type]} has no list ${ListType[type]}`); } const i = {q, c}; return (await listQueries[type][node.type](i, {node, type}, params)) as ListResult<T>; }
queryNode
Default value : (q: QueriesService) => async <T>(nodeId: NodeId): Promise<T> => { const {type, id} = nodeId; if (!nodeQueries[type]) { throw new Error(`${NodeType[type]} cannot be loaded directly`); } const i = {q}; return (await nodeQueries[type](i, id)) as T; }

Loads a node.

src/app/route-animations.ts

slider
Default value : trigger('routeAnimations', [transition('* => isRight', slideTo('right'))])

Describes an animation of sliding to to the right, used for the entry of the ComponentDetails component

src/app/graphs/issue-graph/issue-graph-nodes.ts

zeroPosition
Type : object
Default value : {x: 0, y: 0}

The zero position on the graph

results matching ""

    No results matching ""