vb-issue-fields-renderer-base
v1.8.0
Published
Package renders jira issue fields based on field type. It implements basic structure and logic, and allows components extending/replacing. ## Basic Fields renderer usage ```js // pseudocode import { FieldRenderer } from '@saasjetlib/issue-fields-renderer-
Downloads
5
Readme
Issue Fields renderer (base)
Package renders jira issue fields based on field type. It implements basic structure and logic, and allows components extending/replacing.
Basic Fields renderer usage
// pseudocode
import { FieldRenderer } from '@saasjetlib/issue-fields-renderer-base';
// https://bitbucket.org/saasjet/jira-api/src/master/src/api/jira/IssueFields.ts
const fields = await jiraApi.issueFields.getFields();
const issue = await jiraApi.issues.getIssue('DEV-123');
const fieldRenderer = new FieldRenderer(fields, { tz: moment.tz(), baseUrl: "https://<name>.atlassian.net" });
const renderedField = fieldRenderer.render(fieldId, {
issue,
tz: tzOverride,
fieldData, // optional, will be used as field data instead off 'issue.fields[fieldId]' if passed.
... // any other parameters which will be added to params and available
// in the specific field renderer's render method.
});
console.log(renderedField);
Add/override specific field renderers
import { FieldRenderer, BaseField, AssigneeField } from '@saasjetlib/issue-fields-renderer-base';
// https://bitbucket.org/saasjet/jira-api/src/master/src/api/jira/IssueFields.ts
const fields = await jiraApi.issueFields.getFields();
const issue = await jiraApi.issues.getIssue('DEV-123');
class MyTypeField extends BaseField {
match(fieldConfig) {
return fieldConfig?.schema?.type === 'mytype';
}
render(field: MyType, params) {
const { tz, baseUrl, issue } = params;
return `${field.myProp} - ${tz} - from issue ${issue.key} on ${baseUrl}`;
}
}
class MyAssigneeField extends AssigneeField {
renderEmptyItem() {
return 'U N A S S I G N E D';
}
}
const fieldRenderer = new FieldRenderer(
fields,
{ tz: moment.tz(), baseUrl: "https://<name>.atlassian.net" },
{
assignee: new MyAssigneeField(),
myType: new MyTypeField(),
}
);Field renderers
export const baseRenderers = {
aggregatetimeoriginalestimate: new AggregatetimeoriginalestimateField(),
aggregatetimeestimate: new AggregatetimeestimateField(),
aggregatetimespent: new AggregatetimespentField(),
array: new ArrayField(),
asset: new AssetField(),
attachment: new AttachmentField(),
assignee: new AssigneeField(),
component: new ComponentField(),
creator: new CreatorField(),
datetime: new DatetimeField(),
group: new GroupField(),
epicLink: new EpicLinkField(),
issuekey: new IssuekeyField(),
issuelinks: new IssuelinksField(),
issuetype: new IssuetypeField(),
labels: new LabelsField(),
option: new OptionField(),
optionWithChild: new OptionWithChildField(),
parent: new ParentField(),
priority: new PriorityField(),
project: new ProjectField(),
reporter: new ReporterField(),
resolution: new ResolutionField(),
requesttype: new RequesttypeField(),
requestLanguage: new RequestLanguageField(),
sprint: new SprintField(),
status: new StatusField(),
statusCategory: new StatusCategoryField(),
string: new StringField(),
timeestimate: new TimeestimateField(),
timespent: new TimespentField(),
timetracking: new TimetrackingField(),
url: new UrlField(),
user: new UserField(),
version: new VersionField(),
watches: new WatchesField(),
workratio: new WorkratioField(),
default: new DefaultField(),
};