/src/apps/Instances/SharedInstancesList.jsx

https://github.com/Syncano/syncano-dashboard · JSX · 97 lines · 83 code · 12 blank · 2 comment · 0 complexity · 755fd76a98e52c72c6907622229b1b3f MD5 · raw file

  1. import React from 'react';
  2. // Utils
  3. import { DialogsMixin } from '../../mixins';
  4. // Stores and Actions
  5. import Actions from './InstancesActions';
  6. import Store from './InstancesStore';
  7. import SessionStore from '../Session/SessionStore';
  8. import ListItem from './InstancesListItem';
  9. import { Loading, ColumnList, Dialog, Lists } from '../../common/';
  10. const Column = ColumnList.Column;
  11. export default React.createClass({
  12. displayName: 'SharedInstancesList',
  13. mixins: [DialogsMixin],
  14. handleCheckInstance(checkId, value) {
  15. Actions.uncheckAll('myInstances');
  16. Actions.checkItem(checkId, value, 'name', 'sharedInstances');
  17. },
  18. initDialogs() {
  19. const { isLoading } = this.props;
  20. return [{
  21. dialog: Dialog.Delete,
  22. params: {
  23. key: 'leaveSharedInstanceDialog',
  24. ref: 'leaveSharedInstanceDialog',
  25. title: 'Leave shared Instance',
  26. handleConfirm: Actions.removeSharedInstance,
  27. handleConfirmParam: SessionStore.getUser().id,
  28. actionName: 'leave',
  29. items: Store.getCheckedItems('sharedInstances'),
  30. groupName: 'Instance',
  31. isLoading
  32. }
  33. }];
  34. },
  35. renderItem(item) {
  36. return (
  37. <ListItem
  38. key={`shared-instances-list-item-${item.name}`}
  39. onIconClick={this.handleCheckInstance}
  40. item={item}
  41. showDeleteDialog={() => this.showDialog('leaveSharedInstanceDialog', [item])}
  42. />
  43. );
  44. },
  45. render() {
  46. const { isLoading, items, ...other } = this.props;
  47. const checkedItems = Store.getNumberOfChecked('sharedInstances');
  48. return (
  49. <Loading show={isLoading}>
  50. <Lists.Container className="instances-list">
  51. {this.getDialogs()}
  52. <ColumnList.Header>
  53. <Column.ColumnHeader
  54. primary={true}
  55. columnName="CHECK_ICON"
  56. >
  57. Shared with me
  58. </Column.ColumnHeader>
  59. <Column.ColumnHeader columnName="DESC">Description</Column.ColumnHeader>
  60. <Column.ColumnHeader columnName="DATE">Created</Column.ColumnHeader>
  61. <Column.ColumnHeader columnName="MENU">
  62. <Lists.Menu
  63. checkedItemsCount={checkedItems}
  64. handleSelectAll={() => Actions.selectAll('sharedInstances')}
  65. handleUnselectAll={() => Actions.uncheckAll('sharedInstances')}
  66. itemsCount={items.length}
  67. >
  68. <Lists.MenuItem
  69. primaryText="Leave Selected"
  70. onTouchTap={() => this.showDialog('leaveSharedInstanceDialog')}
  71. />
  72. </Lists.Menu>
  73. </Column.ColumnHeader>
  74. </ColumnList.Header>
  75. <Lists.List
  76. {...other}
  77. items={items}
  78. key="shared-instances-list"
  79. renderItem={this.renderItem}
  80. />
  81. </Lists.Container>
  82. </Loading>
  83. );
  84. }
  85. });