Events.tsx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. // Copyright 2017-2019 @polkadot/app-explorer authors & contributors
  2. // This software may be modified and distributed under the terms
  3. // of the Apache-2.0 license. See the LICENSE file for details.
  4. import { I18nProps } from '@polkadot/react-components/types';
  5. import { KeyedEvent } from './types';
  6. import React from 'react';
  7. import { Event as EventDisplay } from '@polkadot/react-components';
  8. import { formatNumber } from '@polkadot/util';
  9. import translate from './translate';
  10. interface Props extends I18nProps {
  11. emptyLabel?: React.ReactNode;
  12. events: KeyedEvent[];
  13. eventClassName?: string;
  14. withoutIndex?: boolean;
  15. }
  16. function Events ({ emptyLabel, eventClassName, events, withoutIndex, t }: Props): React.ReactElement<Props> {
  17. if (!events || events.length === 0) {
  18. return (
  19. <article>
  20. {emptyLabel || t('no events available')}
  21. </article>
  22. );
  23. }
  24. return (
  25. <>
  26. {events.map(({ key, record: { event, phase } }: KeyedEvent): React.ReactNode => {
  27. const extIndex = !withoutIndex && phase.isApplyExtrinsic
  28. ? phase.asApplyExtrinsic
  29. : -1;
  30. if (!event.method || !event.section) {
  31. return null;
  32. }
  33. return (
  34. <article
  35. className={`explorer--Container ${eventClassName}`}
  36. key={key}
  37. >
  38. <div className='header'>
  39. <h3>
  40. {event.section}.{event.method}&nbsp;{
  41. extIndex !== -1
  42. ? `(#${formatNumber(extIndex)})`
  43. : ''
  44. }
  45. </h3>
  46. </div>
  47. <details>
  48. <summary>
  49. {
  50. event.meta && event.meta.documentation
  51. ? event.meta.documentation.join(' ')
  52. : 'Details'
  53. }
  54. </summary>
  55. <EventDisplay
  56. className='details'
  57. value={event}
  58. />
  59. </details>
  60. </article>
  61. );
  62. })}
  63. </>
  64. );
  65. }
  66. export default translate(Events);