UNPKG

6.8 kBPlain TextView Raw
1import {ICellRendererComp} from "./cellRenderers/iCellRenderer";
2import {Autowired, Bean} from "../context/context";
3import {ComponentRecipes} from "../components/framework/componentRecipes";
4import {ColDef} from "../entities/colDef";
5import {GroupCellRendererParams} from "./cellRenderers/groupCellRenderer";
6import {ComponentResolver, ComponentSource, ResolvedComponent} from "../components/framework/componentResolver";
7import {_, Promise} from "../utils";
8import {GridOptionsWrapper} from "../gridOptionsWrapper";
9import {IRichCellEditorParams} from "../interfaces/iRichCellEditorParams";
10import {ISetFilterParams} from "../interfaces/iSetFilterParams";
11
12/** Class to use a cellRenderer. */
13@Bean('cellRendererService')
14export class CellRendererService {
15 @Autowired('componentRecipes') private componentRecipes: ComponentRecipes;
16 @Autowired('componentResolver') private componentResolver: ComponentResolver;
17 @Autowired('gridOptionsWrapper') private gridOptionsWrapper: GridOptionsWrapper;
18
19 public useCellRenderer(
20 target: ColDef,
21 eTarget: HTMLElement,
22 params: any
23 ): Promise<ICellRendererComp> {
24 let cellRendererPromise: Promise<ICellRendererComp> = this.componentRecipes.newCellRenderer (target, params);
25 if (cellRendererPromise != null) {
26 cellRendererPromise.then(cellRenderer=> {
27 if (cellRenderer == null) {
28 eTarget.innerText = params.valueFormatted != null ? params.valueFormatted : params.value;
29 } else {
30 this.bindToHtml(cellRendererPromise, eTarget);
31 }
32 });
33 } else {
34 eTarget.innerText = params.valueFormatted != null ? params.valueFormatted : params.value;
35 }
36 return cellRendererPromise;
37 }
38
39 public useFilterCellRenderer(
40 target: ColDef,
41 eTarget: HTMLElement,
42 params: any
43 ): Promise<ICellRendererComp> {
44 let cellRendererPromise: Promise<ICellRendererComp> = this.componentRecipes.newCellRenderer((<ISetFilterParams>target.filterParams), params);
45 if (cellRendererPromise != null) {
46 this.bindToHtml(cellRendererPromise, eTarget);
47 } else {
48 if(params.valueFormatted == null && params.value == null) {
49 let localeTextFunc = this.gridOptionsWrapper.getLocaleTextFunc();
50 eTarget.innerText = '(' + localeTextFunc('blanks', 'Blanks') + ')';
51 } else {
52 eTarget.innerText = params.valueFormatted != null ? params.valueFormatted : params.value;
53 }
54 }
55 return cellRendererPromise;
56 }
57
58 public useRichSelectCellRenderer(
59 target: ColDef,
60 eTarget: HTMLElement,
61 params: any
62 ): Promise<ICellRendererComp> {
63 let cellRendererPromise: Promise<ICellRendererComp> = this.componentRecipes.newCellRenderer((<IRichCellEditorParams>target.cellEditorParams), params);
64 if (cellRendererPromise != null) {
65 this.bindToHtml(cellRendererPromise, eTarget);
66 } else {
67 eTarget.innerText = params.valueFormatted != null ? params.valueFormatted : params.value;
68 }
69 return cellRendererPromise;
70 }
71
72 public useInnerCellRenderer(
73 target: GroupCellRendererParams,
74 originalColumn: ColDef,
75 eTarget: HTMLElement,
76 params: any
77 ): Promise<ICellRendererComp> {
78 let rendererToUsePromise: Promise<ICellRendererComp> = null;
79 let componentToUse: ResolvedComponent<any, any> = this.componentResolver.getComponentToUse(target, "innerRenderer", null);
80
81 if (componentToUse && componentToUse.component != null && componentToUse.source != ComponentSource.DEFAULT) {
82 //THERE IS ONE INNER CELL RENDERER HARDCODED IN THE COLDEF FOR THIS GROUP COLUMN
83 rendererToUsePromise = this.componentRecipes.newInnerCellRenderer(target, params);
84 } else {
85 let otherRenderer: ResolvedComponent<any, any> = this.componentResolver.getComponentToUse(originalColumn, "cellRenderer", null);
86 if (otherRenderer && otherRenderer.source != ComponentSource.DEFAULT) {
87 //Only if the original column is using an specific renderer, it it is a using a DEFAULT one
88 //ignore it
89 //THIS COMES FROM A COLUMN WHICH HAS BEEN GROUPED DYNAMICALLY, WE REUSE ITS RENDERER
90 rendererToUsePromise = this.componentRecipes.newCellRenderer(originalColumn, params);
91 } else if (otherRenderer && otherRenderer.source == ComponentSource.DEFAULT && (_.get(originalColumn, 'cellRendererParams.innerRenderer', null))) {
92 //EDGE CASE - THIS COMES FROM A COLUMN WHICH HAS BEEN GROUPED DYNAMICALLY, THAT HAS AS RENDERER 'group'
93 //AND HAS A INNER CELL RENDERER
94 rendererToUsePromise = this.componentRecipes.newInnerCellRenderer(originalColumn.cellRendererParams, params);
95 } else {
96 //This forces the retrieval of the default plain cellRenderer that just renders the values.
97 rendererToUsePromise = this.componentRecipes.newCellRenderer({}, params);
98 }
99 }
100 if (rendererToUsePromise != null) {
101 rendererToUsePromise.then(rendererToUse=> {
102 if (rendererToUse == null) {
103 eTarget.innerText = params.valueFormatted != null ? params.valueFormatted : params.value;
104 return;
105 }
106 this.bindToHtml(rendererToUsePromise, eTarget);
107 });
108 } else {
109 eTarget.innerText = params.valueFormatted != null ? params.valueFormatted : params.value;
110 }
111 return rendererToUsePromise;
112 }
113
114 public useFullWidthGroupRowInnerCellRenderer(
115 eTarget: HTMLElement,
116 params: any
117 ): Promise<ICellRendererComp> {
118 let cellRendererPromise: Promise<ICellRendererComp> = this.componentRecipes.newFullWidthGroupRowInnerCellRenderer (params);
119 if (cellRendererPromise != null) {
120 this.bindToHtml(cellRendererPromise, eTarget);
121 } else {
122 eTarget.innerText = params.valueFormatted != null ? params.valueFormatted : params.value;
123 }
124 return cellRendererPromise;
125 }
126
127 public bindToHtml(cellRendererPromise: Promise<ICellRendererComp>, eTarget: HTMLElement) {
128 cellRendererPromise.then(cellRenderer=> {
129 let gui: HTMLElement|string = cellRenderer.getGui();
130 if (gui != null) {
131 if (typeof gui == 'object') {
132 eTarget.appendChild(gui);
133 } else {
134 eTarget.innerHTML = gui;
135 }
136 }
137
138 });
139 return cellRendererPromise;
140 }
141}
\No newline at end of file