@@ -20,7 +20,6 @@ jobs:
|
||||
node-version: '22'
|
||||
- name: Clean install dependencies and build
|
||||
run: |
|
||||
cd apps/frontend
|
||||
npm ci
|
||||
npm run build-only -- --emptyOutDir --outDir /www/hereconnect.condev.ru/build-${{env.GITHUB_SHA}}/
|
||||
npm run build-only --workspace=apps/frontend -- --emptyOutDir --outDir /www/hereconnect.condev.ru/build-${{env.GITHUB_SHA}}/
|
||||
mv /www/hereconnect.condev.ru/current /www/hereconnect.condev.ru/old && mv /www/hereconnect.condev.ru/build-${{env.GITHUB_SHA}} /www/hereconnect.condev.ru/current && rm -rf /www/hereconnect.condev.ru/old
|
||||
|
||||
@@ -2,6 +2,10 @@
|
||||
|
||||
Этот репозиторий содержит код для платформы, предоставляющей возможность создания и использования QR-кодов для взаимодействия между пользователями. Репозиторий организован как монорепозиторий для упрощения управления проектом.
|
||||
|
||||
# Тестовый стенд:
|
||||
[https://hereconnect.condev.ru/](https://hereconnect.condev.ru/) автоматически собирается с ветки main
|
||||
|
||||
|
||||
## Структура репозитория
|
||||
|
||||
```plaintext
|
||||
|
||||
@@ -62,6 +62,3 @@ npm run test:e2e -- --debug
|
||||
```sh
|
||||
npm run lint
|
||||
```
|
||||
|
||||
# Demo
|
||||
Open [https://hereconnect.condev.ru/](https://hereconnect.condev.ru/) to see latest build from main branch
|
||||
|
||||
Vendored
-22
@@ -9,47 +9,25 @@ declare module 'vue' {
|
||||
export interface GlobalComponents {
|
||||
Button: typeof import('primevue/button')['default']
|
||||
Card: typeof import('primevue/card')['default']
|
||||
Chat: typeof import('./src/components/ChatComponent.vue')['default']
|
||||
ChatComponent: typeof import('./src/components/ChatComponent.vue')['default']
|
||||
Checkbox: typeof import('primevue/checkbox')['default']
|
||||
ContactInfo: typeof import('./src/components/read/ReadContactInfo.vue')['default']
|
||||
CreateActionsSection: typeof import('./src/components/create/CreateActionsSection.vue')['default']
|
||||
CreateDeliverySection: typeof import('./src/components/create/CreateMessageDeliveryMethodSection.vue')['default']
|
||||
CreateMessageDeliveryMethodSection: typeof import('./src/components/create/CreateMessageDeliveryMethodSection.vue')['default']
|
||||
CreateMessagesSection: typeof import('./src/components/create/CreatePredefinedMessagesSection.vue')['default']
|
||||
CreateNameSection: typeof import('./src/components/create/CreateNameSection.vue')['default']
|
||||
CreatePlacementSection: typeof import('./src/components/create/CreatePlacementSection.vue')['default']
|
||||
CreatePredefinedMessagesSection: typeof import('./src/components/create/CreatePredefinedMessagesSection.vue')['default']
|
||||
CreateReadySection: typeof import('./src/components/create/CreateReadySection.vue')['default']
|
||||
CreateSection: typeof import('./src/components/create/CreateSection.vue')['default']
|
||||
CreateSectionManager: typeof import('./src/components/create/CreateSectionManager.vue')['default']
|
||||
CreateSummarySection: typeof import('./src/components/create/CreateSummarySection.vue')['default']
|
||||
DownloadImageButton: typeof import('./src/components/manage/DownloadImageButton.vue')['default']
|
||||
DownloadPng: typeof import('./src/components/manage/DownloadImageButton.vue')['default']
|
||||
Dropdown: typeof import('primevue/dropdown')['default']
|
||||
ExamplesSection: typeof import('./src/components/TheWelcome/ExamplesSection.vue')['default']
|
||||
HelloWorld: typeof import('./src/components/HelloWorld.vue')['default']
|
||||
IconCommunity: typeof import('./src/components/icons/IconCommunity.vue')['default']
|
||||
IconDocumentation: typeof import('./src/components/icons/IconDocumentation.vue')['default']
|
||||
IconEcosystem: typeof import('./src/components/icons/IconEcosystem.vue')['default']
|
||||
IconSupport: typeof import('./src/components/icons/IconSupport.vue')['default']
|
||||
IconTooling: typeof import('./src/components/icons/IconTooling.vue')['default']
|
||||
InputText: typeof import('primevue/inputtext')['default']
|
||||
ManagePlacementInstructions: typeof import('./src/components/manage/ManagePlacementInstructions.vue')['default']
|
||||
MessageSender: typeof import('./src/components/read/ReadMessageSender.vue')['default']
|
||||
PlacementInstructions: typeof import('./src/components/manage/ManagePlacementInstructions.vue')['default']
|
||||
QRCodeReadySection: typeof import('./src/components/create/CreateReadySection.vue')['default']
|
||||
QueryRender: typeof import('./src/components/QueryRender.vue')['default']
|
||||
RadioButton: typeof import('primevue/radiobutton')['default']
|
||||
ReadContactInfo: typeof import('./src/components/read/ReadContactInfo.vue')['default']
|
||||
ReadMessageSender: typeof import('./src/components/read/ReadMessageSender.vue')['default']
|
||||
RouterLink: typeof import('vue-router')['RouterLink']
|
||||
RouterView: typeof import('vue-router')['RouterView']
|
||||
Select: typeof import('primevue/select')['default']
|
||||
SelectActions: typeof import('./src/components/create/SelectActions.vue')['default']
|
||||
SelecteActions: typeof import('./src/components/create/SelecteActions.vue')['default']
|
||||
SelectPlacement: typeof import('./src/components/create/SelectPlacement.vue')['default']
|
||||
TheWelcome: typeof import('./src/components/TheWelcome/TheWelcome.vue')['default']
|
||||
WelcomeItem: typeof import('./src/components/WelcomeItem.vue')['default']
|
||||
}
|
||||
}
|
||||
|
||||
Generated
-8167
File diff suppressed because it is too large
Load Diff
@@ -14,6 +14,7 @@ const { data, error, refetch, isSuccess, isError, isLoading } = query
|
||||
<slot v-if="isSuccess" name="default" :data="data! as R" />
|
||||
<slot v-else-if="isLoading" name="loading"><p class="text-gray-500">Загрузка данных...</p></slot>
|
||||
<slot v-else-if="isError" name="error" :error="error as E" :reload="refetch">
|
||||
Ошибка загрузки данных: {{ error && 'message' in error ? error.message : error }}
|
||||
Ошибка загрузки данных:
|
||||
{{ error && typeof error === 'object' && 'message' in error ? error.message : error }}
|
||||
</slot>
|
||||
</template>
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
import { describe, it, expect } from 'vitest'
|
||||
|
||||
import { mount } from '@vue/test-utils'
|
||||
import HelloWorld from '../HelloWorld.vue'
|
||||
|
||||
describe('HelloWorld', () => {
|
||||
it('renders properly', () => {
|
||||
const wrapper = mount(HelloWorld, { props: { msg: 'Hello Vitest' } })
|
||||
expect(wrapper.text()).toContain('Hello Vitest')
|
||||
})
|
||||
})
|
||||
@@ -29,7 +29,7 @@ import { type QRCodeDocument } from '@/types/DBDocumentTypes'
|
||||
import { deliveryOptions } from '@/constants/deliveryOptions'
|
||||
|
||||
const emit = defineEmits(['nextStep'])
|
||||
const model = defineModel<QRCodeDocument['messageDeliveryMethod']>()
|
||||
const model = defineModel<null | QRCodeDocument['messageDeliveryMethod']>()
|
||||
|
||||
// Локальное состояние для уведомления
|
||||
const telegramNotice = ref(false)
|
||||
|
||||
@@ -19,7 +19,8 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { qrCodePlacements } from '@/constants/qrCodePlacements'
|
||||
const selectedPlacement = defineModel<string>()
|
||||
import type { QRCodeDocument } from '@/types/DBDocumentTypes'
|
||||
const selectedPlacement = defineModel<null | QRCodeDocument['placement']>()
|
||||
|
||||
defineEmits(['nextStep'])
|
||||
</script>
|
||||
|
||||
@@ -35,7 +35,7 @@ import { type QRCodeDocument } from '@/types/DBDocumentTypes'
|
||||
import { defaultMessages } from '@/constants/defaultMessages'
|
||||
|
||||
// Пропсы
|
||||
const props = defineProps<{ placement: QRCodeDocument['placement'] }>()
|
||||
const props = defineProps<{ placement: null | QRCodeDocument['placement'] }>()
|
||||
const messagesRef = useTemplateRef<HTMLDivElement[]>('messagesRef')
|
||||
|
||||
// Локальное хранилище сообщений
|
||||
@@ -55,7 +55,7 @@ watch(
|
||||
messages.value.length === 0 ||
|
||||
JSON.stringify(messages.value) === JSON.stringify(prevDefaultMessages)
|
||||
if (isMessagesDefault) {
|
||||
messages.value = [...(defaultMessages[newPlacement] || [])]
|
||||
messages.value = [...(defaultMessages[newPlacement!] || [])]
|
||||
}
|
||||
},
|
||||
{ immediate: true },
|
||||
|
||||
@@ -16,7 +16,11 @@ watch(
|
||||
() => sectionRef.value && props.isNextActiveSection,
|
||||
(isNextActiveSection) => {
|
||||
if (isNextActiveSection) {
|
||||
sectionRef.value?.querySelector('input[type="text"]')?.focus()
|
||||
const input = sectionRef.value?.querySelector('input[type="text"]')
|
||||
if (input instanceof HTMLInputElement) {
|
||||
input.focus()
|
||||
}
|
||||
|
||||
sectionRef.value?.scrollIntoView({ behavior: 'smooth' })
|
||||
}
|
||||
},
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
</template>
|
||||
|
||||
<template #messages>
|
||||
<CreatePredefinedMessagesSection :placement="placement" v-model="messages" />
|
||||
<CreatePredefinedMessagesSection :placement v-model="messages" />
|
||||
</template>
|
||||
|
||||
<template #summary>
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
{
|
||||
"extends": "@vue/tsconfig/tsconfig.dom.json",
|
||||
"include": ["env.d.ts", "src/**/*", "src/**/*.vue"],
|
||||
"include": ["./components.d.ts", "env.d.ts", "src/**/*", "src/**/*.vue"],
|
||||
"exclude": ["src/**/__tests__/*"],
|
||||
"files": ["./components.d.ts"],
|
||||
"compilerOptions": {
|
||||
"composite": true,
|
||||
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"files": ["./components.d.ts"],
|
||||
"files": [],
|
||||
"references": [
|
||||
{
|
||||
"path": "./tsconfig.node.json"
|
||||
|
||||
Reference in New Issue
Block a user