Google Drive Picker: используйте Feature.MINE_ONLY вместе с Feature.SUPPORT_DRIVES - PullRequest
3 голосов
/ 04 октября 2019

Я пытаюсь создать Google Drive Picker, который отображает следующие виды:

  1. Представление «папка», отображающее дерево папок текущего пользователя, позволяющее ему выбирать толькофайлы, которыми владеет текущий пользователь

  2. Представление «последние», отображающее последние открытые файлы, которыми владеет текущий пользователь

  3. A »sharedпредставление «Диски» (примечание: ранее называлось «командные диски»), отображающее общие диски текущего пользователя, к которым он имеет доступ (он не является владельцем файлов, поскольку файлы общих дисков принадлежат платформе G Suite пользователя)

Первая попытка: Feature.MINE_ONLY с Feature.SUPPORT_DRIVES

Первое, что я попробовал, - включить обе функции MINE_ONLY и SUPPORT_DRIVESна PickerBuilder, однако, это приводит к тому, что представление «общие диски» становится пустым, поскольку пользователь не является владельцем файлов на общих дисках (см. пояснение выше).

Вторая попытка: Features.SUPPORT_DRIVE + setOwnedByMe(true)

Второе, что я попробовал, было тo включить только функцию SUPPORT_DRIVES и использовать метод setOwnedByMe(true) в «папках» и «последних» представлениях.

Он работает почти так, как ожидалось, НО в представлении «папки» не отображаются папки, посколькуфункция setOwnedByMe не может быть вызвана вместе с представлением setIncludeFolders ( ссылка ).

Ниже приводится упрощенная версия моего кода для второй попытки (я намеренно не ставилкод аутентификации):

var googlePicker = new google.picker.PickerBuilder();

// KO: DOES NOT DISPLAY THE FOLDERS
var folderView = new google.picker.DocsView().
    //setIncludeFolders(true). // -> cannot be used with setOwnedByMe, else it overrides it
    setOwnedByMe(true).
    setParent('root');

// OK
var recentFilesView = new google.picker.DocsView(google.picker.ViewId.DOCS).
    setOwnedByMe(true);

// OK
var sharedDriveview = new google.picker.DocsView().
    setIncludeFolders(true).
    setSelectFolderEnabled(false).
    setEnableDrives(true);

googlePicker.enableFeature(google.picker.Feature.SUPPORT_DRIVES); // previously named SUPPORT_TEAM_DRIVES
//googlePicker.enableFeature(google.picker.Feature.MINE_ONLY); // NOT working properly with setEnableDrives

googlePicker.
    addView(folderView).
    addView(recentFilesView).
    addView(sharedDriveview);

googlePicker.build().setVisible(true);

1 Ответ

2 голосов
/ 08 октября 2019

Ответ:

К сожалению, похоже, что это невозможно сделать.

Причина:

Как вы указали в своем вопросе,проблема здесь сводится к этим трем вещам:

  1. Для просмотра общих дисков необходимо установить DocsView.setEnableDrives() на true и Feature.SUPPORT_DRIVES. Это можно использовать совместно с DocsView.setOwnedByMe() и DocsView.setInculudeFolders().
  2. Для просмотра файлов, принадлежащих текущему пользователю, DocsView.setOwnedByMe() необходимо установить на true или Feature.MINE_ONLY должно быть включено. Docsview.setOwnedByMe() можно использовать с DocsView.setEnableDrives(), но не с DocsView.setIncludeFolders().
  3. Для просмотра папок в представлении «Диск» необходимо установить DriveView.setIncludeFolders() на true,но не может быть установлен одновременно с DriveView.setOwnedByMe(), так как значение DriveView.setOwnedByMe() игнорируется, если установлено DriveView.setIncludeFolders().

Возможный обходной путь:

As Pickerможет отображать только одно представление за раз, вы можете создать метод получения информации от пользователя о том, получить ли доступ к общему диску или персональному диску до создания средства выбора, и настроить функции и включения для пользовательского рендеринга. Это может быть сделано множеством способов (например, кнопка, переключатель HTML или вкладка начальной загрузки), которые изменяют, какой инструмент выбора доступен для просмотра на странице.

Запрос функции:

Я подалзапрос функции для этого от вашего имени в системе отслеживания проблем Google. Этот запрос о функции можно найти здесь , который вы можете поставить звездочку (() в левом верхнем углу, чтобы Google знал больше людей, желающих получить этот запрос.

Ссылки:

...