Сортировка BIM 360 вопросов через Forge - PullRequest
0 голосов
/ 23 января 2019

Итак, я работаю над этим образцом кузницы: https://github.com/Autodesk-Forge/bim360-csharp-issues

Я пытаюсь разобраться в проблемах, отображаемых в PropertyPanel. Я спрашиваю, как мне поступить, если я не уверен?

В настоящее время образец загружает ваш документ BIM36O в программу просмотра, в программе просмотра есть расширение, которое при нажатии отображает все проблемы по одной. Эти проблемы в настоящее время сортируются по (Issue1, Issue2, Issue3).

Я вручную использовал эту строку кода для сортировки проблем до того, как они появятся на панели:

 _this.issues = _.sortBy(_this.issues, function (i) { return i.attributes.title });

Я также представил кнопки панели с событиями onclick. Как отсортировать проблемы после нажатия кнопки и повторно отобразить теперь отсортированные проблемы на панели?

Вот мой код для панели:

function BIM360IssuePanel(viewer, container, id, title, options) {

    this.viewer = viewer;
    Autodesk.Viewing.UI.PropertyPanel.call(this, container, id, title, options);
    var _this = this;
    this.scrollContainer.style.height = 'calc(100% - 100px)';
    const controlsContainer = document.createElement('div');
    controlsContainer.classList.add('docking-panel-container-solid-color-a');
    controlsContainer.style.height = '30px';
    controlsContainer.style.padding = '4px';

    const titleButton = document.createElement('button');
    const assignedToButton = document.createElement('button');
    const dueDateButton = document.createElement('button');
    const createdAtButton = document.createElement('button');
    const versionButton = document.createElement('button');

    titleButton.innerText = 'Title';
    versionButton.innerText = 'Version';
    assignedToButton.innerText = 'Assigned To';
    dueDateButton.innerText = 'Due Date';
    createdAtButton.innerText = 'Created At';

    titleButton.style.color = 'black';
    versionButton.style.color = 'black';
    assignedToButton.style.color = 'black';
    dueDateButton.style.color = 'black';
    createdAtButton.style.color = 'black';

    controlsContainer.appendChild(titleButton);
    controlsContainer.appendChild(versionButton);
    controlsContainer.appendChild(assignedToButton);
    controlsContainer.appendChild(dueDateButton);
    controlsContainer.appendChild(createdAtButton);
    this.container.appendChild(controlsContainer);    

    assignedToButton.onclick = function (e) {

    };
    titleButton.onclick = function (e) {

    };
    createdAtButton.onclick = function (e) {

    };

    dueDateButton.onclick = function (e) {

    };
    versionButton.onclick = function (e) {
    };

}

Код для showIssues ():

BIM360IssueExtension.prototype.showIssues = function () {
    var _this = this;

    //remove the list of last time
    var pushPinExtension = _this.viewer.getExtension(_this.pushPinExtensionName);
    pushPinExtension.removeAllItems();
    pushPinExtension.showAll();
    var selected = getSelectedNode();




    //sorting issues
    _this.issues = _.sortBy(_this.issues, function (i) { return i.attributes.title });
    //_this.issues = _.sortBy(_this.issues, function (i) { if (i.attributes.due_date === null) return ''; else return Date.parse(i.attributes.due_date) }); 
    //_this.issues = _.sortBy(_this.issues, function (i) { return i.attributes.assigned_to_name });
    //_this.issues = _.sortBy(_this.issues, function (i) { return i.attributes.starting_version });
   // _this.issues = _.sortBy(_this.issues, function (i) { return i.attributes.dateCreated });



    _this.issues.forEach(function (issue) {
        var dateCreated = moment(issue.attributes.created_at);

        // show issue on panel
        if (_this.panel) {

            _this.panel.addProperty('Title', issue.attributes.title, 'Issue ' + issue.attributes.identifier);
            _this.panel.addProperty('Assigned to', issue.attributes.assigned_to_name, 'Issue ' + issue.attributes.identifier);
            _this.panel.addProperty('Version', 'V' + issue.attributes.starting_version + (selected.version != issue.attributes.starting_version ? ' (Not current)' : ''), 'Issue ' + issue.attributes.identifier)
            _this.panel.addProperty('Due Date', issue.attributes.due_date, 'Issue ' + issue.attributes.identifier);
            _this.panel.addProperty('Created at', dateCreated.format('MMMM Do YYYY, h:mm a'), 'Issue ' + issue.attributes.identifier);

        }



        // add the pushpin
        var issueAttributes = issue.attributes;
        var pushpinAttributes = issue.attributes.pushpin_attributes;
        if (pushpinAttributes) {
            issue.type = issue.type.replace('quality_', ''); // temp fix during issues > quality_issues migration
            pushPinExtension.createItem({
                id: issue.id,
                label: issueAttributes.identifier,
                status: issue.type && issueAttributes.status.indexOf(issue.type) === -1 ? `${issue.type}-${issueAttributes.status}` : issueAttributes.status,
                position: pushpinAttributes.location,
                type: issue.type,
                objectId: pushpinAttributes.object_id,
                viewerState: pushpinAttributes.viewer_state
            });




        }

    })
    }

