1 | import {ICellRendererComp} from "./cellRenderers/iCellRenderer";
|
2 | import {Autowired, Bean} from "../context/context";
|
3 | import {ComponentRecipes} from "../components/framework/componentRecipes";
|
4 | import {ColDef} from "../entities/colDef";
|
5 | import {GroupCellRendererParams} from "./cellRenderers/groupCellRenderer";
|
6 | import {ComponentResolver, ComponentSource, ResolvedComponent} from "../components/framework/componentResolver";
|
7 | import {_, Promise} from "../utils";
|
8 | import {GridOptionsWrapper} from "../gridOptionsWrapper";
|
9 | import {IRichCellEditorParams} from "../interfaces/iRichCellEditorParams";
|
10 | import {ISetFilterParams} from "../interfaces/iSetFilterParams";
|
11 |
|
12 |
|
13 | @Bean('cellRendererService')
|
14 | export 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 |
|
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 |
|
88 |
|
89 |
|
90 | rendererToUsePromise = this.componentRecipes.newCellRenderer(originalColumn, params);
|
91 | } else if (otherRenderer && otherRenderer.source == ComponentSource.DEFAULT && (_.get(originalColumn, 'cellRendererParams.innerRenderer', null))) {
|
92 |
|
93 |
|
94 | rendererToUsePromise = this.componentRecipes.newInnerCellRenderer(originalColumn.cellRendererParams, params);
|
95 | } else {
|
96 |
|
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 |