Giter Club home page Giter Club logo

learning-quiz's People

Contributors

natalia-nestertsova avatar

Watchers

 avatar  avatar

learning-quiz's Issues

Избавиться от мутаций данных в проекте

В проекте есть места где данные подвержены мутации, это такие места как push или splice или мутация объекта a.name = 'что-то там'.
Нужно использовать только иммутабельные структуры данный. В борьбе с мутабельностью нам сильно поможет дуструктуризация.
Вот пример
Задача, добавить елемент 5 в массив.

мутабельный - от чего нам нужно избавиться
var arr = [1,2,3,4]
arr.push(5);

иммутабельный - должно быть вот так.
var arr = [1,2,3,4]
arr = [...arr, 5]

Основные задачи:

  1. Повторить деструктуризацию (https://learn.javascript.ru/destructuring)

  2. Избавиться от мутабельности в проекте.

Учимся использовать async pipe

Сейчас в приложении кругом используется подписка

someMethod.subcribe(() ={
 // тут манипуляции с данными. 
})

Таких ситуаций нужно избегать.
Нужно переписать подписки на работу с потоком и использованием пайпа asyncPipe.
Начнем с компонента AdminAllQuestionsComponent.
listQuestions: IQuestion[]; - сейчас этио массив IQuestion.
Нужно приветси его к виду:
listQuestions$: Observable<IQuestion[]>;

Далее получить поток:
this.listQuestions$ = this.questionService.getAll();

и отобразить его в шаблоне через asyncPipe

Дополнительный функционал для виджета звонков.

Требуется разработать дополнительный функционал для виджета звонков.
Нам нужно чтоб во время звонка у нас была возможность сохранять какие-то данные. Во время звонка мы хотим согласовать добавление нового варианта ответа на какой-то из вопросов. Для этого требуется добавить в виджет новую кнопку, по нажатию которой будет открываться dropdown с формой у которой 3 поля, кнопки сохранить и отменить.
В сам виджет вносить изменений не нужно, кнопка должна быть отдельным компонентом.
Вот пример:
image
Нам нужно сделать что-то похожее.

Первое поле категории вопросов,
второе - вопросы,
третье - добавить вариант ответа.

Создать компонент telephony-widget

Создать компонент telephony-widget в котором есть кнопка положить трубку, и который может принимать любой компонент в этом поможет ng-content (прочесть про него, в скринкасте по ангуляру рассматривают ng-content)
Дизайн для компонента виджета любой.

Components: Создать компонент категория.

Сейчас в компоненте Main через ngFor репитятся кнопки, так не должно быть. Имя компонента должно говорить о нем, отражать сущность. Для тренировки работы с компонентами предлагаю создать новый компонент Category и использовать его в компоненте Main.
Компонент должен содержать инпут в который будет принимать категорию.
Принять решение нужно ли в нашем случае использовать стратегию OnPush.
Файлы стилей тоже должны быть в компоненте Category.

Поменять таблицу в компоненте admin-all-questions, на список.

Поменять таблицу в компоненте admin-all-questions, на список.
Список должен иметь вид как на скриншоте
image

У нас должен быть смарт компонент например blabla-list который будет содержать dumb компонет blabla-item.
Получать данные должен компонент blabla-list и через async пробрасывать каждый вопрос в blabla-item

Преобразовать структуру проекта.

Переходим на другую структуру проекта.
В папке components должны находиться только компоненты которые будут переиспользоваться, и расположены по папкам smart и dumb
smart - это умные компоненты которые должны что-то делать, возможно тянут данные из сервисов.
dumb - задача dumb компонентов, просто отобразить данные, или прокинуть данные в другие компоненты.
Папка pages или modules содержат модули с помпонентами как пример страница home, login, user и тд... Компоненты которые отображают много других компонент, обычно выносят в модули.

Изменить хранение данных формы в для виджета звонков.

Сейчас когда пользователь открывает форму для редактирования вопроса, она всегда пустая. Это не подходит, нужно чтоб при открытии формы подтягивались предыдущие значения в рамках текущего звонка, пока не положили трубку.

Вариант решения:
Создать сервис, который будет отвечать за звонки, в нем будет храниться информация по текущему звонку, interface c полем phone (это липовый, мы его ради прикола будем пробрасывать когда будем, делать звонок).
Итого сервис содержит
приватную переменную _currentCall$
метод makeCall$
метод completeCall$
getter currentCall$ для возврата _currentCall$

для генерации телефона можно использовать Math.random

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.