index.tsx 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import orderBy from 'lodash/orderBy';
  2. import {Relay, RelayActivity} from 'sentry/types';
  3. import ActivityList from './activityList';
  4. import CardHeader from './cardHeader';
  5. import {getRelaysByPublicKey} from './utils';
  6. import WaitingActivity from './waitingActivity';
  7. type CardHeaderProps = React.ComponentProps<typeof CardHeader>;
  8. type WaitingActivityProps = React.ComponentProps<typeof WaitingActivity>;
  9. type Props = {
  10. disabled: boolean;
  11. relayActivities: Array<RelayActivity>;
  12. relays: Array<Relay>;
  13. } & Pick<CardHeaderProps, 'onDelete' | 'onEdit'> &
  14. Pick<WaitingActivityProps, 'onRefresh'>;
  15. const List = ({
  16. relays,
  17. relayActivities,
  18. onRefresh,
  19. onDelete,
  20. onEdit,
  21. disabled,
  22. }: Props) => {
  23. const orderedRelays = orderBy(relays, relay => relay.created, ['desc']);
  24. const relaysByPublicKey = getRelaysByPublicKey(orderedRelays, relayActivities);
  25. const renderCardContent = (activities: Array<RelayActivity>) => {
  26. if (!activities.length) {
  27. return <WaitingActivity onRefresh={onRefresh} disabled={disabled} />;
  28. }
  29. return <ActivityList activities={activities} />;
  30. };
  31. return (
  32. <div>
  33. {Object.keys(relaysByPublicKey).map(relayByPublicKey => {
  34. const {name, description, created, activities} =
  35. relaysByPublicKey[relayByPublicKey];
  36. return (
  37. <div key={relayByPublicKey}>
  38. <CardHeader
  39. publicKey={relayByPublicKey}
  40. name={name}
  41. description={description}
  42. created={created}
  43. onEdit={onEdit}
  44. onDelete={onDelete}
  45. disabled={disabled}
  46. />
  47. {renderCardContent(activities)}
  48. </div>
  49. );
  50. })}
  51. </div>
  52. );
  53. };
  54. export default List;