|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- import { h, Component, createRef } from 'preact';
- import WBNavbarCommon from 'wb-navbar-common';
- import WBArvadosCrumbs from 'wb-arvados-crumbs';
- import WBNameAndUuid from 'wb-name-and-uuid';
- import WBSelect from 'wb-select';
- import WBTable from 'wb-table';
- import WBPickObjectDialog from 'wb-pick-object-dialog';
- import makeArvadosRequest from 'make-arvados-request';
-
- class WBSharingPage extends Component {
- constructor(...args) {
- super(...args);
- this.state.rows = [];
- this.dialogRef = createRef();
- }
-
- componentDidMount() {
- this.fetchData();
- }
-
- fetchData() {
- const { app, uuid } = this.props;
- const { arvHost, arvToken } = app.state;
- let prom = makeArvadosRequest(arvHost, arvToken,
- '/arvados/v1/permissions/' + encodeURIComponent(uuid));
- prom = prom.then(xhr => this.setState({
- 'rows': this.prepareRows(xhr.response.items)
- }));
- }
-
- deletePermission(uuid) {
- throw Error('Not implemented');
- }
-
- prepareRows(items) {
- const { app } = this.props;
- return items.map(it => [
- ( <WBNameAndUuid app={ app } uuid={ it.tail_uuid } /> ),
- ( <WBSelect value={ it.name } options={ ['can_read', 'can_write', 'can_manage'] } /> ),
- ( <button class="btn btn-outline-danger m-1" title="Delete"
- onclick={ () => this.deletePermission(it.uuid) }>
- <i class="fas fa-trash"></i>
- </button> )
- ]);
- }
-
- addEntry(it) {
- throw Error('Not implemented');
- }
-
- save() {
- throw Error('Not implemented');
- }
-
- render({ app, uuid }, { rows }) {
- return (
- <div>
- <WBNavbarCommon app={ app } />
-
- <WBArvadosCrumbs app={ app } uuid={ uuid } />
-
- <div class="container-fluid">
- <div class="my-2">
- This is the sharing management page for { uuid }
- </div>
-
- <WBTable columns={ [ 'Name', 'Permission', '' ] }
- headerClasses={ [ null, null, 'w-1' ] }
- rows={ rows } />
-
- <WBPickObjectDialog app={ app } ref={ this.dialogRef } />
-
- <button class="btn btn-outline-secondary mr-2"
- onclick={ () => this.dialogRef.current.show('Select User', 'user', it => this.addEntry(it)) }>Add User...</button>
- <button class="btn btn-outline-secondary mr-2"
- onclick={ () => this.dialogRef.current.show('Select Group', 'group', it => this.addEntry(it), [['group_class', '=', 'role']]) }>Add Group...</button>
- <button class="btn btn-primary mr-2"
- onclick={ () => this.save() }>Save</button>
- </div>
- </div>
- );
- }
- }
-
- export default WBSharingPage;
|