1 Ответ

0 голосов
/ 25 января 2019

Только что сделали быструю проверку с исходным кодом, есть 2 быстрых идеи:

  1. Если при нажатии кнопки сортировки будут какие-то обновления к проблемам, я бы предложил добавитьсостояние текущего порядка сортировки ( sortOrder ) и сортировка проблем различными способами в зависимости от sortOrder в методе showIssues , при нажатии различных кнопок сортировки,Вы можете просто вызвать метод BIM360IssueExtension.prototype.loadIssues () , чтобы обновить все проблемы на панели.

  2. Если список проблем не будет обновляться при нажатии кнопкикнопку сортировки, я бы предложил кэшировать текущий список проблем и добавить новый метод, например sortIssueInPanel () , чтобы отсортировать кнопку, основными шагами должны стать очистка панели проблем, сортировка кэшированного списка проблем идобавьте эти проблемы одну за другой на панель вопросов, пример кода должен быть примерно таким, как следует, но следует отметить, что это всего лишь фрагмент кода, чтобы показать основные шаги, я сделалне проверять или проверять это, просто для справки:

  var sortIssueInPanel = function(sortOrder){
    var issueExtension = NOP_VIEWER.getExtension('BIM360IssueExtension');
    issueExtension.panel.removeAllProperties()

    // Sort the cached issues by sortOrder
    switch(sortOrder){
      case SORT_ORDER.BY_TITLE:
        issuesCached = _.sortBy(issuesCached, function (i) { return i.attributes.title });
        break;

      case SORT_ORDER.BY_DUE_DATE:
      issuesCached = _.sortBy(issuesCached, function (i) { if (i.attributes.due_date === null) return ''; else return Date.parse(i.attributes.due_date) }); 
        break;

      case SORT_ORDER.BY_ASSIGNED_TO_NAME:
      issuesCached = _.sortBy(issuesCached, function (i) { return i.attributes.assigned_to_name });
        break;

      case SORT_ORDER.BY_DATECREATED:
      issuesCached = _.sortBy(issuesCached, function (i) { return i.attributes.dateCreated });
        break;
        
      default:
        break;
    }


    issuesCached.forEach(function (issue) {
      var dateCreated = moment(issue.attributes.created_at);

      // show issue on panel
      if (issueExtension.panel) {

        issueExtension.panel.addProperty('Title', issue.attributes.title, 'Issue ' + issue.attributes.identifier);
        issueExtension.panel.addProperty('Assigned to', issue.attributes.assigned_to_name, 'Issue ' + issue.attributes.identifier);
        issueExtension.panel.addProperty('Version', 'V' + issue.attributes.starting_version + (selected.version != issue.attributes.starting_version ? ' (Not current)' : ''), 'Issue ' + issue.attributes.identifier)
        issueExtension.panel.addProperty('Due Date', issue.attributes.due_date, 'Issue ' + issue.attributes.identifier);
        issueExtension.panel.addProperty('Created at', dateCreated.format('MMMM Do YYYY, h:mm a'), 'Issue ' + issue.attributes.identifier);
      }
    })
  };

Надеюсь, это поможет.

...