# Пользовательские поля не вставляются с новым редактором ProseMirror

**URL:** https://meta.discourse.org/t/custom-fields-are-not-inserted-with-new-prosemirror-editor/384124
**Category:** Bug
**Tags:** events
**Created:** [26.Сентябрь.2025 13:56:27 UTC](https://meta.discourse.org/t/custom-fields-are-not-inserted-with-new-prosemirror-editor/384124 "2025-09-26T13:56:27Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![manut](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/manut/32/485119_2.png) [@manut](https://meta.discourse.org/u/manut)
#### Post date: [26.Сентябрь.2025 13:56:27 UTC](https://meta.discourse.org/t/custom-fields-are-not-inserted-with-new-prosemirror-editor/384124/1 "2025-09-26T13:56:27Z")

</div>

Привет!

У нас возникла проблема с пользовательскими тегами событий и новым WYSIWYG-редактором ProseMirror: пользовательские поля, заполненные в форме события, отсутствуют в сгенерированной строке. С редактором Markdown всё работает как раньше.

## Шаги для воспроизведения:

1. Включите плагин Discourse Calendar.
2. Добавьте одно пользовательское поле в конфигурацию плагина.
3. Откройте форму для создания нового сообщения.
4. Выберите редактор ProseMirror.
5. Создайте событие, указав значение для пользовательского поля (Опции \> Создать событие).
6. Подтвердите создание события.
7. Переключитесь на редактор Markdown.

## Что происходит

Пользовательское поле отсутствует в теге `[event]`.

## Ожидаемое поведение

Пользовательское поле должно присутствовать в теге `[event]`.

## Примечания

Если выполнить те же действия, но начать с редактора Markdown вместо ProseMirror, пользовательское поле будет присутствовать в теге `[event]`.

---

<div class="post-metadata">

### Author: ![manut](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/manut/32/485119_2.png) [@manut](https://meta.discourse.org/u/manut)
#### Post date: [26.Сентябрь.2025 14:07:06 UTC](https://meta.discourse.org/t/custom-fields-are-not-inserted-with-new-prosemirror-editor/384124/2 "2025-09-26T14:07:06Z")

</div>

Я немного исследовал, что происходило с `toolbarEvent` при проверке нового события: метод `addText()` в обоих случаях, похоже, получает правильную разметку:

```txt
[event start="..." status="..." timezone="..." end="..." cf_1="abcd"]\n[/event]

```

---

<div class="post-metadata">

### Author: ![manut](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/manut/32/485119_2.png) [@manut](https://meta.discourse.org/u/manut)
#### Post date: [27.Сентябрь.2025 04:11:07 UTC](https://meta.discourse.org/t/custom-fields-are-not-inserted-with-new-prosemirror-editor/384124/3 "2025-09-27T04:11:07Z")

</div>

Если это поможет, вот тест QUnit для воспроизведения проблемы:

```js
// plugins/discourse-calendar/test/javascripts/acceptance/post-event-builder-custom-tags-test.js
import { click, find, visit, fillIn } from "@ember/test-helpers";
import { test } from "qunit";
import { acceptance } from "discourse/tests/helpers/qunit-helpers";
import selectKit from "discourse/tests/helpers/select-kit-helper";
import { i18n } from "discourse-i18n";

acceptance("Discourse Calendar — Форма нового события с пользовательскими полями", function (needs) {
  needs.user({ admin: true, can_create_discourse_post_event: true });
  needs.settings({
    discourse_local_dates_enabled: true,
    calendar_enabled: true,
    discourse_post_event_enabled: true,
    discourse_post_event_allowed_on_groups: "",
    discourse_post_event_allowed_custom_fields: "my_custom_field",
    coopaname_integration_enabled: false,
  });

  test("заполнение формы в редакторе MD заполняет пользовательские поля", async function (assert) {
    await ensureEventTagHasFields(assert, 'md');
  });

  test("заполнение формы в редакторе WYSIWYG заполняет пользовательские поля", async function (assert) {
    await ensureEventTagHasFields(assert, 'wysiwyg');
  });
});

async function ensureEventTagHasFields(assert, editorType){
  await visit("/");
  await click('#create-topic');
  const categoryChooser = selectKit(".category-chooser");
  await categoryChooser.expand();
  await categoryChooser.selectRowByValue(2);

  await switchEditorTo(editorType);

  await click(".toolbar-menu__options-trigger");
  await click(`button[title='${i18n("discourse_post_event.builder_modal.attach")}']`);
  await fillIn('input.custom-field-input', 'some value');
  await click('.d-modal__footer > button');

  await switchEditorTo('md');

  const fields = ['start', 'status', 'timezone', 'myCustomField'];
  const content = await find(".d-editor-input").value;

  fields.forEach((field) => {
    assert.true(content.includes(`${field}="`), `${field} присутствует в теге события`);
  });
}

