MediaDropdownOptions.tsx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import ISO6391 from 'iso-639-1';
  2. import { DropdownItemProps } from 'semantic-ui-react';
  3. import { LanguageType } from '../schemas/general/Language';
  4. import { TextValueEntity } from '@joystream/types/versioned-store/EntityCodec';
  5. import { InternalEntities } from '../transport';
  6. const buildOptions = (entities: TextValueEntity[]): DropdownItemProps[] =>
  7. entities.map((x) => ({ key: x.id, value: x.id, text: x.value }));
  8. const buildLanguageOptions = (entities: LanguageType[]): DropdownItemProps[] =>
  9. entities.map((x) => ({ key: x.id, value: x.id, text: ISO6391.getName(x.value) }));
  10. export class MediaDropdownOptions {
  11. public languageOptions: DropdownItemProps[]
  12. public contentLicenseOptions: DropdownItemProps[]
  13. public curationStatusOptions: DropdownItemProps[]
  14. public musicGenreOptions: DropdownItemProps[]
  15. public musicMoodOptions: DropdownItemProps[]
  16. public musicThemeOptions: DropdownItemProps[]
  17. public publicationStatusOptions: DropdownItemProps[]
  18. public videoCategoryOptions: DropdownItemProps[]
  19. constructor (props: InternalEntities) {
  20. this.languageOptions = buildLanguageOptions(props.languages);
  21. this.contentLicenseOptions = buildOptions(props.contentLicenses);
  22. this.curationStatusOptions = buildOptions(props.curationStatuses);
  23. this.musicGenreOptions = buildOptions(props.musicGenres);
  24. this.musicMoodOptions = buildOptions(props.musicMoods);
  25. this.musicThemeOptions = buildOptions(props.musicThemes);
  26. this.publicationStatusOptions = buildOptions(props.publicationStatuses);
  27. this.videoCategoryOptions = buildOptions(props.videoCategories);
  28. }
  29. static Empty = new MediaDropdownOptions({
  30. languages: [],
  31. contentLicenses: [],
  32. curationStatuses: [],
  33. musicGenres: [],
  34. musicMoods: [],
  35. musicThemes: [],
  36. publicationStatuses: [],
  37. videoCategories: []
  38. });
  39. }