gridstack 8.1.1 → 8.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -11
- package/angular/.editorconfig +16 -0
- package/angular/.vscode/extensions.json +4 -0
- package/angular/.vscode/launch.json +20 -0
- package/angular/.vscode/tasks.json +42 -0
- package/{dist/ng → angular}/README.md +170 -154
- package/angular/README_build.md +27 -0
- package/angular/angular.json +132 -0
- package/angular/package.json +40 -0
- package/angular/projects/demo/.browserslistrc +16 -0
- package/angular/projects/demo/src/app/app.component.css +11 -0
- package/angular/projects/demo/src/app/app.component.html +78 -0
- package/angular/projects/demo/src/app/app.component.spec.ts +25 -0
- package/angular/projects/demo/src/app/app.component.ts +208 -0
- package/angular/projects/demo/src/app/app.module.ts +39 -0
- package/angular/projects/demo/src/app/dummy.component.ts +35 -0
- package/angular/projects/demo/src/app/ngFor.ts +131 -0
- package/angular/projects/demo/src/app/ngFor_cmd.ts +106 -0
- package/angular/projects/demo/src/app/simple.ts +46 -0
- package/angular/projects/demo/src/assets/.gitkeep +0 -0
- package/angular/projects/demo/src/environments/environment.prod.ts +3 -0
- package/angular/projects/demo/src/environments/environment.ts +16 -0
- package/angular/projects/demo/src/favicon.ico +0 -0
- package/angular/projects/demo/src/index.html +13 -0
- package/angular/projects/demo/src/main.ts +12 -0
- package/angular/projects/demo/src/polyfills.ts +53 -0
- package/angular/projects/demo/src/styles.css +4 -0
- package/angular/projects/demo/src/test.ts +26 -0
- package/angular/projects/demo/tsconfig.app.json +15 -0
- package/angular/projects/demo/tsconfig.spec.json +18 -0
- package/angular/projects/lib/README.md +24 -0
- package/angular/projects/lib/ng-package.json +7 -0
- package/angular/projects/lib/package.json +11 -0
- package/angular/projects/lib/src/lib/base-widget.ts +28 -0
- package/angular/projects/lib/src/lib/gridstack-item.component.ts +78 -0
- package/angular/projects/lib/src/lib/gridstack.component.ts +287 -0
- package/angular/projects/lib/src/lib/gridstack.module.ts +32 -0
- package/angular/projects/lib/src/public-api.ts +8 -0
- package/angular/projects/lib/src/test.ts +27 -0
- package/angular/projects/lib/tsconfig.lib.json +15 -0
- package/angular/projects/lib/tsconfig.lib.prod.json +10 -0
- package/angular/projects/lib/tsconfig.spec.json +17 -0
- package/dist/angular/README.md +170 -0
- package/dist/angular/esm2020/gridstack-angular.mjs +5 -0
- package/dist/angular/esm2020/lib/base-widget.mjs +30 -0
- package/dist/angular/esm2020/lib/gridstack-item.component.mjs +68 -0
- package/dist/angular/esm2020/lib/gridstack.component.mjs +278 -0
- package/dist/angular/esm2020/lib/gridstack.module.mjs +39 -0
- package/dist/angular/esm2020/public-api.mjs +8 -0
- package/dist/angular/fesm2015/gridstack-angular.mjs +418 -0
- package/dist/angular/fesm2015/gridstack-angular.mjs.map +1 -0
- package/dist/angular/fesm2020/gridstack-angular.mjs +413 -0
- package/dist/angular/fesm2020/gridstack-angular.mjs.map +1 -0
- package/dist/angular/index.d.ts +5 -0
- package/dist/angular/lib/base-widget.d.ts +16 -0
- package/dist/{ng → angular/lib}/gridstack-item.component.d.ts +37 -29
- package/dist/{ng → angular/lib}/gridstack.component.d.ts +129 -118
- package/dist/angular/lib/gridstack.module.d.ts +10 -0
- package/dist/angular/package.json +31 -0
- package/dist/angular/public-api.d.ts +4 -0
- package/dist/angular/src/base-widget.ts +28 -0
- package/dist/angular/src/gridstack-item.component.ts +78 -0
- package/dist/angular/src/gridstack.component.ts +287 -0
- package/dist/angular/src/gridstack.module.ts +32 -0
- package/dist/dd-base-impl.d.ts +1 -1
- package/dist/dd-base-impl.js +1 -1
- package/dist/dd-base-impl.js.map +1 -1
- package/dist/dd-draggable.d.ts +1 -1
- package/dist/dd-draggable.js +1 -1
- package/dist/dd-draggable.js.map +1 -1
- package/dist/dd-droppable.d.ts +1 -1
- package/dist/dd-droppable.js +1 -1
- package/dist/dd-droppable.js.map +1 -1
- package/dist/dd-element.d.ts +1 -1
- package/dist/dd-element.js +1 -1
- package/dist/dd-element.js.map +1 -1
- package/dist/dd-gridstack.d.ts +1 -1
- package/dist/dd-gridstack.js +1 -1
- package/dist/dd-gridstack.js.map +1 -1
- package/dist/dd-manager.d.ts +1 -1
- package/dist/dd-manager.js +1 -1
- package/dist/dd-manager.js.map +1 -1
- package/dist/dd-resizable-handle.d.ts +1 -1
- package/dist/dd-resizable-handle.js +1 -1
- package/dist/dd-resizable-handle.js.map +1 -1
- package/dist/dd-resizable.d.ts +1 -1
- package/dist/dd-resizable.js +1 -1
- package/dist/dd-resizable.js.map +1 -1
- package/dist/dd-touch.d.ts +1 -1
- package/dist/dd-touch.js +1 -1
- package/dist/dd-touch.js.map +1 -1
- package/dist/es5/dd-base-impl.d.ts +1 -1
- package/dist/es5/dd-base-impl.js +1 -1
- package/dist/es5/dd-base-impl.js.map +1 -1
- package/dist/es5/dd-draggable.d.ts +1 -1
- package/dist/es5/dd-draggable.js +1 -1
- package/dist/es5/dd-draggable.js.map +1 -1
- package/dist/es5/dd-droppable.d.ts +1 -1
- package/dist/es5/dd-droppable.js +1 -1
- package/dist/es5/dd-droppable.js.map +1 -1
- package/dist/es5/dd-element.d.ts +1 -1
- package/dist/es5/dd-element.js +1 -1
- package/dist/es5/dd-element.js.map +1 -1
- package/dist/es5/dd-gridstack.d.ts +1 -1
- package/dist/es5/dd-gridstack.js +1 -1
- package/dist/es5/dd-gridstack.js.map +1 -1
- package/dist/es5/dd-manager.d.ts +1 -1
- package/dist/es5/dd-manager.js +1 -1
- package/dist/es5/dd-manager.js.map +1 -1
- package/dist/es5/dd-resizable-handle.d.ts +1 -1
- package/dist/es5/dd-resizable-handle.js +1 -1
- package/dist/es5/dd-resizable-handle.js.map +1 -1
- package/dist/es5/dd-resizable.d.ts +1 -1
- package/dist/es5/dd-resizable.js +1 -1
- package/dist/es5/dd-resizable.js.map +1 -1
- package/dist/es5/dd-touch.d.ts +1 -1
- package/dist/es5/dd-touch.js +1 -1
- package/dist/es5/dd-touch.js.map +1 -1
- package/dist/es5/gridstack-all.js +1 -1
- package/dist/es5/gridstack-all.js.LICENSE.txt +1 -1
- package/dist/es5/gridstack-all.js.map +1 -1
- package/dist/es5/gridstack-engine.d.ts +1 -1
- package/dist/es5/gridstack-engine.js +1 -1
- package/dist/es5/gridstack-engine.js.map +1 -1
- package/dist/es5/gridstack-poly.js +1 -1
- package/dist/es5/gridstack.d.ts +8 -5
- package/dist/es5/gridstack.js +13 -7
- package/dist/es5/gridstack.js.map +1 -1
- package/dist/es5/types.d.ts +1 -1
- package/dist/es5/types.js +1 -1
- package/dist/es5/types.js.map +1 -1
- package/dist/es5/utils.d.ts +1 -1
- package/dist/es5/utils.js +1 -1
- package/dist/es5/utils.js.map +1 -1
- package/dist/gridstack-all.js +1 -1
- package/dist/gridstack-all.js.LICENSE.txt +1 -1
- package/dist/gridstack-all.js.map +1 -1
- package/dist/gridstack-engine.d.ts +1 -1
- package/dist/gridstack-engine.js +1 -1
- package/dist/gridstack-engine.js.map +1 -1
- package/dist/gridstack.css +1 -1
- package/dist/gridstack.d.ts +8 -5
- package/dist/gridstack.js +13 -7
- package/dist/gridstack.js.map +1 -1
- package/dist/src/gridstack-extra.scss +3 -3
- package/dist/src/gridstack.scss +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +1 -1
- package/dist/utils.js.map +1 -1
- package/doc/CHANGES.md +11 -1
- package/package.json +3 -3
- package/dist/ng/gridstack-item.component.js +0 -65
- package/dist/ng/gridstack-item.component.js.map +0 -1
- package/dist/ng/gridstack.component.js +0 -245
- package/dist/ng/gridstack.component.js.map +0 -1
|
@@ -1,118 +1,129 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* gridstack.component.ts 8.
|
|
3
|
-
* Copyright (c) 2022 Alain Dumesny - see GridStack root license
|
|
4
|
-
*/
|
|
5
|
-
import { AfterContentInit, ElementRef, EventEmitter, OnDestroy, OnInit, QueryList, Type, ViewContainerRef } from '@angular/core';
|
|
6
|
-
import { GridHTMLElement, GridItemHTMLElement, GridStack, GridStackNode, GridStackOptions, GridStackWidget } from 'gridstack';
|
|
7
|
-
import { GridstackItemComponent } from './gridstack-item.component';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
export
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
export interface
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
1
|
+
/**
|
|
2
|
+
* gridstack.component.ts 8.2.0
|
|
3
|
+
* Copyright (c) 2022 Alain Dumesny - see GridStack root license
|
|
4
|
+
*/
|
|
5
|
+
import { AfterContentInit, ElementRef, EventEmitter, OnDestroy, OnInit, QueryList, Type, ViewContainerRef, ComponentRef } from '@angular/core';
|
|
6
|
+
import { GridHTMLElement, GridItemHTMLElement, GridStack, GridStackNode, GridStackOptions, GridStackWidget } from 'gridstack';
|
|
7
|
+
import { GridstackItemComponent } from './gridstack-item.component';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
/** events handlers emitters signature for different events */
|
|
10
|
+
export declare type eventCB = {
|
|
11
|
+
event: Event;
|
|
12
|
+
};
|
|
13
|
+
export declare type elementCB = {
|
|
14
|
+
event: Event;
|
|
15
|
+
el: GridItemHTMLElement;
|
|
16
|
+
};
|
|
17
|
+
export declare type nodesCB = {
|
|
18
|
+
event: Event;
|
|
19
|
+
nodes: GridStackNode[];
|
|
20
|
+
};
|
|
21
|
+
export declare type droppedCB = {
|
|
22
|
+
event: Event;
|
|
23
|
+
previousNode: GridStackNode;
|
|
24
|
+
newNode: GridStackNode;
|
|
25
|
+
};
|
|
26
|
+
export declare type NgCompInputs = {
|
|
27
|
+
[key: string]: any;
|
|
28
|
+
};
|
|
29
|
+
/** extends to store Ng Component selector, instead/inAddition to content */
|
|
30
|
+
export interface NgGridStackWidget extends GridStackWidget {
|
|
31
|
+
selector?: string;
|
|
32
|
+
input?: NgCompInputs;
|
|
33
|
+
}
|
|
34
|
+
export interface NgGridStackNode extends GridStackNode {
|
|
35
|
+
selector?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface NgGridStackOptions extends GridStackOptions {
|
|
38
|
+
children?: NgGridStackWidget[];
|
|
39
|
+
subGridOpts?: NgGridStackOptions;
|
|
40
|
+
}
|
|
41
|
+
/** store element to Ng Class pointer back */
|
|
42
|
+
export interface GridCompHTMLElement extends GridHTMLElement {
|
|
43
|
+
_gridComp?: GridstackComponent;
|
|
44
|
+
}
|
|
45
|
+
/** selector string to runtime Type mapping */
|
|
46
|
+
export declare type SelectorToType = {
|
|
47
|
+
[key: string]: Type<Object>;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* HTML Component Wrapper for gridstack, in combination with GridstackItemComponent for the items
|
|
51
|
+
*/
|
|
52
|
+
export declare class GridstackComponent implements OnInit, AfterContentInit, OnDestroy {
|
|
53
|
+
private readonly elementRef;
|
|
54
|
+
/** track list of TEMPLATE grid items so we can sync between DOM and GS internals */
|
|
55
|
+
gridstackItems?: QueryList<GridstackItemComponent>;
|
|
56
|
+
/** container to append items dynamically */
|
|
57
|
+
container?: ViewContainerRef;
|
|
58
|
+
/** initial options for creation of the grid */
|
|
59
|
+
set options(val: GridStackOptions);
|
|
60
|
+
/** return the current running options */
|
|
61
|
+
get options(): GridStackOptions;
|
|
62
|
+
/** true while ng-content with 'no-item-content' should be shown when last item is removed from a grid */
|
|
63
|
+
isEmpty?: boolean;
|
|
64
|
+
/** individual list of GridStackEvent callbacks handlers as output
|
|
65
|
+
* otherwise use this.grid.on('name1 name2 name3', callback) to handle multiple at once
|
|
66
|
+
* see https://github.com/gridstack/gridstack.js/blob/master/demo/events.js#L4
|
|
67
|
+
*
|
|
68
|
+
* Note: camel casing and 'CB' added at the end to prevent @angular-eslint/no-output-native
|
|
69
|
+
* eg: 'change' would trigger the raw CustomEvent so use different name.
|
|
70
|
+
*/
|
|
71
|
+
addedCB: EventEmitter<nodesCB>;
|
|
72
|
+
changeCB: EventEmitter<nodesCB>;
|
|
73
|
+
disableCB: EventEmitter<eventCB>;
|
|
74
|
+
dragCB: EventEmitter<elementCB>;
|
|
75
|
+
dragStartCB: EventEmitter<elementCB>;
|
|
76
|
+
dragStopCB: EventEmitter<elementCB>;
|
|
77
|
+
droppedCB: EventEmitter<droppedCB>;
|
|
78
|
+
enableCB: EventEmitter<eventCB>;
|
|
79
|
+
removedCB: EventEmitter<nodesCB>;
|
|
80
|
+
resizeCB: EventEmitter<elementCB>;
|
|
81
|
+
resizeStartCB: EventEmitter<elementCB>;
|
|
82
|
+
resizeStopCB: EventEmitter<elementCB>;
|
|
83
|
+
/** return the native element that contains grid specific fields as well */
|
|
84
|
+
get el(): GridCompHTMLElement;
|
|
85
|
+
/** return the GridStack class */
|
|
86
|
+
get grid(): GridStack | undefined;
|
|
87
|
+
/** ComponentRef of ourself - used by dynamic object to correctly get removed */
|
|
88
|
+
ref: ComponentRef<GridstackComponent> | undefined;
|
|
89
|
+
/**
|
|
90
|
+
* stores the selector -> Type mapping, so we can create items dynamically from a string.
|
|
91
|
+
* Unfortunately Ng doesn't provide public access to that mapping.
|
|
92
|
+
*/
|
|
93
|
+
static selectorToType: SelectorToType;
|
|
94
|
+
/** add a list of ng Component to be mapped to selector */
|
|
95
|
+
static addComponentToSelectorType(typeList: Array<Type<Object>>): void;
|
|
96
|
+
/** return the ng Component selector */
|
|
97
|
+
static getSelector(type: Type<Object>): string;
|
|
98
|
+
private _options?;
|
|
99
|
+
private _grid?;
|
|
100
|
+
private loaded?;
|
|
101
|
+
private ngUnsubscribe;
|
|
102
|
+
constructor(elementRef: ElementRef<GridCompHTMLElement>);
|
|
103
|
+
ngOnInit(): void;
|
|
104
|
+
/** wait until after all DOM is ready to init gridstack children (after angular ngFor and sub-components run first) */
|
|
105
|
+
ngAfterContentInit(): void;
|
|
106
|
+
ngOnDestroy(): void;
|
|
107
|
+
/**
|
|
108
|
+
* called when the TEMPLATE list of items changes - get a list of nodes and
|
|
109
|
+
* update the layout accordingly (which will take care of adding/removing items changed by Angular)
|
|
110
|
+
*/
|
|
111
|
+
updateAll(): void;
|
|
112
|
+
/** check if the grid is empty, if so show alternative content */
|
|
113
|
+
checkEmpty(): void;
|
|
114
|
+
/** get all known events as easy to use Outputs for convenience */
|
|
115
|
+
private hookEvents;
|
|
116
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GridstackComponent, never>;
|
|
117
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GridstackComponent, "gridstack", never, { "options": "options"; "isEmpty": "isEmpty"; }, { "addedCB": "addedCB"; "changeCB": "changeCB"; "disableCB": "disableCB"; "dragCB": "dragCB"; "dragStartCB": "dragStartCB"; "dragStopCB": "dragStopCB"; "droppedCB": "droppedCB"; "enableCB": "enableCB"; "removedCB": "removedCB"; "resizeCB": "resizeCB"; "resizeStartCB": "resizeStartCB"; "resizeStopCB": "resizeStopCB"; }, ["gridstackItems"], ["[empty-content]", "*"], false>;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* can be used when a new item needs to be created, which we do as a Angular component, or deleted (skip)
|
|
121
|
+
**/
|
|
122
|
+
export declare function gsCreateNgComponents(host: GridCompHTMLElement | HTMLElement, w: NgGridStackWidget | GridStackNode, add: boolean, isGrid: boolean): HTMLElement | undefined;
|
|
123
|
+
/**
|
|
124
|
+
* called for each item in the grid - check if additional information needs to be saved.
|
|
125
|
+
* Note: since this is options minus gridstack private members using Utils.removeInternalForSave(),
|
|
126
|
+
* this typically doesn't need to do anything. However your custom Component @Input() are now supported
|
|
127
|
+
* using BaseWidget.serialize()
|
|
128
|
+
*/
|
|
129
|
+
export declare function gsSaveAdditionalNgInfo(n: NgGridStackNode, w: NgGridStackWidget): void;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import * as i1 from "./gridstack.component";
|
|
3
|
+
import * as i2 from "./gridstack-item.component";
|
|
4
|
+
import * as i3 from "@angular/common";
|
|
5
|
+
export declare class GridstackModule {
|
|
6
|
+
constructor();
|
|
7
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GridstackModule, never>;
|
|
8
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<GridstackModule, [typeof i1.GridstackComponent, typeof i2.GridstackItemComponent], [typeof i3.CommonModule], [typeof i1.GridstackComponent, typeof i2.GridstackItemComponent]>;
|
|
9
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<GridstackModule>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "gridstack-angular",
|
|
3
|
+
"version": "8.2.0",
|
|
4
|
+
"peerDependencies": {
|
|
5
|
+
"@angular/common": "^14.2.0",
|
|
6
|
+
"@angular/core": "^14.2.0"
|
|
7
|
+
},
|
|
8
|
+
"dependencies": {
|
|
9
|
+
"tslib": "^2.3.0"
|
|
10
|
+
},
|
|
11
|
+
"module": "fesm2015/gridstack-angular.mjs",
|
|
12
|
+
"es2020": "fesm2020/gridstack-angular.mjs",
|
|
13
|
+
"esm2020": "esm2020/gridstack-angular.mjs",
|
|
14
|
+
"fesm2020": "fesm2020/gridstack-angular.mjs",
|
|
15
|
+
"fesm2015": "fesm2015/gridstack-angular.mjs",
|
|
16
|
+
"typings": "index.d.ts",
|
|
17
|
+
"exports": {
|
|
18
|
+
"./package.json": {
|
|
19
|
+
"default": "./package.json"
|
|
20
|
+
},
|
|
21
|
+
".": {
|
|
22
|
+
"types": "./index.d.ts",
|
|
23
|
+
"esm2020": "./esm2020/gridstack-angular.mjs",
|
|
24
|
+
"es2020": "./fesm2020/gridstack-angular.mjs",
|
|
25
|
+
"es2015": "./fesm2015/gridstack-angular.mjs",
|
|
26
|
+
"node": "./fesm2015/gridstack-angular.mjs",
|
|
27
|
+
"default": "./fesm2020/gridstack-angular.mjs"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"sideEffects": false
|
|
31
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* gridstack-item.component.ts 8.2.0
|
|
3
|
+
* Copyright (c) 2022 Alain Dumesny - see GridStack root license
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Base interface that all widgets need to implement in order for GridstackItemComponent to correctly save/load/delete/..
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { Injectable } from '@angular/core';
|
|
11
|
+
import { NgCompInputs, NgGridStackWidget } from './gridstack.component';
|
|
12
|
+
|
|
13
|
+
@Injectable()
|
|
14
|
+
export abstract class BaseWidget {
|
|
15
|
+
/**
|
|
16
|
+
* REDEFINE to return an object representing the data needed to re-create yourself, other than `selector` already handled.
|
|
17
|
+
* This should map directly to the @Input() fields of this objects on create, so a simple apply can be used on read
|
|
18
|
+
*/
|
|
19
|
+
public serialize(): NgCompInputs | undefined { return; }
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* REDEFINE this if your widget needs to read from saved data and transform it to create itself - you do this for
|
|
23
|
+
* things that are not mapped directly into @Input() fields for example.
|
|
24
|
+
*/
|
|
25
|
+
public deserialize(w: NgGridStackWidget) {
|
|
26
|
+
if (w.input) Object.assign(this, w.input);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* gridstack-item.component.ts 8.2.0
|
|
3
|
+
* Copyright (c) 2022 Alain Dumesny - see GridStack root license
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { Component, ElementRef, Input, ViewChild, ViewContainerRef, OnDestroy, ComponentRef } from '@angular/core';
|
|
7
|
+
import { GridItemHTMLElement, GridStackNode } from 'gridstack';
|
|
8
|
+
import { BaseWidget } from './base-widget';
|
|
9
|
+
|
|
10
|
+
/** store element to Ng Class pointer back */
|
|
11
|
+
export interface GridItemCompHTMLElement extends GridItemHTMLElement {
|
|
12
|
+
_gridItemComp?: GridstackItemComponent;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* HTML Component Wrapper for gridstack items, in combination with GridstackComponent for parent grid
|
|
17
|
+
*/
|
|
18
|
+
@Component({
|
|
19
|
+
selector: 'gridstack-item',
|
|
20
|
+
template: `
|
|
21
|
+
<div class="grid-stack-item-content">
|
|
22
|
+
<!-- where dynamic items go based on component types, or sub-grids, etc...) -->
|
|
23
|
+
<ng-template #container></ng-template>
|
|
24
|
+
<!-- any static (defined in dom) content goes here -->
|
|
25
|
+
<ng-content></ng-content>
|
|
26
|
+
<!-- fallback HTML content from GridStackWidget content field if used instead -->
|
|
27
|
+
{{options.content}}
|
|
28
|
+
</div>`,
|
|
29
|
+
styles: [`
|
|
30
|
+
:host { display: block; }
|
|
31
|
+
`],
|
|
32
|
+
// changeDetection: ChangeDetectionStrategy.OnPush, // IFF you want to optimize and control when ChangeDetection needs to happen...
|
|
33
|
+
})
|
|
34
|
+
export class GridstackItemComponent implements OnDestroy {
|
|
35
|
+
|
|
36
|
+
/** container to append items dynamically */
|
|
37
|
+
@ViewChild('container', { read: ViewContainerRef, static: true}) public container?: ViewContainerRef;
|
|
38
|
+
|
|
39
|
+
/** ComponentRef of ourself - used by dynamic object to correctly get removed */
|
|
40
|
+
public ref: ComponentRef<GridstackItemComponent> | undefined;
|
|
41
|
+
|
|
42
|
+
/** child component so we can save/restore additional data to be saved along */
|
|
43
|
+
public childWidget: BaseWidget | undefined;
|
|
44
|
+
|
|
45
|
+
/** list of options for creating/updating this item */
|
|
46
|
+
@Input() public set options(val: GridStackNode) {
|
|
47
|
+
if (this.el.gridstackNode?.grid) {
|
|
48
|
+
// already built, do an update...
|
|
49
|
+
this.el.gridstackNode.grid.update(this.el, val);
|
|
50
|
+
} else {
|
|
51
|
+
// store our custom element in options so we can update it and not re-create a generic div!
|
|
52
|
+
this._options = {...val, el: this.el};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/** return the latest grid options (from GS once built, otherwise initial values) */
|
|
56
|
+
public get options(): GridStackNode {
|
|
57
|
+
return this.el.gridstackNode || this._options || {el: this.el};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
private _options?: GridStackNode;
|
|
61
|
+
|
|
62
|
+
/** return the native element that contains grid specific fields as well */
|
|
63
|
+
public get el(): GridItemCompHTMLElement { return this.elementRef.nativeElement; }
|
|
64
|
+
|
|
65
|
+
/** clears the initial options now that we've built */
|
|
66
|
+
public clearOptions() {
|
|
67
|
+
delete this._options;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
constructor(private readonly elementRef: ElementRef<GridItemHTMLElement>) {
|
|
71
|
+
this.el._gridItemComp = this;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
public ngOnDestroy(): void {
|
|
75
|
+
delete this.ref;
|
|
76
|
+
delete this.el._gridItemComp;
|
|
77
|
+
}
|
|
78
|
+
}
|