RYAZHAPOVILNUR / ngx-smart

0 stars 0 forks source link

Доработать метод update() #4

Closed RYAZHAPOVILNUR closed 1 year ago

RYAZHAPOVILNUR commented 1 year ago

На данный момент метод update можно использовать тремя способами

// передать в него функцию
this.state$.update((state) => ({
      ...state,
      user: {
        ...state.user,
        address: {
          ...state.user.address,
          city: 'Moscow',
        },
      },
    }));
// обновить с помощью объекта (upsert)
    this.state$.update({ user: { address: { city: 'London' } } });

// обновить с помощью передачи массива у которого первый элемент  - путь, второй - значение
    this.state$.update(['user.address.city', 'Cairo']);
RYAZHAPOVILNUR commented 1 year ago

В рамках задачи необходимо добавить еще несколько способов обновления стейта

// обновить с помощью передачи массива массивов у каждого из которых первый элемент - путь, второй - значение

this.state$.update([['user.address.city', 'Cairo'], ['user.address.street', 'test street']]);

то есть, сейчас мы можем обновить таким образом

this.state$.update(['user.address.city', 'Cairo']); - передаем один массив

после модернизации мы должны иметь возможность передавать массив, состоящий из массивов, вместо

['user.address.city', 'Cairo'] 

будем передавать

 [['user.address.city', 'Cairo'], ['user.address.street', 'test street']]

Для реализации нужно будет проверять является ли переданный аргумент массивом, если аргумент массив и его элементы - строки, то используем то логику которая уже реализована, если же элементы массива - массивы - то проходимся по каждому элементу и к нему применяем такую же логику как применяли в случае когда аргумент - массив строк

  1. Создать новую ветку от develop
  2. Уже реализованный метод update переименовать в updateByArray
  3. Создать метод update снова
  4. Проверять в методе update, если аргумент - массив, где первый элемент - строка, то вызвать updateByArray
  5. Создать метод updateByArrayOfArrays
  6. Проверять в методе update, если аргумент - массив из массивов внутри которого строки, то вызвать новый метод updateByArrayOfArrays
  7. Внутри метода updateByArrayOfArrays пробегаться по массиву, который в него передали и для каждого элемента вызвать updateByArray
  8. Протестировать что весь функционал работает
  9. Запушить ветку
  10. Создать пулл-реквест

// обновить с помощью объекта у которого path - путь, value - значение

this.state$.update({path: 'user.address.city', value: 'Cairo'});

// обновить с помощью массива объектов у каждого из которых path - путь, value - значение

this.state$.update([
    {path: 'user.address.city', value: 'Cairo'}, 
    {path: 'user.address.street', value: 'test street'}
]);