Перейти до змісту

Архітектура

Компоненти

Фронтенд побудований з веб-компонентів. Вони визначені у файлах Javascript в каталозі src.

Зазвичай, кожен файл визначає один компонент, починаючи з

class GrampsjsSomeElement extends LitElement
і закінчуючи
customElements.define('grampsjs-some-element', GrampsjsSomeElement)`
який визначає новий HTML елемент grampsjs-some-element, що може бути використаний в інших місцях.

Головна точка входу, включена в index.html, — це елемент gramps-js, визначений у GrampsJs.js. Це містить визначення всіх окремих сторінок (які просто відповідають елементам, що показуються або приховуються на основі маршруту/URL), меню та маршрутизацію.

Компоненти в каталозі src/views зазвичай відповідають компонентам повної сторінки, які отримують дані з бекенду (наприклад, перегляд списку людей), тоді як компоненти в src/components зазвичай є меншими будівельними блоками, які використовуються всередині переглядів і отримують свої дані з атрибутів, наданих їх батьківським елементом. Однак це розділення не є строгим.

Потік даних

Дані обмінюються з Бекендом/API через методи apiGet, apiPut та apiPost у src/api.js, які автоматично піклуються про аутентифікацію.

Дані передаються від батьківських компонентів до дочірніх компонентів через властивості (див. наприклад документацію Lit).

Коли дані потрібно передати з дочірнього компонента до батьківського, використовуються користувацькі події, які можна викликати за допомогою функції fireEvent у src/api.js та прослуховувати, використовуючи синтаксис @ Lit (документація).

Аутентифікація

Токен оновлення та токен аутентифікації зберігаються у локальному сховищі браузера. Коли виконується виклик API і токен втрачає дійсність, збережений токен оновлення використовується для отримання нового токена доступу, і виклик API повторюється.

Область авторизації користувача, яка зберігається у вимогах токена доступу, отримується за допомогою функції getPermissions і використовується у верхньому рівні елемента GrampsJs для встановлення булевих властивостей canAdd, canEdit, canManageUsers, які передаються вниз до дочірніх елементів для реалізації функціональності, специфічної для авторизації.