@andrey4emk/npm-app-front-b24 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ConfigLogs.vue +9 -3
- package/README.md +47 -28
- package/Subscriptions.vue +486 -192
- package/package.json +25 -9
- package/types/ConfigLogs.vue.d.ts +33 -0
- package/types/Subscriptions.vue.d.ts +167 -0
- package/index.d.ts +0 -39
package/ConfigLogs.vue
CHANGED
|
@@ -110,7 +110,9 @@ function getHeaders() {
|
|
|
110
110
|
|
|
111
111
|
function getUrl() {
|
|
112
112
|
const base = props.apiBase.replace(/\/+$/, "");
|
|
113
|
-
|
|
113
|
+
// Имя конфига подставляется в путь URL: без экранирования «#» и «?» обрежут путь,
|
|
114
|
+
// а «/» уведёт запрос на другой маршрут
|
|
115
|
+
return `${base}/api/config/${encodeURIComponent(props.configName)}`;
|
|
114
116
|
}
|
|
115
117
|
|
|
116
118
|
// Разбирает тело ответа: JSON — объект, любой другой Content-Type — null.
|
|
@@ -128,6 +130,10 @@ async function parseJsonBody(res) {
|
|
|
128
130
|
}
|
|
129
131
|
}
|
|
130
132
|
|
|
133
|
+
// Один и тот же отказ показывается и при загрузке, и при сохранении.
|
|
134
|
+
// Держим текст в одном месте, чтобы формулировки не разъехались
|
|
135
|
+
const NOT_JSON_ERROR_TEXT = "Неожиданный ответ сервера: тело не JSON. Проверьте apiBase";
|
|
136
|
+
|
|
131
137
|
// Текст ошибки по HTTP-статусу. Если сервер прислал message — он попадает в текст
|
|
132
138
|
// при любом коде, включая 401/403 и 5xx: иначе причина отказа теряется
|
|
133
139
|
function httpErrorText(res, json) {
|
|
@@ -173,7 +179,7 @@ async function loadConfig() {
|
|
|
173
179
|
return;
|
|
174
180
|
}
|
|
175
181
|
if (!json) {
|
|
176
|
-
error.value =
|
|
182
|
+
error.value = NOT_JSON_ERROR_TEXT;
|
|
177
183
|
return;
|
|
178
184
|
}
|
|
179
185
|
if (json.status !== "ok" || !json.data) {
|
|
@@ -221,7 +227,7 @@ async function saveConfig() {
|
|
|
221
227
|
return;
|
|
222
228
|
}
|
|
223
229
|
if (!json) {
|
|
224
|
-
message.value =
|
|
230
|
+
message.value = NOT_JSON_ERROR_TEXT;
|
|
225
231
|
messageType.value = "error";
|
|
226
232
|
return;
|
|
227
233
|
}
|
package/README.md
CHANGED
|
@@ -30,9 +30,10 @@ import Subscriptions from "@andrey4emk/npm-app-front-b24/Subscriptions.vue";
|
|
|
30
30
|
|
|
31
31
|
| Prop | Тип | По умолчанию | Описание |
|
|
32
32
|
|------|-----|-------------|----------|
|
|
33
|
-
| `b24` | Object |
|
|
33
|
+
| `b24` | Object | не задан | Клиент Bitrix24 REST API (`B24Frame` из `@bitrix24/b24jssdk`) |
|
|
34
34
|
| `authConnector` | String | `""` | Значение `auth_connector` для методов работы с событиями |
|
|
35
35
|
| `portalDomain` | String | `""` | Адрес портала для ссылок на сущности, `portal.bitrix24.ru` или с `https://` |
|
|
36
|
+
| `timeZone` | String | `""` | Часовой пояс для колонки «Дата», строка IANA (`Europe/Moscow`). Пусто — зона браузера |
|
|
36
37
|
|
|
37
38
|
Клиент ищется в таком порядке: prop `b24`, затем `inject("$b24")` (если приложение сделало
|
|
38
39
|
`app.provide("$b24", client)`), затем глобальный `window.$b24`. Без клиента компонент показывает
|
|
@@ -41,8 +42,8 @@ import Subscriptions from "@andrey4emk/npm-app-front-b24/Subscriptions.vue";
|
|
|
41
42
|
Адрес портала без `portalDomain` берётся из `client.getTargetOrigin()`, а если его нет, из
|
|
42
43
|
`client.auth.getAuthData().domain`.
|
|
43
44
|
|
|
44
|
-
|
|
45
|
-
|
|
45
|
+
Автообновление списка сущностей (раз в 3 секунды, включается тумблером) останавливается на
|
|
46
|
+
скрытой вкладке браузера и при уходе со страницы.
|
|
46
47
|
|
|
47
48
|
### ConfigLogs
|
|
48
49
|
|
|
@@ -72,43 +73,57 @@ import ConfigLogs from "@andrey4emk/npm-app-front-b24/ConfigLogs.vue";
|
|
|
72
73
|
|
|
73
74
|
## Стили
|
|
74
75
|
|
|
75
|
-
Стили компонентов глобальные, без `scoped`,
|
|
76
|
-
`config-logs__*`. Их можно переопределять из CSS приложения по имени класса.
|
|
76
|
+
Стили компонентов глобальные, без `scoped`, все правила под классами с префиксами
|
|
77
|
+
`subscriptions__*` и `config-logs__*`. Их можно переопределять из CSS приложения по имени класса.
|
|
77
78
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
в
|
|
79
|
+
Цвета вынесены в кастомные свойства на корневых элементах `.subscriptions` и `.config-logs`,
|
|
80
|
+
например `--subscriptions-table-line` и `--subscriptions-table-head-ink`. Переопределяйте их
|
|
81
|
+
в своём CSS, если нужна перекраска без переписывания правил.
|
|
81
82
|
|
|
82
|
-
|
|
83
|
+
В `Subscriptions` на элементах вторым классом стоят старые имена `tooltip`, `tooltipParent`,
|
|
84
|
+
`switch`, `slider`, `main` и хуки без правил `subscriptions__title`, `subscriptions__subtitle`.
|
|
85
|
+
Правил под старые имена в пакете нет, они остаются на элементах навсегда как точки подключения
|
|
86
|
+
для стилей приложения. Таблицы получили класс `subscriptions__table` с нейтральным оформлением:
|
|
87
|
+
правила написаны через `:where()`, поэтому любой селектор приложения по `table.main` их перебьёт.
|
|
83
88
|
|
|
84
|
-
|
|
85
|
-
потребителя (Vite + vue-tsc) их подхватил, подключите объявления явно, иначе сработает общий
|
|
86
|
-
shim для `*.vue` и props станут `any`:
|
|
89
|
+
## Типы
|
|
87
90
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
91
|
+
Декларации props генерируются из исходников (`types/*.vue.d.ts`) и подключены через условие
|
|
92
|
+
`types` в карте `exports` для каждого файла. Ничего подключать вручную не нужно: TypeScript
|
|
93
|
+
потребителя (Vite + vue-tsc) подхватит их сам и будет проверять типы props при импорте
|
|
94
|
+
`@andrey4emk/npm-app-front-b24/Subscriptions.vue` и `.../ConfigLogs.vue`.
|
|
92
95
|
|
|
93
|
-
|
|
96
|
+
Требования на стороне потребителя:
|
|
94
97
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
```
|
|
98
|
+
- `moduleResolution` в `tsconfig.json` должен быть `bundler`, `node16` или `nodenext`.
|
|
99
|
+
При устаревшем `node` карта `exports` не читается, типы молча заменяются общим shim `*.vue`,
|
|
100
|
+
props становятся `any`.
|
|
101
|
+
- Не добавляйте пакет в `compilerOptions.types` и не пишите `/// <reference types=...>`:
|
|
102
|
+
корневой файл деклараций отсутствует, обе конструкции дают ошибку TS2688.
|
|
102
103
|
|
|
103
104
|
## Требования
|
|
104
105
|
|
|
105
|
-
- Vue 3 (`^3.
|
|
106
|
+
- Vue 3 (`^3.5.2`) — peer dependency. Ниже 3.5.2 сгенерированные декларации не компилируются
|
|
107
|
+
при `skipLibCheck: false`
|
|
106
108
|
- Проект-потребитель должен поддерживать компиляцию `.vue` файлов (Vite / webpack + vue-loader)
|
|
107
109
|
|
|
108
110
|
Других зависимостей нет: даты форматируются через `Intl.DateTimeFormat`.
|
|
109
111
|
|
|
110
112
|
## История версий
|
|
111
113
|
|
|
114
|
+
### 0.4.0
|
|
115
|
+
|
|
116
|
+
- `Subscriptions`: prop `timeZone`; автообновление останавливается на скрытой вкладке и
|
|
117
|
+
перезапускается после операций; ошибка загрузки гаснет после удачного обновления
|
|
118
|
+
- `Subscriptions`: массовое удаление считает снятые пачки по ответу портала на каждую команду,
|
|
119
|
+
«Удалить все пустые» считает записи по идентификаторам, тексты отчётов уточнены
|
|
120
|
+
- Стили: сняты глобальные правила под старыми именами `tooltip` и `tooltipParent` (имена на
|
|
121
|
+
элементах остались), добавлены `subscriptions__table` и кастомные свойства цветов
|
|
122
|
+
- `ConfigLogs`: имя конфига экранируется в URL
|
|
123
|
+
- Типы: ручной `index.d.ts` заменён на декларации, генерируемые `vue-tsc` при публикации;
|
|
124
|
+
подключение на стороне потребителя больше не требуется
|
|
125
|
+
- `peerDependencies.vue` сужен до `^3.5.2`
|
|
126
|
+
|
|
112
127
|
### 0.3.0
|
|
113
128
|
|
|
114
129
|
- `Subscriptions`: состояние вкладок внутри компонента, props `b24`, `authConnector`,
|
|
@@ -120,12 +135,13 @@ shim для `*.vue` и props станут `any`:
|
|
|
120
135
|
- `ConfigLogs`: разбор ответа сервера с проверкой `res.ok` и Content-Type
|
|
121
136
|
- Классы стилей с префиксами, добавлены стили тумблера
|
|
122
137
|
- Снята зависимость `luxon`
|
|
123
|
-
- Добавлен `index.d.ts` с типами props
|
|
138
|
+
- Добавлен `index.d.ts` с типами props (в 0.4.0 заменён на генерируемые декларации)
|
|
124
139
|
|
|
125
140
|
### 0.2.0
|
|
126
141
|
|
|
127
142
|
Пакет поставляет исходные `.vue` файлы вместо скомпилированного бандла. Компиляция
|
|
128
|
-
происходит на стороне проекта-потребителя.
|
|
143
|
+
происходит на стороне проекта-потребителя. Импорт по голому имени пакета и файл `style.css`
|
|
144
|
+
из 0.1.x больше не существуют. При обновлении с `0.1.x` измените импорты:
|
|
129
145
|
|
|
130
146
|
```js
|
|
131
147
|
// Было (0.1.x)
|
|
@@ -139,9 +155,12 @@ import Subscriptions from "@andrey4emk/npm-app-front-b24/Subscriptions.vue";
|
|
|
139
155
|
## Публикация
|
|
140
156
|
|
|
141
157
|
Версия по semver: `patch` для исправлений, `minor` для новых функций, `major` для ломающих
|
|
142
|
-
изменений.
|
|
158
|
+
изменений. Декларации типов перегенерируются автоматически скриптом `prepublishOnly`, поэтому
|
|
159
|
+
перед публикацией нужны установленные `devDependencies`.
|
|
143
160
|
|
|
144
161
|
```bash
|
|
162
|
+
npm install
|
|
163
|
+
npm run build:types # обновить types/, закоммитить вместе с правками
|
|
145
164
|
git add .
|
|
146
165
|
git commit -m "upd(client): описание"
|
|
147
166
|
npm version minor # или patch / major
|