Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
Ng2 Bootstrap Modal
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Operations
Operations
Metrics
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
Globars Forks
Ng2 Bootstrap Modal
Commits
95ab7eb1
Commit
95ab7eb1
authored
Jan 23, 2017
by
avovchuk
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
readme - docs
parent
a8fd5fad
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
155 additions
and
16 deletions
+155
-16
README.md
README.md
+35
-0
src/dialog-holder.component.ts
src/dialog-holder.component.ts
+27
-5
src/dialog-wrapper.component.ts
src/dialog-wrapper.component.ts
+35
-4
src/dialog.component.ts
src/dialog.component.ts
+28
-4
src/dialog.service.ts
src/dialog.service.ts
+30
-3
No files found.
README.md
View file @
95ab7eb1
...
...
@@ -124,4 +124,39 @@ app.component.ts
}
```
##Documentation
###DialogComponent
Super class of all modal components.
####Class Overview
```
typescript
abstract
class
DialogComponent
{
/**
* Constructor
* @param {DialogService} dialogService - instance of DialogService
*/
constructor
(
dialogService
:
DialogService
)
/**
* Dialog result
* @type {any}
*/
protected
result
:
any
/**
* Closes dialog
*/
public
close
:
Function
}
```
###DialogService
Service to show dialogs
###Class Overview
```
typescript
class
DialogService
{
public
addDialog
:(
component
:
Type
<
DialogComponent
>
,
data
?:
any
,
index
?:
number
)
=>
{}
}
```
src/dialog-holder.component.ts
View file @
95ab7eb1
...
...
@@ -4,6 +4,7 @@ import {
}
from
"
@angular/core
"
;
import
{
DialogComponent
}
from
"
./dialog.component
"
;
import
{
DialogWrapperComponent
}
from
"
./dialog-wrapper.component
"
;
import
{
Observable
}
from
"
rxjs
"
;
@
Component
({
selector
:
'
dialog-holder
'
,
...
...
@@ -11,15 +12,32 @@ import {DialogWrapperComponent} from "./dialog-wrapper.component";
})
export
class
DialogHolderComponent
{
/**
* Target element to insert dialogs
* @type {ViewContainerRef}
*/
@
ViewChild
(
'
element
'
,
{
read
:
ViewContainerRef
})
private
element
:
ViewContainerRef
;
dialogs
:
Array
<
any
>
=
[];
/**
* Array of dialogs
* @type {Array<DialogComponent> }
*/
dialogs
:
Array
<
DialogComponent
>
=
[];
constructor
(
private
resolver
:
ComponentFactoryResolver
)
{
/**
* Constructor
* @param {ComponentFactoryResolver} resolver
*/
constructor
(
private
resolver
:
ComponentFactoryResolver
)
{}
}
addDialog
(
component
:
Type
<
DialogComponent
>
,
data
?:
any
,
index
?:
number
)
{
/**
* Adds dialog
* @param {Type<DialogComponent>} component
* @param {any?} data
* @param {number?}index
* @return {Observable<any>}
*/
addDialog
(
component
:
Type
<
DialogComponent
>
,
data
?:
any
,
index
?:
number
):
Observable
<
any
>
{
let
factory
=
this
.
resolver
.
resolveComponentFactory
(
DialogWrapperComponent
);
let
componentRef
=
this
.
element
.
createComponent
(
factory
,
index
);
let
dialogWrapper
:
DialogWrapperComponent
=
<
DialogWrapperComponent
>
componentRef
.
instance
;
...
...
@@ -36,6 +54,10 @@ export class DialogHolderComponent {
return
_component
.
fillData
(
data
);
}
/**
* Removes dialog
* @param {DialogComponent} component
*/
removeDialog
(
component
:
DialogComponent
)
{
component
.
wrapper
.
hide
();
setTimeout
(()
=>
{
...
...
src/dialog-wrapper.component.ts
View file @
95ab7eb1
import
{
Component
,
ViewContainerRef
,
ViewChild
,
ComponentFactoryResolver
,
ReflectiveInjector
Component
,
ViewContainerRef
,
ViewChild
,
ComponentFactoryResolver
,
ReflectiveInjector
,
Type
}
from
'
@angular/core
'
;
import
{
DialogComponent
}
from
"
./dialog.component
"
;
...
...
@@ -14,13 +14,37 @@ import {DialogComponent} from "./dialog.component";
`
})
export
class
DialogWrapperComponent
{
/**
* Target element to insert dialog content component
* @type {ViewContainerRef}
*/
@
ViewChild
(
'
element
'
,
{
read
:
ViewContainerRef
})
private
element
:
ViewContainerRef
;
/**
*
* @type {boolean}
*/
private
shown
:
boolean
=
false
;
/**
* Dialog content componet
* @type {DialogComponent}
*/
private
content
:
DialogComponent
;
/**
* Constructor
* @param {ComponentFactoryResolver} resolver
*/
constructor
(
private
resolver
:
ComponentFactoryResolver
)
{}
addComponent
(
component
)
{
/**
* Adds content dialog component to wrapper
* @param {Type<DialogComponent>} component
* @return {DialogComponent}
*/
addComponent
(
component
:
Type
<
DialogComponent
>
)
{
let
factory
=
this
.
resolver
.
resolveComponentFactory
(
component
);
let
injector
=
ReflectiveInjector
.
fromResolvedProviders
([],
this
.
element
.
injector
);
let
componentRef
=
factory
.
create
(
injector
);
...
...
@@ -30,10 +54,17 @@ export class DialogWrapperComponent {
return
this
.
content
;
}
show
()
{
/**
* Shows dialog
*/
show
():
void
{
this
.
shown
=
true
;
}
hide
()
{
/**
* Hides dialog
*/
hide
():
void
{
this
.
shown
=
false
;
}
}
...
...
src/dialog.component.ts
View file @
95ab7eb1
...
...
@@ -8,17 +8,35 @@ import {DialogService} from "./dialog.service";
@
Component
({
selector
:
'
pagination
'
})
export
class
DialogComponent
implements
OnDestroy
{
export
abstract
class
DialogComponent
implements
OnDestroy
{
/**
* Observer to return result from dialog
*/
private
observer
:
Observer
<
any
>
;
/**
* Dialog result
* @type {any}
*/
protected
result
:
any
;
/**
* Dialog wrapper (modal placeholder)
*/
wrapper
:
DialogWrapperComponent
;
/**
* Constructor
* @param {DialogService} dialogService - instance of DialogService
*/
constructor
(
protected
dialogService
:
DialogService
)
{}
fillData
(
data
:
any
=
{})
{
/**
*
* @param {any} data
* @return {Observable<any>}
*/
fillData
(
data
:
any
=
{}):
Observable
<
any
>
{
let
keys
=
Object
.
keys
(
data
);
for
(
let
i
=
0
,
length
=
keys
.
length
;
i
<
length
;
i
++
)
{
let
key
=
keys
[
i
];
...
...
@@ -32,10 +50,16 @@ export class DialogComponent implements OnDestroy {
});
}
close
()
{
/**
* Closes dialog
*/
close
():
void
{
this
.
dialogService
.
removeDialog
(
this
);
}
/**
* OnDestroy handler
*/
ngOnDestroy
():
void
{
this
.
observer
.
next
(
this
.
result
);
}
...
...
src/dialog.service.ts
View file @
95ab7eb1
...
...
@@ -3,22 +3,49 @@ import {
}
from
"
@angular/core
"
;
import
{
DialogHolderComponent
}
from
"
./dialog-holder.component
"
;
import
{
DialogComponent
}
from
"
./dialog.component
"
;
import
{
Observable
}
from
"
rxjs
"
;
@
Injectable
()
export
class
DialogService
{
/**
* Placeholder of modal dialogs
* @type {DialogHolderComponent}
*/
private
dialogHolderComponent
:
DialogHolderComponent
;
/**
* @param {ComponentFactoryResolver} resolver
* @param {ApplicationRef} applicationRef
* @param {Injector} injector
*/
constructor
(
private
resolver
:
ComponentFactoryResolver
,
private
applicationRef
:
ApplicationRef
,
private
injector
:
Injector
)
{
this
.
dialogHolderComponent
=
this
.
createDialogHolder
();
}
addDialog
(
component
:
Type
<
DialogComponent
>
,
data
?:
any
,
index
?:
number
)
{
/**
* Adds dialog to dialog holder
* @param {Type<DialogComponent>} component
* @param {any?} data
* @param {number?} index
* @return {Observable<any>}
*/
addDialog
(
component
:
Type
<
DialogComponent
>
,
data
?:
any
,
index
?:
number
):
Observable
<
any
>
{
return
this
.
dialogHolderComponent
.
addDialog
(
component
,
data
,
index
);
}
removeDialog
(
component
:
DialogComponent
)
{
return
this
.
dialogHolderComponent
.
removeDialog
(
component
);
/**
* Hides and removes dialog from DOM
* @param {DialogComponent} component
*/
removeDialog
(
component
:
DialogComponent
):
void
{
this
.
dialogHolderComponent
.
removeDialog
(
component
);
}
/**
* Creates and add to DOM dialog holder component
* @return {DialogHolderComponent}
*/
private
createDialogHolder
():
DialogHolderComponent
{
let
componentFactory
=
this
.
resolver
.
resolveComponentFactory
(
DialogHolderComponent
);
let
componentRef
=
componentFactory
.
create
(
this
.
injector
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment