feat: add maxIntegrations property to widget definitions

Replaces the hardcoded audioStats check with a generic
maxIntegrations field on WidgetDefinition. The integration
select component respects this to enforce single-select mode.
This commit is contained in:
Thomas Camlong committed 2026-06-09 21:03:09 +02:00
1 parent 302a9f4e54
commit ced96a57b3
3 files changed
+3 -1

No files matched your search

@@ -16,6 +16,7 @@ export const { definition, componentLoader } = createWidgetDefinition("audioStat
icon: IconHeadphones,
supportedIntegrations: ["navidrome", "audiobookshelf"],
integrationsRequired: true,
maxIntegrations: 1,
createOptions() {
return optionsBuilder.from(
(factory) => ({
+1
View File
@@ -42,6 +42,7 @@ export interface WidgetDefinition {
icon: TablerIcon;
supportedIntegrations?: IntegrationKind[];
integrationsRequired?: boolean;
maxIntegrations?: number;
createOptions: (
settings: Pick<SettingsContextProps, "enableStatusByDefault" | "forceDisableStatus">,
) => WidgetOptionsRecord;
@@ -117,7 +117,7 @@ export const WidgetEditModal = createModal<ModalProps<WidgetKind>>(({ actions, i
<WidgetIntegrationSelect
label={t("item.edit.field.integrations.label")}
data={innerProps.integrationData}
canSelectMultiple={innerProps.kind !== "audioStats"}
canSelectMultiple={((widgetImports[innerProps.kind].definition as { maxIntegrations?: number }).maxIntegrations ?? Infinity) > 1}
{...form.getInputProps("integrationIds")}
/>
)}