В этой статье мы рассмотрим полное руководство по созданию приложения Bug-Tracker, которое позволит вам создавать и управлять ошибками с помощью заголовка, описания, названия проекта, приоритета и тега со встроенными сообщениями для уведомления пользователя. Предварительный просмотр приложения можно посмотреть здесь
Мы собираемся создать это приложение с помощью трех простых шагов:
- Создание пользовательского интерфейса
- Интеграция источников данных и создание запросов
- Подключение обработчиков событий
Вот как будет выглядеть наше приложение в конечном итоге:
Предварительные требования:
- ToolJet: Создание пользовательского интерфейса нашего приложения
- Appwrite: Для хранения сообщений об ошибках в коллекции Appwrite
- Aws S3: Для хранения изображений в ведре S3
- DigitalOcean: Для развертывания Appwrite
Этот учебник поможет вам создать полное приложение за несколько минут, и позволит понять различные шаги с полным описанием. Будет лучше, если вы изучите следующие статьи, прежде чем мы начнем создавать приложение. Давайте пристегнем ремни, чтобы получить удовольствие от разработки.
- Tooljet
- Appwrite
- AWS
Создание пользовательского интерфейса
Во-первых, давайте начнем с создания пользовательского интерфейса для нашего приложения. Откройте ToolJet на новой вкладке и нажмите «Создать новое приложение». Для создания всего приложения нам понадобятся следующие виджеты.
- Контейнер
- TextInput и TextArea
- Кнопка
- Таблица
- Выпадающий
- File-Picker
- Изображение
- Модалы
Шаг 1: Создайте табличное представление для списка и управления ошибками
Перетащите виджет контейнера из нашего меню виджетов справа и разверните его полностью. Теперь поместите виджет таблицы внутрь нашего контейнера. После этого давайте осмотрим виджет таблицы и начнем добавлять следующие элементы:
- Добавьте столбцы: Название, Описание, Приоритет, Статус, Назначенный проект и Сообщение.
- Кнопка действий: «Просмотреть детали» и «Редактировать». Мы можем стилизовать наши кнопки, нажав на действия. Позже мы установим свойство «Добавить обработчик», когда закончим работу над нашими модальными представлениями.
В верхней части таблицы добавьте виджет «Текст» под названием Bug Tracker и виджет «Кнопка» с CTA «Новая ошибка». Мы можем стилизовать кнопку, добавив ей цвета и радиус границы. Мы установим событие onClick позже.
Шаг 2: Создание модалов для CRUD-операций
Нам нужно создать три модала, которые будут выскакивать для выполнения всех операций в приложении. Вы можете свободно создавать свои макеты.
- Новая ошибка: Это позволяет вам перечислить новую ошибку конкретного проекта с заголовками, описаниями, приоритетом, сообщениями и соответствующими изображениями.
Перетаскивайте тексты, виджеты text-input, text-area, dropdowns, file-picker и button и настраивайте их в соответствии с пользовательским интерфейсом.
Осмотрите каждое поле ввода и добавьте метку, заполнитель, а также добавьте значения опций и метки в соответствующие выпадающие окна со следующими входами. Вы можете изменить эти значения по своему усмотрению
a) Выбор приоритета: {{["Низкий", "Средний", "Высокий"]}}
b) Название проекта: {{["Мобильное приложение", "Внутренний инструмент", "Веб-сайт"]}}
c) Сообщение об уведомлении: {{["Решить сейчас", "Решить через 3 часа", "Решить в течение 48 часов", "Спасибо за решение"]}}
- Просмотреть детали: Это позволяет вам просматривать конкретные детали вокруг вашей ошибки для лучшего понимания.
Перетаскивайте тексты и виджеты изображений, чтобы настроить их в соответствии с пользовательским интерфейсом выше. Мы отображаем заголовок ошибки, приоритет, описание, сообщение и изображения.
Инспектируем модал, устанавливаем заголовок в Title:{{components.table1.selectedRow.title}}
.
Нам нужно связать данные в наших текстах, чтобы отобразить следующий пользовательский интерфейс.
a) Сообщение: {{components.table1.selectedRow.message}}
b) Приоритет: {{components.table1.selectedRow.priority}}
c) Проект: {{components.table1.selectedRow.project_assigned}}
d) Описание: {{components.table1.selectedRow.description}}
.
Проверьте виджет изображения и задайте URL: {{queries.ListDocument.data.documents[components.table1.selectedRowId].preview_url}}
.
д) Сообщение: {{components.table1.selectedRow.message}}
.
3. Редактирование: Позволяет выполнять операции редактирования и удаления существующей ошибки.
Перетаскивайте тексты, виджеты text-input, text-area, dropdowns, file-picker и button и настраивайте в соответствии с вышеуказанным UI. В настоящее время у нас нет возможности редактировать изображение. Я добавлю ее в следующей версии этого приложения.
Выполните шаг 1, чтобы заполнить значение и метку выпадающей опции. Теперь добавьте значение по умолчанию для каждого поля ввода:
a) Заголовок: {{queries.ListDocument.data.documents[components.table1.selectedRowId].title}}
.
b) Описание: {{queries.ListDocument.data.documents[components.table1.selectedRowId].description}}
c) Приоритет: {{queries.ListDocument.data.documents[components.table1.selectedRowId].Priority}}
d) Название проекта: {{queries.ListDocument.data.documents[components.table1.selectedRowId].project_assigned}}
e) Сообщение об уведомлении: {{queries.ListDocument.data.documents[components.table1.selectedRowId].message}}
f) Загруженный скриншот: {{queries.ListDocument.data.documents[components.table1.selectedRowId].preview_url}}
Шаг 3: Проверка формата и стилей таблицы
Давайте отформатируем и оформим виджет таблицы. Вы можете свободно изучать различные варианты, доступные для вашей цели. Пожалуйста, скопируйте следующие настройки и вставьте их в ваше приложение.
a) Свойства: Это поможет вам отобразить коллекцию, которую вы создали на Appwrite. Позже в учебнике мы узнаем о создании запросов. Вы должны скопировать этот {{queries.ListDocument.data.documents}}
в поле ввода.
б) Колонки: Мы определили эти колонки в наших атрибутах Appwrite. Нам нужно обновить и добавить следующие столбцы, т.е. название, описание, приоритет, проект_назначен и сообщение. Примечание: Определяйте атрибуты в небольшом корпусе. В настройках каждого столбца присвойте ключу то же значение, что и имени столбца.
c) Кнопки действий: После добавления двух кнопок действия, Edit и View details, вы можете изучить их настройки, чтобы придать кнопке стиль. Вы должны добавить обработчик события с «Show Modal» в качестве действия и выбрать модальную кнопку view_details. То же самое сделайте в настройках кнопки действия Edit для модала Edit.
г) Стили: На вкладке стилей таблицы установите радиус кнопки действия равным 8, тип таблицы — пограничная, размер ячеек — просторный, радиус границы — 8.
Шаг 4: Подключение модалов в пользовательском интерфейсе
Давайте добавим наши модалы с событиями onClick к соответствующим кнопкам. Осмотрите каждую кнопку и перейдите к свойству «Добавить обработчик события», чтобы выполнить этот шаг.
Теперь нажмите на «Action» и установите значение «Show Modal». Мы получим возможность выбрать параметры действия, которые мы поместим в наши соответствующие модалы.
Отлично !!! 👍 Мы завершили первую часть нашего приложения. Теперь давайте перейдем к следующему шагу.
Интеграция источников данных и создание запросов
Мы должны добавить 2 источника данных, т.е. Aws и Appwrite. Вы можете посетить эти ссылки, чтобы прочитать о шагах, связанных с интеграцией.
Шаг 1: Добавление источников данных
a) Настройте AWS:
- Создайте учетную запись на AWS
- После этого необходимо предоставить разрешения на доступ
- Создайте ведро с предпочтительным именем
- Вам нужно собрать ключ доступа и секретный ключ и перейти на вкладку ToolJet, где вы создали пользовательский интерфейс
- В левой части выберите источники > нажмите на «+», чтобы добавить источник данных > найдите и выберите AWS s3
- Теперь заполните поля ввода Access key, Secret key, а в регионе выберите «Asia Pacific (Mumbai)».
- Как только вы протестируете соединение, сохраните его.
b) Настройте Appwrite:
Мы будем разворачивать Appwrite на DigitalOcean. Чтобы сделать это, выполните следующие шаги:
-
Зарегистрируйте бесплатный аккаунт на DigitalOcean, при первой регистрации он может запросить данные карты для проверки.
-
После регистрации вы получите бесплатные кредиты в размере $100, действительные в течение 60 дней с момента регистрации. Вы можете использовать эти кредиты для развертывания приложений.
-
Теперь создайте дроплет Appwrite в своем аккаунте DigitalOcean по следующей ссылке: https://marketplace.digitalocean.com/apps/appwrite.
-
Затем выберите возможности, которые вы хотите использовать для вашего дроплета. Мы выберем «Базовый» вариант с общим процессором и не менее 1 ГБ оперативной памяти. Выберите самый дешевый вариант с процессором Intel с SSD за $5 в месяц.
-
На следующем этапе создайте учетные данные для входа в систему вашей виртуальной машины. Вы можете либо добавить SSH-ключи, либо создать пароль root. Рекомендуется добавить SSH-ключи, но вы можете использовать пароль root, если вы новичок.
-
Нажмите на завершить и создать. Через некоторое время на DigitalOcean будет запущена ваша виртуальная машина.
-
Наконец, вы можете перейти по IP-адресу или URL нашего нового сервера и войти в консоль Appwrite.
Создание коллекций и документов
Теперь давайте рассмотрим создание коллекций и атрибутов в Appwrite.
- Войдя в консоль Appwrite, создайте проект. Назовем этот проект:
**bug_tracker**
.
- Перейдите к Базе данных из боковой панели в консоли и нажмите на кнопку Добавить коллекцию. В модальном окне введите имя коллекции как bug_tracker и нажмите кнопку Create.
-
В Appwrite коллекции содержат документы. Мы добавим несколько образцов документов в созданную нами Коллекцию. Коллекции можно представить как таблицы, а документы — как строки. Но прежде чем добавлять документы, нам нужно будет добавить атрибуты.
-
Нам понадобятся следующие атрибуты для документов в нашей коллекции:
-
ID атрибута (ключ): title, Type: String (Название ошибки Например: Button-alignment).
-
ID атрибута (ключ): description, Type: String (Описание ошибки. Например: В /user/profile выровнять кнопку «Сохранить подробности» вправо)
-
Атрибут ID(ключ): приоритет, Тип: String (Установите низкий, средний, высокий).
-
Атрибут ID(ключ): сообщение, Тип: Строка (Выберите сообщение из выпадающего списка: Например: Решить сейчас)
-
ID(ключ) атрибута: project_assigned, Type: string (Проект, в котором обнаружена ошибка. Например: Website)
-
Атрибут ID(key): preview_url, Type: string(URL) (URL изображения скриншота ошибки).
- Наконец, вы можете начать добавлять документы в коллекцию.
Давайте рассмотрим шаги по добавлению источника данных Appwrite:
- Перейдите на левую боковую панель и нажмите на Datasource.
- В появившемся модале выберите источник данных Appwrite.
- Вам будет предложено ввести — Host, ID проекта и секретный ключ. Эти три параметра вы найдете в консоли Appwrite.
- Теперь нажмите на кнопку Test Connection, чтобы убедиться, что сервер Appwrite успешно подключен.
- Нажмите кнопку Сохранить, чтобы добавить источник данных.
Ура!!! 😍 Мы добавили наши источники данных. Теперь давайте создадим различные операции запроса, необходимые для интеграции в наше приложение.
Шаг 2: Создание запросов
Вот следующие запросы, которые мы собираемся создать. Я подробно опишу каждый шаг. Нажмите на значок ‘+’ слева и выберите AWS S3 или Appwrite в качестве dataSource для соответствующих запросов.
Давайте создадим наш первый запрос для подключения ведра AWS, которое мы создали в предыдущем шаге.
- UploadImage: Имя запроса. Мы загрузим файл, выбранный нашим виджетом выбора файлов, в ведро AWS.
Выберите следующие компоненты и заполните их соответственно. Эти компоненты взяты из нашего **create_new_bug **modal, поэтому задайте их соответствующим образом.
a) Операция: Upload Object
b) Ведро: Ведро, которое вы создали на панели инструментов AWS. Я назвал свое ведро ‘tooljet-bucket’.
c) Ключ: {{components.filepicker2.file[0].name}}
d) Content-Type: {{components.filepicker2.file[0].type}}
e) Данные загрузки: {{components.filepicker2.file[0].base64Data}}
f) Кодировка: base64
После этого SAVE
сохраните запрос.
- Загрузка: Имя запроса. Мы загружаем подписанный URL-адрес для предварительного просмотра в нашем приложении.
Нам нужно добавить следующее:
a) Операция: Подписанный URL для загрузки
b) Ведро: Имя ведра, в которое мы загружаем URL для предварительного просмотра
c) Ключ: Это должно быть имя файла. {{components.filepicker2.file[0].name}}
d) Срок действия: Установите значение 36,0000
Поздравляем!!! Мы успешно настроили наши первые запросы. Теперь давайте создадим запросы со следующими именами, чтобы подключить Appwrite для выполнения основных операций CRUD.
- ListDocument: Чтобы перечислить все документы, которые мы создали в наших коллекциях на Appwrite. Скопируйте и вставьте следующие значения.
a) Операция: List Document
b) Идентификатор коллекции: В настройках, вы получите это в своей приборной панели Appwrite.
На вкладке «Дополнительно» установите флажок «Запускать этот запрос при загрузке страницы». После этого сохраните запрос.
- createNewDoc: Чтобы добавить новые записи в нашу коллекцию. Заполните следующие поля.
a) Операция: Добавить документ в коллекцию
b) Идентификатор коллекции: Вы получите его на панели управления Appwrite в разделе настроек.
c) Тело: Добавьте следующие пары ключ-значение. Это формат данных, в котором наша коллекция Appwrite будет получать данные.
{"title": "{{components.textinput4.value}}","description":"{{components.textarea3.value}}","project_assigned": "{{components.dropdown7.value}}","priority": "{{components.dropdown8.value}}","message": "{{components.dropdown9.value}}","preview_url":"{{queries.Download.data.url}}"}
Вы можете сохранить запрос после подтверждения всех компонентов.
- DeleteDocument- Чтобы удалить документ в коллекции, выполните следующие действия.
Добавьте следующее:
a) Операция: Удалить документ
b) Идентификатор коллекции: Вы получите его на панели управления Appwrite в разделе настроек.
c) Идентификатор документа: Это не что иное, как идентификатор выбранной строки. {{queries.ListDocument.data.documents[components.table1.selectedRowId].$id}}
.
После выполнения сохраните этот запрос. Теперь давайте посмотрим на наш последний запрос.
- UpdateDocument: Для обновления определенного документа в коллекции.
a) Операция: Обновить документ
b) Идентификатор коллекции: Вы получите его на панели управления Appwrite в разделе настроек.
c) Идентификатор документа: Это не что иное, как идентификатор выбранной строки. {{queries.ListDocument.data.documents[components.table1.selectedRowId].$id}}
.
d) Тело: Добавьте следующие пары ключ-значение. Это формат данных, в котором наш Appwrite будет получать данные и обновлять коллекцию.
{"title": "{{components.textinput3.value}}","description":"{{components.textarea2.value}}","project_assigned": "{{components.dropdown4.value}}", "Priority":"{{components.dropdown5.value}}","message": "{{components.dropdown6.value}}", "preview_url":"{{queries.ListDocument.data.documents[components.table1.selectedRowId].preview_url}}"}
Сохраните запрос, когда все детали будут заполнены правильно.
Потрясающе!!! 🤩 Мы создали все наши запросы. Теперь нам нужно подключить эти запросы в нашем приложении при нажатии на кнопку в качестве следующего шага.
Подключение обработчиков событий
Теперь, когда мы создали пользовательский интерфейс и создали все запросы, все, что нам нужно сделать, это связать пользовательский интерфейс с запросами. Давайте начнем:
- Перейдите к модалу Create_New_Bug, осмотрите виджет кнопки «Create» и добавьте следующие обработчики шести событий в той же последовательности:
a) Set Variable: Выберите следующее действие и добавьте ключ как «new_bug_status» и установите значение {{true}}
. Перейдите на вкладку Advanced в настройках запроса ListDocument и нажмите на «add a handler». В действии выберите «установить переменную», ключ — new_bug_status, а значение — {{false}}
. При создании кнопки также программно обновите состояние загрузки следующим значением: {{variables?.new_bug_status ?? false}}
. Это позволит сохранить состояние загрузки во время обработки запросов.
b) Запустить запрос: Выберите следующее действие и добавьте запрос как «uploadImage».
c) Запустить запрос: Выберите следующее действие и добавьте запрос «Download».
d) Выполнить запрос: Выберите следующее действие и добавьте запрос «createNewDoc».
д) Выполнить запрос: Выберите следующее действие и добавьте запрос «ListDocument».
f) Закрыть модальное окно: выберите следующее действие и добавьте модальное окно в качестве имени текущего модального окна, т.е. в данном случае Modal3.
- Перейдите к модалу Edit_Bug, осмотрите кнопку «Delete» и добавьте следующие три обработчика событий в той же последовательности:
a) Запустите запрос: Выберите следующее действие и добавьте запрос как «DeleteDocument».
b) Выполнить запрос: Выберите следующее действие и добавьте запрос как «ListDocument».
c) Закрыть модальное окно: выберите следующее действие и добавьте modal как имя текущего модального окна, т.е. Modal2 в данном случае.
- Перейдите к модалу Edit_Bug, осмотрите кнопку «Обновить» и добавьте следующие три обработчика событий в той же последовательности:
a) Run Query: Выберите это действие и добавьте запрос как «UpdateDocument».
b) Запустить запрос: Выберите следующее действие и добавьте запрос как «ListDocument».
c) Закрыть модальное окно: выберите следующее действие и добавьте имя текущего модального окна, т.е. в данном случае Modal2.
Мы успешно соединили запросы и пользовательский интерфейс, и теперь наше приложение полностью функционально. Теперь вы можете понять причину такой последовательности запросов. Теперь мы можем выполнить любую CRUD-операцию и проверить все потоки в нашем приложении.
Поздравляем!!! 🚀 Вы успешно создали свое приложение для отслеживания ошибок. Надеюсь, вы хорошо провели время, создавая что-то новое сегодня, и вы можете начать работу над этим приложением прямо сейчас, выбрав этот шаблон при создании нового приложения.
Мы постоянно интегрируем различные источники данных в ToolJet. Оставайтесь в курсе событий и читайте предстоящие статьи о разработке полезных внутренних инструментов. Если у вас возникли проблемы с созданием этого приложения, присоединяйтесь к нашему сообществу в Slack или напишите нам по адресу hello@tooljet.com.