Базовые примитивы

Описание типов данных

Навигация

Вся навигация получается фронтедом по запросу graphql {navigations { ... }} , и в дальнейшем обновляется по подписке {subscribe navigations { ... }}

# для тестирования
{navigations {
  options
  navigation_menu
}}

Название ключей options не чувствительны к регистру.

Меню блюд и разделы меню блюд

Меню блюд может быть 4 типов

Признаком того что конкретный обьект является навигацией по меню блюд, является свойство в { options.specification: "RestoMenu/v1"}

Базовый элемент:

      
    {
    "label": "Блинчики", // Название пункта меню *
    "slug": "blinchiki", //Слаг группы *
    "workTime": "10:00-12:00", // Время работы ( Поле существует для бекэнда, на фронтенде происходит обновление по подписке)
    "active": true, // Дизейбл (реагирует на нажатие) (необязательное поле, по умолчанию считаем что true)
    "visible": true, // Показывать ли пункт меню (необязательное поле, по умолчанию считаем что true)
    }

PS controller не используется для меню блюд.

Концепт и разные версии одного и того же меню.

Для реализации функционала предоставления скидок на предлагаемое меню используется понятие “концепта”.

Концепт устанавливается в свойстве { options.concept: string | 'origin' }. ‘origin’ - значение концепта по умолчанию.

Для получения соответствуюшего концепту списка групп меню и их блюд нужно:

  1. (при использовании библиотеки @webresto/ng-gql и стандартной схемы навигации) Библиотека при загрузке групп и блюд автоматически использует значение концепта, указанное в options.concept объекта навигации. Дополнительно ничего предпринимать не нужно.
  2. (при самостоятельном выполнении запросов к серверу) Передать актуальное значение concept в объекте criteria, который используется в качестве параметра запросов (и подписок) на получение групп ( query group …) и блюд ( query dish …).
query loadGroup {
  group(criteria:{
  		slug:"dostavka",
    concept:"dostavka"
  }) {
    childGroups {
      slug
      id
    }
  }
}

Типы обработки:

Дает возможность по разному реализовать поведение пунктов меню. Для этого нужно установить свойство { options.behavior: "NewPageBySlug"}

Свойство: если не установленно то по дефолту рендрит 3 тип. Если массив пустой и есть initSlug то рендрит по второму типу Если массив пустой и нету initSlug то будет ошибка

  1. NewPageBySlug Построение через initSlug где каждый раздел создается на своей странице
  2. OnePageBySlug Построение через initSlug где все подразделы на одной страницы с навигацией по # (переход реализуется прокруткой)
  3. NewPageByNavigationMenu Построение из меню которое пришло в navigation_menu где каждый раздел создается на своей странице
  4. OnePageByNavigationMenu Построение из меню которое пришло в navigation_menu где все разделы аккамулируются на одной странице, акамуляция происходит по массиву из navigation_menu с учетом очереди

Пример:

В текущем примере установленно значение NewPageByNavigationMenu это означает что при обработке меню фронтенд проигнорирует свойство initSlug


  {
    "mnemonicId": "menu",
    "description": "Dish menu for delivery food website 2",
    "navigation_menu": [
      {
        "label": "Снэк",
        "slug": "snek",
        "active": true
      },
      {
        "label": "Пицца",
        "slug": "picca",
        "active": true
      },
      {
        "label": "Бургеры",
        "slug": "burgery",
        "active": true
      }
    ],
    "options": {
      "behavior": "NewPageByNavigationMenu",
      "initGroupSlug": "dostavka"
    }
  }

Акции

Слайды акций имеют три разрешения

imageDesktop: 1920х510 px imageTablet: 1280х510 px imagePhone: 720х510 px

Для всех слайдов предусмотрен вариант картинки для retina: @x2 Эту картинку можно найти в json соответвующего image

Сортировку нужно производить по свойству order, по возрастанию числа.

линк для перехода по mnemonicId делает лейоут

Пример картинки

GraphQL scalar type (Не типизировано)

[

    {
        "id": 1,
        "name": "420x315.jpg",
        "url": "/seed_images/420x315.jpg",
        "url@2x": "/seed_images/420x315.jpg",
        "url@0_5x": "/seed_images/420x315,
        "width": 420,
        "height": 315
    }

]

Для retina предусмотерна url@2x, Для предзагрузки предусмотрена url@0_5x


Отзывы

Отзывы представлены в виде простого обьекта. Для того чтобы оставить отзыв существует специальная мутация.

Для режима разработки все отзывы появляются автоматически без модерации

{
    
}
Last modified December 31, 2022: switch to english (28d5a83)