discourse/plugins/discourse-policy/test/javascripts/acceptance
Régis Hanol b66fca70d0
DEV: Add page-aware plugin APIs for saving user preferences (#36757)
Previously, plugins that needed to save user preferences on specific
preference pages had to either:

1. Manually register value transformers for
`preferences-save-attributes`
2. Use `modifyClass` to push fields to `saveAttrNames`

The second approach was broken because `saveAttrNames` is now a getter
that returns a fresh array each time, so pushed values were lost.

This commit introduces three new plugin APIs that handle the transformer
registration automatically:

- `addSaveableUserOption(name, { page })` - for `user_options` table
fields
- `addSaveableUserField(name, { page })` - for `user_fields` table
fields
- `addSaveableCustomFields(page)` - ensures `custom_fields` object is
saved on a page (auto-deduplicates across plugins)

The `{ page }` option specifies which preferences page triggers saving:
"account", "emails", "interface", "notifications", "profile",
"tracking", etc.

Also updates bundled plugins to use the new APIs:
- chat: `addSaveableUserOption` with `{ page: "emails" }` for email
frequency
- discourse-ai: `addSaveableUserOption` with `{ page: "interface" }`
- discourse-assign: `addSaveableUserOption` with `{ page: "tracking" }`,
`addSaveableCustomFields` with `"notifications"`
- discourse-policy: `addSaveableUserOption` with `{ page: "emails" }`
- discourse-rewind: `addSaveableUserOption` (no page, custom prefs page)

Deprecates `addSaveableUserOptionField` in favor of
`addSaveableUserOption`.

Ref - https://meta.discourse.org/t/391509

Follow up to ee1a1c7219
2025-12-18 10:58:16 +01:00
..
policy-test.js DEV: Add page-aware plugin APIs for saving user preferences (#36757) 2025-12-18 10:58:16 +01:00