Angular CLI, управляющий локальными и серверными данными - сравнение, объединение или удаление записей - PullRequest
0 голосов
/ 22 января 2019

У меня есть служба Angular CLI, которая возвращает модель данных, как показано ниже.

Проблема, с которой мне нужна помощь, - это массив mergeLines и способ сравнения с локальными данными и обновления любых изменений для отправки обратно для сохранения.

Мне нужно в основном управлять, сравнивая локальные данные с данными на стороне сервера на основе этого набора правил:

  1. Пользователь имеет возможность удалить dataStep, поэтому, если модель сервера для mergeLines содержит dataStepId, которого нет на локальном компьютере, - мы можем удалить это из данных, отправляемых на сервер, так как Пользователь решил удалить линия

  2. Пользователь может изменить имя dataStep, чтобы сделать его более удобным для пользователя - поэтому, если у серверной и локальной модели есть dataStep с совпадающим dataStepID, но с разными именами, тогда значение серверной стороны используется в модели, которую нужно отправить назад.

Местные данные хранятся, как показано ниже, и содержат:

  • stepId (dataStepId для модели сервера)
  • endpointName (имя на модели сервера)
  • тип (не используется в модели сервера)
  • itemName (не используется в модели сервера)

// Local Data
 this.incomingStepsData = this.data.incomingSteps.map((item) => ({
  ..._.pick(item.attributes.dataStepInfo, ['stepId', 'endpointName']),
  type: _.get(item.attributes, 'type'),
  itemName: _.get(item.attributes.attrs['.itemName'], 'text') || (_.get(item.attributes.dataStepInfo, 'endpointName') + "" + (_.get(item.attributes.dataStepInfo, 'stepId'))
)}));

// Server Model
{
    "timeoutInSeconds": 60,
    "mergeLines": [
        {
            "dataStepId": 1000,
            "name": "Name 1",
            "id" : 1
        },
        {
            "dataStepId": 1001,
            "name": "Name 2",
            "id" : 2
        },
        {
            "dataStepId": 1002,
            "name": "Name 3",
            "id" : 3
        }
    ],
    "id": 1001
}

Спасибо за любую помощь

...