2021-02-09 09:22:49 +00:00
import { gettext } from "django" ;
2021-02-09 16:04:55 +00:00
import { customElement , html , property , TemplateResult } from "lit-element" ;
import { AKResponse } from "../../api/Client" ;
2021-02-09 09:22:49 +00:00
import { Source } from "../../api/Sources" ;
import { TableColumn } from "../../elements/table/Table" ;
import { TablePage } from "../../elements/table/TablePage" ;
2021-02-09 16:04:55 +00:00
import "../../elements/buttons/ModalButton" ;
import "../../elements/buttons/SpinnerButton" ;
2021-02-10 19:12:15 +00:00
import "../../elements/buttons/Dropdown" ;
import { until } from "lit-html/directives/until" ;
2021-03-02 14:12:26 +00:00
import { PAGE_SIZE } from "../../constants" ;
2021-02-09 16:04:55 +00:00
2021-02-09 09:22:49 +00:00
@customElement ( "ak-source-list" )
export class SourceListPage extends TablePage < Source > {
pageTitle ( ) : string {
return "Sources" ;
}
pageDescription ( ) : string | undefined {
return "External Sources which can be used to get Identities into authentik, for example Social Providers like Twiter and GitHub or Enterprise Providers like ADFS and LDAP." ;
}
pageIcon ( ) : string {
return "pf-icon pf-icon-middleware" ;
}
searchEnabled ( ) : boolean {
return true ;
}
@property ( )
order = "name" ;
2021-02-09 16:04:55 +00:00
apiEndpoint ( page : number ) : Promise < AKResponse < Source > > {
2021-02-09 09:22:49 +00:00
return Source . list ( {
ordering : this.order ,
page : page ,
2021-03-02 14:12:26 +00:00
page_size : PAGE_SIZE ,
2021-02-09 09:22:49 +00:00
search : this.search || "" ,
} ) ;
}
columns ( ) : TableColumn [ ] {
return [
new TableColumn ( "Name" , "name" ) ,
new TableColumn ( "Type" , "verbose_name" ) ,
new TableColumn ( "" ) ,
] ;
}
row ( item : Source ) : TemplateResult [ ] {
return [
2021-02-19 18:29:17 +00:00
html ` <a href="#/core/sources/ ${ item . slug } ">
2021-02-09 09:22:49 +00:00
< div > $ { item . name } < / div >
$ { item . enabled ? html ` ` : html ` <small> ${ gettext ( "Disabled" ) } </small> ` }
< / a > ` ,
html ` ${ item . verbose_name } ` ,
html `
< ak - modal - button href = "${Source.adminUrl(`${item.pk}/update/`)}" >
< ak - spinner - button slot = "trigger" class = "pf-m-secondary" >
2021-02-10 19:12:15 +00:00
$ { gettext ( "Edit" ) }
2021-02-09 09:22:49 +00:00
< / a k - s p i n n e r - b u t t o n >
< div slot = "modal" > < / div >
2021-02-17 19:49:58 +00:00
< / a k - m o d a l - b u t t o n >
2021-02-09 09:22:49 +00:00
< ak - modal - button href = "${Source.adminUrl(`${item.pk}/delete/`)}" >
< ak - spinner - button slot = "trigger" class = "pf-m-danger" >
2021-02-10 19:12:15 +00:00
$ { gettext ( "Delete" ) }
2021-02-09 09:22:49 +00:00
< / a k - s p i n n e r - b u t t o n >
< div slot = "modal" > < / div >
< / a k - m o d a l - b u t t o n >
` ,
] ;
}
2021-02-10 19:12:15 +00:00
renderToolbar ( ) : TemplateResult {
return html `
< ak - dropdown class = "pf-c-dropdown" >
< button class = "pf-m-primary pf-c-dropdown__toggle" type = "button" >
< span class = "pf-c-dropdown__toggle-text" > $ { gettext ( "Create" ) } < / span >
< i class = "fas fa-caret-down pf-c-dropdown__toggle-icon" aria - hidden = "true" > < / i >
< / button >
< ul class = "pf-c-dropdown__menu" hidden >
$ { until ( Source . getTypes ( ) . then ( ( types ) = > {
return types . map ( ( type ) = > {
return html ` <li>
< ak - modal - button href = "${type.link}" >
< button slot = "trigger" class = "pf-c-dropdown__menu-item" > $ { type . name } < br >
< small > $ { type . description } < / small >
< / button >
< div slot = "modal" > < / div >
< / a k - m o d a l - b u t t o n >
< / li > ` ;
} ) ;
} ) , html ` <ak-spinner></ak-spinner> ` ) }
< / ul >
< / a k - d r o p d o w n >
$ { super . renderToolbar ( ) } ` ;
}
2021-02-09 09:22:49 +00:00
}