Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Toolkit
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
This is an archived project. Repository and other project resources are read-only.
Show more breadcrumbs
digital blueprint
Web Component Framework
Toolkit
Commits
ce8b402e
Commit
ce8b402e
authored
5 years ago
by
Neuber, Eugen Ramon
Committed by
Reiter, Christoph
4 years ago
Browse files
Options
Downloads
Patches
Plain Diff
Fix data reload, better demo
parent
b44bd2b2
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
packages/data-table-view/src/data-table-view.js
+107
-34
107 additions, 34 deletions
packages/data-table-view/src/data-table-view.js
packages/data-table-view/src/demo.js
+32
-9
32 additions, 9 deletions
packages/data-table-view/src/demo.js
with
139 additions
and
43 deletions
packages/data-table-view/src/data-table-view.js
+
107
−
34
View file @
ce8b402e
...
@@ -19,6 +19,15 @@ class DataTableView extends LitElement {
...
@@ -19,6 +19,15 @@ class DataTableView extends LitElement {
this
.
apiUrl
=
null
;
this
.
apiUrl
=
null
;
this
.
whitelist_cols
=
'
*
'
;
this
.
whitelist_cols
=
'
*
'
;
this
.
blacklist_cols
=
''
;
this
.
blacklist_cols
=
''
;
this
.
table_columns
=
[];
// all possible columns, defined by API entity
this
.
show_columns
=
[];
// all columns visible in table, defined by property whhitelist/blacklist
this
.
display_columns
=
[];
// all possible columns, in desired order for the table
// datatable properties
this
.
table
=
null
;
this
.
paging
=
1
;
this
.
searching
=
1
;
//
this
.
is_loading
=
false
;
}
}
static
get
properties
()
{
static
get
properties
()
{
...
@@ -30,6 +39,13 @@ class DataTableView extends LitElement {
...
@@ -30,6 +39,13 @@ class DataTableView extends LitElement {
apiUrl
:
{
type
:
String
,
attribute
:
false
},
apiUrl
:
{
type
:
String
,
attribute
:
false
},
whitelist_cols
:
{
type
:
String
,
attribute
:
'
whitelisted-columns
'
},
whitelist_cols
:
{
type
:
String
,
attribute
:
'
whitelisted-columns
'
},
blacklist_cols
:
{
type
:
String
,
attribute
:
'
blacklisted-columns
'
},
blacklist_cols
:
{
type
:
String
,
attribute
:
'
blacklisted-columns
'
},
table_columns
:
{
type
:
Array
,
attribute
:
false
},
show_columns
:
{
type
:
Array
,
attribute
:
false
},
display_columns
:
{
type
:
Array
,
attribute
:
false
},
table
:
{
type
:
Object
,
attribute
:
false
},
paging
:
{
type
:
String
},
searching
:
{
type
:
String
},
is_loading
:
{
type
:
Boolean
},
};
};
}
}
...
@@ -40,12 +56,71 @@ class DataTableView extends LitElement {
...
@@ -40,12 +56,71 @@ class DataTableView extends LitElement {
JSONLD
.
initialize
(
this
.
entryPointUrl
,
function
(
jsonld
)
{
JSONLD
.
initialize
(
this
.
entryPointUrl
,
function
(
jsonld
)
{
that
.
jsonld
=
jsonld
;
that
.
jsonld
=
jsonld
;
that
.
apiUrl
=
that
.
jsonld
.
getApiUrlForIdentifier
(
"
http://schema.org/
"
+
that
.
value
);
that
.
apiUrl
=
that
.
jsonld
.
getApiUrlForIdentifier
(
"
http://schema.org/
"
+
that
.
value
);
that
.
table_columns
=
that
.
jsonld
.
entities
[
that
.
value
][
'
hydra:supportedProperty
'
].
map
(
obj
=>
obj
[
'
hydra:title
'
]);
// display empty table
that
.
setup_columns
();
let
columns
=
[];
for
(
let
i
=
0
;
i
<
that
.
display_columns
.
length
;
++
i
)
{
columns
[
i
]
=
{
title
:
that
.
display_columns
[
i
],
visible
:
that
.
show_columns
.
indexOf
(
that
.
display_columns
[
i
])
>
-
1
};
}
that
.
set_datatable
(
columns
);
if
(
that
.
filter
)
{
that
.
loadWebPageElement
();
}
});
});
// disabled, load first on toggle to visible
// disabled, load first on toggle to visible
window
.
addEventListener
(
"
vpu-auth-init
"
,
()
=>
that
.
loadWebPageElement
());
window
.
addEventListener
(
"
vpu-auth-init
"
,
()
=>
that
.
loadWebPageElement
());
}
}
setup_columns
()
{
//let cols = this.table_columns.slice();
if
(
this
.
whitelist_cols
===
'
*
'
)
{
const
blacklist_cols
=
this
.
blacklist_cols
.
split
(
'
'
);
this
.
show_columns
=
this
.
table_columns
.
filter
(
col
=>
blacklist_cols
.
indexOf
(
col
)
===
-
1
);
}
else
{
this
.
show_columns
=
this
.
whitelist_cols
.
split
(
'
'
);
}
this
.
display_columns
=
this
.
show_columns
.
slice
();
for
(
let
i
=
0
;
i
<
this
.
table_columns
.
length
;
++
i
)
{
if
(
this
.
display_columns
.
indexOf
(
this
.
table_columns
[
i
])
===
-
1
)
this
.
display_columns
.
push
(
this
.
table_columns
[
i
]);
}
}
set_datatable
(
columns
)
{
const
lang_de_url
=
'
https://cdn.datatables.net/plug-ins/1.10.19/i18n/German.json
'
;
const
lang_en_url
=
'
https://cdn.datatables.net/plug-ins/1.10.19/i18n/English.json
'
;
this
.
table
=
$
(
this
.
shadowRoot
.
querySelector
(
'
#dt
'
)).
DataTable
({
destroy
:
true
,
language
:
{
url
:
this
.
lang
===
'
de
'
?
lang_de_url
:
lang_en_url
,
},
columns
:
columns
,
data
:
[],
paging
:
this
.
paging
>
0
,
searching
:
this
.
searching
>
0
,
});
}
update_datatable
(
columns
,
rows
)
{
//console.log('rows = ' + rows);
const
that
=
this
;
if
(
this
.
table
)
{
this
.
table
.
clear
();
columns
.
forEach
(
function
(
item
,
index
)
{
that
.
table
.
columns
([
index
]).
visible
(
item
.
visible
===
true
);
});
rows
.
forEach
(
row
=>
this
.
table
.
row
.
add
(
row
));
this
.
table
.
draw
();
}
}
loadWebPageElement
()
{
loadWebPageElement
()
{
if
(
window
.
VPUAuthToken
===
undefined
||
window
.
VPUAuthToken
===
""
)
{
if
(
window
.
VPUAuthToken
===
undefined
||
window
.
VPUAuthToken
===
""
)
{
return
;
return
;
...
@@ -57,7 +132,8 @@ class DataTableView extends LitElement {
...
@@ -57,7 +132,8 @@ class DataTableView extends LitElement {
const
apiUrlWithFilter
=
this
.
apiUrl
+
'
?search=
'
+
this
.
filter
;
const
apiUrlWithFilter
=
this
.
apiUrl
+
'
?search=
'
+
this
.
filter
;
console
.
log
(
'
apiUrlWithFilter =
'
+
apiUrlWithFilter
);
console
.
log
(
'
apiUrlWithFilter =
'
+
apiUrlWithFilter
);
var
that
=
this
;
const
that
=
this
;
this
.
is_loading
=
true
;
fetch
(
apiUrlWithFilter
,
{
fetch
(
apiUrlWithFilter
,
{
headers
:
{
headers
:
{
...
@@ -68,44 +144,26 @@ class DataTableView extends LitElement {
...
@@ -68,44 +144,26 @@ class DataTableView extends LitElement {
.
then
(
res
=>
res
.
json
())
.
then
(
res
=>
res
.
json
())
.
then
(
function
(
data
)
{
.
then
(
function
(
data
)
{
// TODO
// TODO
console
.
log
(
data
[
'
hydra:member
'
]);
that
.
setup_columns
();
const
persons
=
data
[
'
hydra:member
'
];
let
cols
=
[];
const
items
=
data
[
'
hydra:member
'
];
if
(
that
.
whitelist_cols
===
'
*
'
)
{
const
blacklist_cols
=
that
.
blacklist_cols
.
split
(
'
'
);
for
(
let
i
=
0
;
i
<
persons
.
length
;
++
i
)
{
let
new_cols
=
Object
.
keys
(
persons
[
i
]);
cols
=
cols
.
concat
(
new_cols
.
filter
(
item
=>
(
!~
cols
.
indexOf
(
item
)
&&
!~
blacklist_cols
.
indexOf
(
item
))));
}
}
else
{
cols
=
that
.
whitelist_cols
.
split
(
'
'
);
}
console
.
log
(
'
cols =
'
+
cols
);
let
rows
=
[];
let
rows
=
[];
let
columns
=
[];
let
columns
=
[];
for
(
let
i
=
0
;
i
<
cols
.
length
;
++
i
)
{
for
(
let
i
=
0
;
i
<
that
.
display_columns
.
length
;
++
i
)
{
columns
[
i
]
=
{
title
:
cols
[
i
]
};
columns
[
i
]
=
{
for
(
let
j
=
0
;
j
<
persons
.
length
;
++
j
)
{
title
:
that
.
display_columns
[
i
],
visible
:
that
.
show_columns
.
indexOf
(
that
.
display_columns
[
i
])
>
-
1
};
for
(
let
j
=
0
;
j
<
items
.
length
;
++
j
)
{
if
(
rows
[
j
]
===
undefined
)
{
if
(
rows
[
j
]
===
undefined
)
{
rows
[
j
]
=
[];
rows
[
j
]
=
[];
}
}
rows
[
j
][
i
]
=
persons
[
j
][
col
s
[
i
]]
||
''
;
rows
[
j
][
i
]
=
items
[
j
][
that
.
display_column
s
[
i
]]
||
''
;
}
}
}
}
const
lang_de_url
=
'
https://cdn.datatables.net/plug-ins/1.10.19/i18n/German.json
'
;
that
.
update_datatable
(
columns
,
rows
);
const
lang_en_url
=
'
https://cdn.datatables.net/plug-ins/1.10.19/i18n/English.json
'
;
that
.
is_loading
=
false
;
const
table
=
$
(
that
.
shadowRoot
.
querySelector
(
'
#dt
'
)).
DataTable
({
destroy
:
true
,
language
:
{
url
:
that
.
lang
===
'
de
'
?
lang_de_url
:
lang_en_url
,
},
columns
:
columns
,
data
:
rows
,
}
);
})
})
.
catch
();
.
catch
();
}
}
...
@@ -120,6 +178,8 @@ class DataTableView extends LitElement {
...
@@ -120,6 +178,8 @@ class DataTableView extends LitElement {
case
"
filter
"
:
case
"
filter
"
:
case
"
whitelist_cols
"
:
case
"
whitelist_cols
"
:
case
"
blacklist_cols
"
:
case
"
blacklist_cols
"
:
case
"
paging
"
:
case
"
searching
"
:
this
.
loadWebPageElement
();
this
.
loadWebPageElement
();
break
;
break
;
case
"
value
"
:
case
"
value
"
:
...
@@ -138,13 +198,26 @@ class DataTableView extends LitElement {
...
@@ -138,13 +198,26 @@ class DataTableView extends LitElement {
}
}
render
()
{
render
()
{
var
dt_css
=
getAssetURL
(
'
datatables/css/jquery.dataTables.min.css
'
)
let
dt_css
=
getAssetURL
(
'
datatables/css/jquery.dataTables.min.css
'
)
;
return
html
`
return
html
`
<link rel="stylesheet" href="
${
dt_css
}
">
<link rel="stylesheet" href="
${
dt_css
}
">
<style>
<style>
#cover {
min-width: 100px;
display:
${
this
.
is_loading
?
'
block
'
:
'
none
'
}
;
position: relative; height: 100%; width: 100%; top: 0; left: 0; background: #fff; z-index:9999;
}
#cover img {
display: block;
margin 0 auto;
}
</style>
</style>
<table id="dt" class="display" style="width:100%">
<div id="dt-parent">
</table>
<div id="cover">
<img src="data:image/gif;base64,R0lGODlhEAAQAPQAAP///wAAAPj4+Dg4OISEhAYGBiYmJtbW1qioqBYWFnZ2dmZmZuTk5JiYmMbGxkhISFZWVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH+GkNyZWF0ZWQgd2l0aCBhamF4bG9hZC5pbmZvACH5BAAKAAAAIf8LTkVUU0NBUEUyLjADAQAAACwAAAAAEAAQAAAFUCAgjmRpnqUwFGwhKoRgqq2YFMaRGjWA8AbZiIBbjQQ8AmmFUJEQhQGJhaKOrCksgEla+KIkYvC6SJKQOISoNSYdeIk1ayA8ExTyeR3F749CACH5BAAKAAEALAAAAAAQABAAAAVoICCKR9KMaCoaxeCoqEAkRX3AwMHWxQIIjJSAZWgUEgzBwCBAEQpMwIDwY1FHgwJCtOW2UDWYIDyqNVVkUbYr6CK+o2eUMKgWrqKhj0FrEM8jQQALPFA3MAc8CQSAMA5ZBjgqDQmHIyEAIfkEAAoAAgAsAAAAABAAEAAABWAgII4j85Ao2hRIKgrEUBQJLaSHMe8zgQo6Q8sxS7RIhILhBkgumCTZsXkACBC+0cwF2GoLLoFXREDcDlkAojBICRaFLDCOQtQKjmsQSubtDFU/NXcDBHwkaw1cKQ8MiyEAIfkEAAoAAwAsAAAAABAAEAAABVIgII5kaZ6AIJQCMRTFQKiDQx4GrBfGa4uCnAEhQuRgPwCBtwK+kCNFgjh6QlFYgGO7baJ2CxIioSDpwqNggWCGDVVGphly3BkOpXDrKfNm/4AhACH5BAAKAAQALAAAAAAQABAAAAVgICCOZGmeqEAMRTEQwskYbV0Yx7kYSIzQhtgoBxCKBDQCIOcoLBimRiFhSABYU5gIgW01pLUBYkRItAYAqrlhYiwKjiWAcDMWY8QjsCf4DewiBzQ2N1AmKlgvgCiMjSQhACH5BAAKAAUALAAAAAAQABAAAAVfICCOZGmeqEgUxUAIpkA0AMKyxkEiSZEIsJqhYAg+boUFSTAkiBiNHks3sg1ILAfBiS10gyqCg0UaFBCkwy3RYKiIYMAC+RAxiQgYsJdAjw5DN2gILzEEZgVcKYuMJiEAOwAAAAAAAAAAAA==">
</div>
<table id="dt" class="display" style="width:100%"></table>
</div>
`
;
`
;
}
}
}
}
...
...
This diff is collapsed.
Click to expand it.
packages/data-table-view/src/demo.js
+
32
−
9
View file @
ce8b402e
...
@@ -33,7 +33,6 @@ class DataTableViewDemo extends LitElement {
...
@@ -33,7 +33,6 @@ class DataTableViewDemo extends LitElement {
}
}
colsChange
(
e
)
{
colsChange
(
e
)
{
alert
(
'
colsChange:
'
+
e
.
target
.
value
);
let
datatable
=
this
.
shadowRoot
.
querySelector
(
'
#dt1
'
);
let
datatable
=
this
.
shadowRoot
.
querySelector
(
'
#dt1
'
);
if
(
datatable
===
undefined
)
{
alter
(
'
datatable not found
'
);
return
;
}
if
(
datatable
===
undefined
)
{
alter
(
'
datatable not found
'
);
return
;
}
datatable
.
setAttribute
(
'
whitelisted-columns
'
,
e
.
target
.
value
);
datatable
.
setAttribute
(
'
whitelisted-columns
'
,
e
.
target
.
value
);
...
@@ -47,6 +46,11 @@ class DataTableViewDemo extends LitElement {
...
@@ -47,6 +46,11 @@ class DataTableViewDemo extends LitElement {
padding: 10px;
padding: 10px;
border: 1px solid orange;
border: 1px solid orange;
}
}
.box2 {
margin: 10px;
padding: 10px;
border: 1px solid green;
}
</style>
</style>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.5/css/bulma.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.5/css/bulma.min.css">
...
@@ -58,6 +62,7 @@ class DataTableViewDemo extends LitElement {
...
@@ -58,6 +62,7 @@ class DataTableViewDemo extends LitElement {
<vpu-auth lang="
${
this
.
lang
}
" client-id="
${
setting
(
'
keyCloakClientId
'
)}
" load-person force-login></vpu-auth>
<vpu-auth lang="
${
this
.
lang
}
" client-id="
${
setting
(
'
keyCloakClientId
'
)}
" load-person force-login></vpu-auth>
</div>
</div>
<div class="content">
<div class="content">
<h4>DataTable: paging and searching</h4>
<p>
<p>
<label for="filter">Filter für die Suche:</label>
<label for="filter">Filter für die Suche:</label>
<input type="text" name="filter" id="filter" value="" placeholder="Geben Sie mindestens 3 Zeichen ein" @change="
${
this
.
filterChange
}
">
<input type="text" name="filter" id="filter" value="" placeholder="Geben Sie mindestens 3 Zeichen ein" @change="
${
this
.
filterChange
}
">
...
@@ -67,14 +72,32 @@ class DataTableViewDemo extends LitElement {
...
@@ -67,14 +72,32 @@ class DataTableViewDemo extends LitElement {
<input type="text" name="columns" id="columns" value="*" placeholder="Geben Sie einen Stern * für alle ein" @change="
${
this
.
colsChange
}
">
<input type="text" name="columns" id="columns" value="*" placeholder="Geben Sie einen Stern * für alle ein" @change="
${
this
.
colsChange
}
">
</p>
</p>
<div class="box">
<div class="box">
<vpu-data-table-view
<vpu-data-table-view
lang="
${
this
.
lang
}
"
lang="
${
this
.
lang
}
"
value="Person"
value="Person"
filter=""
filter=""
whitelisted-columns="*"
whitelisted-columns="*"
blacklisted-columns="@id @type functions roles accountTypes"
blacklisted-columns="phoneExtension name"
id="dt1"
id="dt1"
></vpu-data-table-view>
paging="1"
></vpu-data-table-view>
</div>
</div>
</section>
<section class="section">
<div class="content">
<h4>DataTable: no paging, no searching</h4>
<div class="box2">
<vpu-data-table-view
lang="
${
this
.
lang
}
"
value="Person"
filter="Ab"
whitelisted-columns="name telephone email"
blacklisted-columns=""
id="dt2"
paging="0"
searching="0"
></vpu-data-table-view>
</div>
</div>
</div>
</div>
</section>
</section>
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment