[]
ReportDesigner.ResourceProvider
Defines the contract for a custom resource provider.
remarks
Implement this interface to control how external resources are listed and resolved.
example
const createProvider = (): ResourceProvider => ({
getReportsList: async () => [],
getThemesList: async () => [],
getImagesList: async () => [],
getMasterReportList: async () => [],
getStylesheetList: async () => [],
getResource: async () => null,
getResourceUri: (id) => id,
fork: () => createProvider(),
});
const provider = createProvider();
↳ ResourceProvider
▸ fork(reportName): ResourceLocator
Gets or sets a function that creates a child resource locator scoped to a report.
example
const locator = {} as ResourceLocator;
const child = locator.fork('subreport.rdlx-json');
| Name | Type | Description |
|---|---|---|
reportName |
string |
The report name or relative path used to scope the locator. |
A new resource locator instance.
ResourceLocator.fork
▸ getImagesList(): Promise<ImageResourceInfo[]>
Gets the list of images available in the designer.
example
import Cat from './resource/images/Cat.png';
import Dog from './resource/images/Dog.jpg';
const images = { Cat, Dog };
const getImagesList = async (): Promise<ImageResourceInfo[]> =>
Object.keys(images).map((image) => ({
id: `image://${image}`,
displayName: image,
mimeType: '',
thumbnail: '',
}));
const designer = new MESCIUS.ActiveReportsJS.ReportDesigner.Designer(
'#designer-host'
);
designer.setResourceProvider({ getImagesList });
Promise<ImageResourceInfo[]>
A promise that resolves to an array of images that users can insert into reports.
▸ getMasterReportList(): Promise<ReportResourceInfo[]>
Gets the list of master reports available in the designer.
example
import Master1 from './resource/masterReports/Master1.rdlx-json-master';
import Master2 from './resource/masterReports/Master2.rdlx-json-master';
const masterReports: Record<string, ReportResourceInfo> = { Master1, Master2 };
const getMasterReportList = async (): Promise<ReportResourceInfo[]> =>
Object.keys(masterReports).map((masterReport) => ({
id: `report://${masterReport}`,
displayName: masterReport,
}));
const designer = new MESCIUS.ActiveReportsJS.ReportDesigner.Designer(
'#designer-host'
);
designer.setResourceProvider({ getMasterReportList });
Promise<ReportResourceInfo[]>
A promise that resolves to an array of master reports that users can select.
▸ getReportsList(): Promise<ReportResourceInfo[]>
Gets the list of reports available in the designer.
example
import MSL from './resource/reports/MSL.rdlx-json';
import FPL from './resource/reports/FPL.rdlx-json';
const reports: Record<string, ReportResourceInfo> = { MSL, FPL };
const getReportsList = async (): Promise<ReportResourceInfo[]> =>
Object.keys(reports).map((report) => ({
id: `report://${report}`,
displayName: report,
}));
const designer = new MESCIUS.ActiveReportsJS.ReportDesigner.Designer(
'#designer-host'
);
designer.setResourceProvider({ getReportsList });
Promise<ReportResourceInfo[]>
A promise that resolves to an array of reports that users can open.
▸ getResource<T>(uri): Promise<null | T>
Gets or sets a function that fetches the resource identified by the given URI.
remarks
Resolve to null when the resource is not found and reject on lookup errors.
example
const getResource = (id: string) =>
fetch(getResourceUri(id)).then((response) => response.json());
| Name |
|---|
T |
| Name | Type | Description |
|---|---|---|
uri |
string |
The URI of the resource to fetch. |
Promise<null | T>
A promise that resolves to the resource content parsed as type T, or null if the resource is not found.
ResourceLocator.getResource
▸ getResourceUri(resourceID): string
Gets or sets a function that returns an absolute URI for a resource identifier.
example
const getResourceUri = (resourceID: string) => {
const mappings = [
{ prefix: 'report://', offset: 9, replacement: '/reports/' },
{
prefix: 'masterReport://',
offset: 15,
replacement: '/masterReports/',
},
{ prefix: 'theme://', offset: 8, replacement: '/themes/' },
{ prefix: 'stylesheet://', offset: 13, replacement: '/stylesheets/' },
{ prefix: 'library://', offset: 10, replacement: '/libraries/' },
];
const mapping = mappings.find((m) => resourceID.startsWith(m.prefix));
return mapping
? `${mapping.replacement}${resourceID.substring(mapping.offset)}`
: resourceID;
};
| Name | Type | Description |
|---|---|---|
resourceID |
string |
The resource identifier to locate. |
string
An absolute URI that can be used to fetch the resource.
ResourceLocator.getResourceUri
▸ getStylesheetList(): Promise<StylesheetResourceInfo[]>
Gets the list of stylesheets available in the designer.
example
import Light from './resource/stylesheets/Stylesheet-Light.rdlx-json-style';
import Dark from './resource/stylesheets/Stylesheet-Dark.rdlx-json-style';
const stylesheets = { Light, Dark };
const getStylesheetList = async (): Promise<StylesheetResourceInfo[]> =>
Object.entries(stylesheets).map(([name, stylesheet]) => ({
id: `stylesheet://${name}`,
content: stylesheet,
}));
const designer = new MESCIUS.ActiveReportsJS.ReportDesigner.Designer(
'#designer-host'
);
designer.setResourceProvider({ getStylesheetList });
Promise<StylesheetResourceInfo[]>
A promise that resolves to an array of stylesheet definitions that users can apply while editing reports.
▸ getThemesList(): Promise<ThemeResourceInfo[]>
Gets the list of themes available in the designer.
example
import Default from './resource/themes/Default.json';
import BlueForPrint from './resource/themes/BlueForPrint.json';
const themes: Record<string, ThemeResourceInfo> = { Default, BlueForPrint };
const getThemesList = async (): Promise<ThemeResourceInfo[]> =>
Object.keys(themes).map((name) => ({
id: `theme://${name}`,
displayName: name,
info: { ...themes[name].Theme.Colors },
}));
const designer = new MESCIUS.ActiveReportsJS.ReportDesigner.Designer(
'#designer-host'
);
designer.setResourceProvider({ getThemesList });
Promise<ThemeResourceInfo[]>
A promise that resolves to an array of themes that users can apply while editing reports.