Разработка
Добавление сервисов
Давайте разберем создание на примере нового сервиса Bitcoin
, который будет получать информацию из внешнего API.
1. Создание интерфейса
Первым делом обозначим интерфейс взаимодействия сервиса. Необходимо для определения дополнительных свойств:
export interface BitcoinService extends BaseService {
options?: {
code: string
interval?: number
}
}
2. Создание компонента
<template>
<ServiceBase v-bind="props">
<template #title>
{{ $('service.bitcoin.title', { code: options.code }) }}
</template>
<template #description>
{{ $('service.bitcoin.description', { rate: data?.rate || '0' }) }}
</template>
</ServiceBase>
</template>
<script setup lang="ts">
import type { BitcoinService } from '~/types'
const props = defineProps<BitcoinService>()
const { data, pauseUpdate } = useServiceData<BitcoinService, { rate: string }>(props, {
updateInterval: props?.options?.interval
})
onBeforeUnmount(pauseUpdate)
</script>
3. Написание переводов
Если в компоненте используется статическй текст, то его необходимо вынести в файл переводов. Обязательным является добавление en-US.json
переводов, остальные по желанию.
{
"service": {
"bitcoin": {
"title": "Курс {code}",
"description": "Равен {rate}"
}
}
}
Переводы основываются на vue-i18n. Доступны абсолютно все возможности.
4. Получение данных
import type { BitcoinService } from '~/types'
export default defineEventHandler(async (event): Promise<{ rate: string }> => {
const service = await getService<BitcoinService>(event)
try {
const data = await $fetch('https://api.coindesk.com/v1/bpi/currentprice.json', {
parseResponse: (text) => JSON.parse(text)
})
return {
rate: data.bpi[service.option.code].rate
}
} catch (e) {
logger.error(e)
}
return {
rate: '-'
}
})
5. Обновление документации
Не забывайте добавить сервис в документацию, чтобы другие пользователи были в курсе и могли его использовать.
Для этого создайте файлы:
docs/services/bitcoin.md
docs/{lang}/services/bitcoin.md
- можно оставить пустыми
Создание темы оформления
1. Добавление CSS переменных
html.new-theme {
--fg: 67 52 34;
--fg-dimmed: 80 66 49;
--background: 241 231 208;
}
2. Добавление в Config
export interface Config {
title?: string
lang: 'en' | 'ru'
theme?: 'system' | 'light' | 'dark' | 'deep' | 'new-theme'
services: ServicesGroup[]
checkUpdates: boolean
}
3. Обновление документации
Не забывайте добавить new-theme
в документацию, чтобы другие пользователи были в курсе вашей темы.
Для этого найтие секцию с темой оформления во всех переводах и добавьте новый параметр:
docs/reference/configuration.md
docs/{lang}/reference/configuration.md
Написание переводов
1. Создание новый языковой файл
Создайте новый файл в папке locales
. Рекомендуем скопировать locales/en-US.json
и на его основе сделать перевод.
2. Подключение файла
После создания языкового файла необходимо подключить его в nuxt.config.ts
export default defineNuxtConfig({
i18n: {
locales: [
{
code: 'en',
iso: 'en-US',
name: 'English',
file: 'en-US.json',
},
],
},
})
3. Обновление документации
Не забывайте добавить новый язык в документацию, чтобы другие пользователи были в курсе перевода.
Для этого найтие секцию с языком во всех переводах и добавьте новый параметр:
docs/reference/configuration.md
docs/{lang}/reference/configuration.md
Обновление зависимостей
В этом нет необходимости. На проекте подключен Dependabot, который раз в неделю сканирует новые зависимости. Но если все же у вас есть такая необходимость, то выполните команду yarn upgrade
. После чего проверьте все, что было обновлено.
После того как вы убедитесь в работоспособности приложения, создайте новый pull request
.