I have started my working on creating a new app with UI kit. And I got stuck when I have added two modules in my app. Now anything is not working. I have tried many ways and erverytime it is failed. Please help me to resolve the issue to run this.
In this app these are the files that I have updated.
Manifest.yml
modules:
jira:projectPage:
- key: newapp-hello-world-project-page
resource: main
resolver:
function: projectPageHandler
render: native
title: NewApp
jira:issuePanel:
- key: hello-world-issue-panel
resource: main
resolver:
function: issueViewHandler
render: native
title: Hello World!
icon: https://developer.atlassian.com/platform/forge/images/icons/issue-panel-icon.svg
function:
- key: projectPageHandler
handler: resolver.projectPageHandler
- key: issueViewHandler
handler: resolver.issueViewHandler
resources:
- key: main
path: src/frontend/index.jsx
app:
runtime:
name: nodejs20.x
id: ari:cloud:ecosystem::app/af2cf143-f784-4f03-a0e4-ae95ee536666
permissions:
scopes:
- 'read:jira-work'
Index.jsx
import React, { useEffect, useState } from 'react';
import ForgeReconciler, { Text, useProductContext } from '@forge/react';
import { invoke, requestJira } from '@forge/bridge';
const ProjectPageApp = () => {
const context = useProductContext();
// State to keep track of the number of issues in the project
const [issueCount, setIssueCount] = React.useState(null);
const fetchIssuesForProject = async () => {
try {
const res = await requestJira(`/rest/api/3/search`);
const data = await res.json();
if (!res.ok) {
console.error('Error fetching issues:', res.statusText);
return;
}
return data.total;
} catch (error) {
console.error('An unexpected error occurred while fetching issues:', error);
}
};
const [data, setData] = useState(null);
React.useEffect(() => {
invoke('getText', { example: 'my-invoke-variable' }).then(setData);
if (context) {
fetchIssuesForProject().then(setIssueCount);
}
}, [context]);
return (
<>
<Text>Number of issues:{issueCount}</Text>
<Text>{data ? data : 'Loading...'}</Text>
</>
);
};
const IssueViewApp = () => {
const context = useProductContext();
return (
<div>
<Text>Hello, world! This is the Issue View module.</Text>
<Text>Issue Key: {context.extension.issue.key}</Text>
</div>
);
};
// Resolver for Project Page
export const projectPageHandler = () => {
ForgeReconciler.render(<ProjectPageApp />);
};
// Resolver for Issue View
export const issueViewHandler = () => {
ForgeReconciler.render(<IssueViewApp />);
};
resolvers/index.js
import Resolver from '@forge/resolver';
const resolver = new Resolver();
// Resolver for Project Page Module
resolver.define('projectPageHandler', (req) => {
// Logic specific to Project Page
console.log('Project Page Resolver invoked');
return 'Hello from Project Page!';
});
// Resolver for Issue Panel Module
resolver.define('issuePanelHandler', (req) => {
// Logic specific to Issue Panel
console.log('Issue Panel Resolver invoked');
return 'Hello from Issue Panel!';
});
// Exporting both handlers
export const projectPageHandler = resolver.getDefinitions();
export const issueViewHandler = resolver.getDefinitions();
src/index.js
export { handler } from './resolvers/index';
Files present in app
Please help me to run this app with both modules.