@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 CHANGED
@@ -110,7 +110,9 @@ function getHeaders() {
110
110
 
111
111
  function getUrl() {
112
112
  const base = props.apiBase.replace(/\/+$/, "");
113
- return `${base}/api/config/${props.configName}`;
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 = "Неожиданный ответ сервера: тело не JSON. Проверьте apiBase";
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 = "Неожиданный ответ сервера: тело не JSON. Проверьте apiBase";
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 | `null` | Клиент Bitrix24 REST API (`B24Frame` из `@bitrix24/b24jssdk`) |
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
- Состояние вкладок хранится внутри компонента, глобальный миксин с `tabs` и `selectTab` больше
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`, классы с префиксами `subscriptions__*` и
76
- `config-logs__*`. Их можно переопределять из CSS приложения по имени класса.
76
+ Стили компонентов глобальные, без `scoped`, все правила под классами с префиксами
77
+ `subscriptions__*` и `config-logs__*`. Их можно переопределять из CSS приложения по имени класса.
77
78
 
78
- В `Subscriptions` старые имена классов `tooltip`, `tooltipParent`, `switch`, `slider` остаются
79
- на элементах вторым классом ради совместимости со стилями потребителей. Они будут сняты
80
- в следующей minor-версии.
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
- Пакет содержит `index.d.ts` с объявлениями props обоих компонентов. Чтобы TypeScript
85
- потребителя (Vite + vue-tsc) их подхватил, подключите объявления явно, иначе сработает общий
86
- shim для `*.vue` и props станут `any`:
89
+ ## Типы
87
90
 
88
- ```ts
89
- // env.d.ts
90
- /// <reference types="@andrey4emk/npm-app-front-b24" />
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
- или в `tsconfig.json`:
96
+ Требования на стороне потребителя:
94
97
 
95
- ```json
96
- {
97
- "compilerOptions": {
98
- "types": ["@andrey4emk/npm-app-front-b24"]
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.0.0`) — peer dependency
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
- происходит на стороне проекта-потребителя. При обновлении с `0.1.x` измените импорты:
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