async function switchEditorTo(type){
  const editorSwitch = find('button.composer-toggle-switch');
  const isInMarkdown = editorSwitch.attributes['aria-checked'].value === 'false';
  if ((isInMarkdown && type === 'wysiwyg') || (!isInMarkdown && type === 'md')) {
    await click(editorSwitch);
  }
}

```

---

<div class="post-metadata">

### Author: ![manut](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/manut/32/485119_2.png) [@manut](https://meta.discourse.org/u/manut)
#### Post date: [29.Сентябрь.2025 14:09:50 UTC](https://meta.discourse.org/t/custom-fields-are-not-inserted-with-new-prosemirror-editor/384124/4 "2025-09-29T14:09:50Z")

</div>

Конечно, удалите эту строку в тесте `coopaname_integration_enabled: false,` 🙃

---

<div class="post-metadata">

### Author: ![manut](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/manut/32/485119_2.png) [@manut](https://meta.discourse.org/u/manut)
#### Post date: [29.Октябрь.2025 14:10:22 UTC](https://meta.discourse.org/t/custom-fields-are-not-inserted-with-new-prosemirror-editor/384124/5 "2025-10-29T14:10:22Z")

</div>

Я не могу найти другой плагин с аналогичной функцией, поэтому сложно понять, в чём проблема.

При валидации формы вызывается `this.args.model.toolbarEvent.addText()` с правильным текстом.

Несколько `console.log` привели меня к `text-manipulation.js#addText()`, где вызывается `this.convertFromMarkdown(text)`. Похоже, проблема именно здесь: здесь применяется своего рода схема, и она не содержит пользовательских полей.

Продолжаю копать 🪏 …

---

<div class="post-metadata">

### Author: ![manut](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/manut/32/485119_2.png) [@manut](https://meta.discourse.org/u/manut)
#### Post date: [29.Октябрь.2025 14:25:43 UTC](https://meta.discourse.org/t/custom-fields-are-not-inserted-with-new-prosemirror-editor/384124/6 "2025-10-29T14:25:43Z")

</div>

Проблема возникает из-за расширения редактора `discourse-calendar/assets/javascripts/discourse/pre-initializers/rich-editor-extension.js`: список атрибутов, используемых функцией `convertFromMarkdown()`, определен в константе `EVENT_ATTRIBUTES`. Это работает, если добавить пользовательское поле в этот список.

```js
const EVENT_ATTRIBUTES = {
  // ...
  chatChannelId: { default: null },
  myCustomField: {default: null}
};

```

В этом файле ничего не сказано о пользовательских полях; я не знаю, как дополнить эту константу всеми пользовательскими полями; расширение, похоже, регистрируется на очень раннем этапе процесса.

Буду рад любым предложениям, так как из-за этого плагин становится неработоспособным с новым редактором, который нельзя отключить, и мы застряли на версии Discourse 3.4.

---

<div class="post-metadata">

### Author: ![renato](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/renato/32/383632_2.png) [@renato](https://meta.discourse.org/u/renato)
#### Post date: [29.Октябрь.2025 14:30:58 UTC](https://meta.discourse.org/t/custom-fields-are-not-inserted-with-new-prosemirror-editor/384124/7 "2025-10-29T14:30:58Z")

</div>

Настраиваемые поля действительно не поддерживаются в богатом редакторе **пока что**. Мы изучим наилучший путь решения.

> [@manut](#):
>
> с новым редактором, который нельзя отключить

Это возможно — если вы администратор, вы можете установить `SiteSettings.rich_editor = false` через консоль, которая всё ещё доступна как крайняя мера в подобных случаях.

---

<div class="post-metadata">

### Author: ![manut](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/manut/32/485119_2.png) [@manut](https://meta.discourse.org/u/manut)
#### Post date: [29.Октябрь.2025 14:37:44 UTC](https://meta.discourse.org/t/custom-fields-are-not-inserted-with-new-prosemirror-editor/384124/8 "2025-10-29T14:37:44Z")

</div>

Спасибо за ваш ответ, мы пока отключим редактор.

---

<div class="post-metadata">

### Author: ![renato](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/renato/32/383632_2.png) [@renato](https://meta.discourse.org/u/renato)
#### Post date: [21.Июль.2026 12:46:49 UTC](https://meta.discourse.org/t/custom-fields-are-not-inserted-with-new-prosemirror-editor/384124/13 "2026-07-21T12:46:49Z")

</div>

Это было исправлено в [FIX: restore post event allowed custom fields - Pull Request #40551 - discourse/discourse - GitHub](https://github.com/discourse/discourse/pull/40551)
