You are here

public function MediaDirectoriesLibraryUiBuilder::buildUi in Media Directories 3.x

Build the media library UI.

Parameters

\Drupal\media_library\MediaLibraryState $state: (optional) The current state of the media library, derived from the current request.

Return value

array The render array for the media library.

Overrides MediaLibraryUiBuilder::buildUi

File

modules/media_directories_ui/src/MediaDirectoriesLibraryUiBuilder.php, line 23

Class

MediaDirectoriesLibraryUiBuilder
Service which builds the media library.

Namespace

Drupal\media_directories_ui

Code

public function buildUi(MediaLibraryState $state = NULL) {
  if (!$state) {
    $state = MediaDirectoriesLibraryState::fromRequest($this->request);
  }

  // When navigating to a media type through the vertical tabs, we only want
  // to load the changed library content. This is not only more efficient, but
  // also provides a more accessible user experience for screen readers.
  if ($state
    ->get('media_library_content') === '1') {
    return $this
      ->buildLibraryContent($state);
  }
  else {
    return [
      '#type' => 'html_tag',
      '#tag' => 'div',
      '#attributes' => [
        'id' => 'media-library-wrapper',
        'class' => [
          'media-library-wrapper',
          'media-directories-library-wrapper',
        ],
      ],
      'tree' => $this
        ->buildMediaDirectoryTree($state),
      'content' => $this
        ->buildLibraryContent($state),
      // Attach the JavaScript for the media library UI. The number of
      // available slots needs to be added to make sure users can't select
      // more items than allowed.
      '#attached' => [
        'library' => [
          'media_library/ui',
          'media_directories_ui/media-ui',
        ],
        'drupalSettings' => [
          'media_library' => [
            'selection_remaining' => $state
              ->getAvailableSlots(),
          ],
          'media_directories' => [
            'cardinality' => $state
              ->getAvailableSlots(),
            // TODO migrate js code.
            'remaining' => $state
              ->getAvailableSlots(),
            'target_bundles' => $state
              ->getAllowedTypeIds(),
            'url' => [
              'directory.tree' => Url::fromRoute('media_directories_ui.directory.tree')
                ->toString(),
              'directory.add' => Url::fromRoute('media_directories_ui.directory.add')
                ->toString(),
              'directory.rename' => Url::fromRoute('media_directories_ui.directory.rename')
                ->toString(),
              'directory.delete' => Url::fromRoute('media_directories_ui.directory.delete')
                ->toString(),
              'directory.move' => Url::fromRoute('media_directories_ui.directory.move')
                ->toString(),
              'media.add' => Url::fromRoute('media_directories_ui.media.add')
                ->toString(),
              'media.edit' => Url::fromRoute('media_directories_ui.media.edit')
                ->toString(),
              'media.move' => Url::fromRoute('media_directories_ui.media.move')
                ->toString(),
              'media.delete' => Url::fromRoute('media_directories_ui.media.delete')
                ->toString(),
            ],
          ],
        ],
      ],
    ];
  }
}